Собственно имеется клиент Skype, к которому подключается некоторая программа. При этом внутри скайпа вылетает окно о разрешении подключения данной программы. Задача в том, чтобы в автоматическом режиме подтвердить подключение программы путем нажатия на соответствующую кнопку (если есть другие идеи - буду рад выслушать). Вот мои (неработающие) наброски: Code: HWND child = NULL; HWND parent = NULL; long lengthy = NULL; RECT crd; char o; parent = FindWindow("tSkMainForm.UnicodeClass",NULL); if (parent == NULL) { cout<<"Error"<<GetLastError()<<"\n"; } child = FindWindowEx(parent,NULL,"TZapCommunicator",NULL); if (child == NULL) { cout<<"Error "<<GetLastError(); } ShowWindow(parent,SW_SHOWNORMAL); GetWindowRect(child, &crd); lengthx = crd.right - crd.left; for (int posx = lengthx/4; posx >= lengthx/2; posx += 10) { //"тыкаем" мышкой пока не попадем на конопку int posy = 64; //координата Y кнопки SendMessage(child, WM_SETCURSOR, (WPARAM)child, MAKELPARAM(HTCLIENT,WM_MOUSEMOVE)); PostMessage(child, WM_MOUSEMOVE, NULL, MAKELPARAM(posx,posy)); SendMessage(child, WM_MOUSEACTIVATE, (WPARAM)parent, MAKELPARAM(HTCLIENT,WM_LBUTTONDOWN)); SendMessage(child, WM_SETCURSOR, (WPARAM)child, MAKELPARAM(HTCLIENT,WM_LBUTTONDOWN)); PostMessage(child, WM_LBUTTONDOWN, MK_LBUTTON,MAKELPARAM(posx,posy)); SendMessage(child, WM_SETCURSOR, (WPARAM)child, MAKELPARAM(HTCLIENT,WM_LBUTTONUP)); PostMessage(child, WM_LBUTTONUP, NULL, MAKELPARAM(posx,posy)); } return 0; }
кстати в том, коде лучше чуть под другому сделать Code: whilet rue do begin Inc(i); // Ищем дескриптор этого самого окошка hAccept := FindWindowEx(FindWindow(PChar('tSkMainForm.UnicodeClass'), nil), 0, PChar('TZapCommunicator'), nil); if hAccept <> 0 then break; Sleep(1000); // Если прождали ~40 сек, выходим из функции if i = 40 then Exit; end; потому как в первом варианте выходит такая фишка, что даже если нашли кнопку, то всё равно еще секунду будем ждать. а это уже больше палива
Спасибо огромное! Однако почему-то TABом указатель устанавливается на "Запретить доступ". При этом опытным путем установлено, что после нажатия TAB для установки указателя на "Дать доступ" нужно нажать Shift+Tab. Руками Это сделать получается, а вот программно - нет. Code: PostMessage(child,WM_KEYDOWN,VK_TAB,0x000F0001); Sleep(200); PostMessage(child,WM_KEYUP,VK_TAB,0xC00F0001); Sleep(2000); PostMessage(child,WM_KEYDOWN,VK_SHIFT,0x002A0001); PostMessage(child,WM_KEYDOWN,VK_TAB,0x000F0001); Sleep(200); PostMessage(child,WM_KEYUP,VK_SHIFT,0xC02A0001); PostMessage(child,WM_KEYUP,VK_TAB,0xC00F0001);