Здравствуйте, у меня возникла потребность управлением мышью, а именно, кликанье мышей в разных местах формы или к примеру по компоненту CppWebBrowser в фоновом режиме. Искал информацию по управлению мышью для фонового режима и вот что нашел: Code: POINT Point; Point.x=pos[1]+Form1->Left+66; Point.y=pos[0]+Form1->Top+230; // перемещаем мышку в координаты SendMessage(Form1->Handle,WM_MOVE,0,(LPARAM) &Point); // нажимаем кнопку мышки SendMessage(Form1->Handle,WM_LBUTTONDOWN,MK_LBUTTON,(LPARAM) &Point); //отпускаем кнопку мышки SendMessage(Form1->Handle,WM_LBUTTONUP,MK_LBUTTON,(LPARAM) &Point); Но у меня не работает, что можете подсказать? Ктонибудь делал чтонибудь подобное?
Думаеш я не пробовал? mouse_event работает если окно активно, а если я хочу например свернуть приложение и смотреть фильм? нажиматься ничего не будет.... Ключевое слово здесь в фоновом режиме.
когда отпускаеш кнопку мыши оконная процедура кнопки ловит сообщение WM_LBUTTONUP и пересылает родителю сообщение WM_COMMAND в котором указывается id кнопки код уведомления и хендл кнопки Code: ...ButtonWindowProc...(hWnd, lParam) { case WM_LBUTTONUP: WORD wId = WORD(GetMenu(hWnd)); SendMessage(GetParent(hWnd), WM_COMMAND, MAKEWPARAM(wId, BN_CLICKED), hWnd); } родительское окно у себя в оконной процедуре имеет код который ждет сообщений WM_COMMAND у которых id это id кнопки Code: #define BTN_SHOOT 0x41 switch (uMsg) { case WM_COMMAND: switch (LOWORD(wParam)) { case BTN_SHOOT: // ... } } мы можем отправить сообщение так как если бы его отправила родительскому окну сама кнопка Code: #include <windows.h> int main(int argc, char* argv[]) { HWND hWnd = FindWindow("SomeWindow", NULL); SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(BTN_SHOOT, BN_CLICKED), 0); return 0; } а для неактивного окна mouse_event ничего не сделает так как винда отправит это сообщение в очередь foreground потока (тоесть потока который имеет активное окно) а не в какое то другое
bad_boy, не знаю пробовал на примере таком. Кидал на форму СppWebBrowser, потом нажимал на кнопку, згружался гугл, потом задержка, мышкой переход на позицию, потом mouse_event вниз и вверх (клик) и нажималась ссылка. Но когда я сворачивал приложение клик не происходил, и гугл был без изменений
Спасибо за обьяснение! Думаю это должно сработать... Но я все равно до конца не понимаю. Тоесть здесь как бы "две программы" дочерняя и родитель... Можно написать не сложный пример? Ну например программа которая при запуске загружала сайт google.ru и через 2 секунды у примеру "кликала" мышью в координатах ну скажем 100 на 100 от начала компонента браузера. Причем фишка программы должна быть в том что нажатие происходило не в зависимости свернуто ли приложение или активно.
Чего не ясного то.Написали уже все.Если ещё не понял то я обьясню.В винде все гуи конролируется при помощи оконных сообщений, аля WM_messages.Вообщем ТС тебе в мсдн.С окном можно делать что угодно,просто PostMessage+нужное WM_message.
Дк пробую всеми способами. Уже получилось нажать кнопку в неактивном окне, все ок! Осталась работа с курсором. Просто я написал потому как хотелось бы конкретного примера?
ура, прошарив интернет у меня всетаки получилось, и так вот как у меня заработало: HWND wnd1 = FindWindow(NULL,"Form1"); POINT pt; pt.x=50; pt.y=50; HWND hwnd2 = ChildWindowFromPoint(wnd1, pt); SendMessage (hwnd2, WM_LBUTTONDOWN, 0, MAKELPARAM(50,50)); SendMessage (hwnd2, WM_LBUTTONUP, 0, MAKELPARAM(50,50));
Блин, но только нажимаеться на форме на кнопку, тоесть если есть кнопка в тех координатах то она нажимаеться, а если например у меня на форме копмонент CppWebBrowser1 и нужно нажать к примеру на ссылку в коорданатах определенных и на компоненте не нажимает( Никто с данной проблемой не сталкивался, пишу чтото типа автобота, который должен кликать по флеш приложению. Задача впринципе не сложна просто хотелось бы зделать чтобы программу можно было свернуть!