eXeL@B —› Оффтоп —› Ламерская задача покодить |
Посл.ответ | Сообщение |
|
Создано: 04 мая 2008 22:49 · Личное сообщение · #1 Столкнулся с такой задачей, как эмулирование действий пользователя. Конкретно - надо даблкликнуть по часам в трее, и получить соответствующий эффект. Надо сказать, не ожидал такого подвоха - никак не получилось проэмулировать. Окошки отыскал, хендлы правильные, но заслать туда даблклик - нивкакую. Кто попробует ради эксперимента? Можно не заморачиваться с отысканием хэндлов нужных окошек, а взять нужные хэндлы посредством какой-нибудь проги... чисто эксперимент. XP, SP1 ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 05 мая 2008 00:54 · Поправил: Ara · Личное сообщение · #2 |
|
Создано: 05 мая 2008 09:01 · Личное сообщение · #3 |
|
Создано: 05 мая 2008 09:17 · Личное сообщение · #4 |
|
Создано: 05 мая 2008 09:54 · Личное сообщение · #5 |
|
Создано: 05 мая 2008 13:00 · Личное сообщение · #6 Гдето я видел чтото похожее часы это дочернее окно поэтому handle не действителен попробуй получать хэндл так и на него слать Wnd := FindWindow('Shell_TrayWnd', nil); Wnd := FindWindowEx(Wnd, HWND(0), 'TrayNotifyWnd', nil); Wnd := FindWindowEx(Wnd, HWND(0), 'TrayClockWClass', nil); ----- Md5 fcbb6c9c9a5029b24d70f2d67c7cca74 |
|
Создано: 05 мая 2008 14:56 · Личное сообщение · #7 Stack В моём первом комменте сказано, что хендлы найдены правильно. Плюс к тому, в том же комменте обозначено, что для упрощения задачи можно не заниматься отыскиванием хэндлов, потому что задача состоит не в поиске хендлов. Вариантов посика окошек здесь два (мне известных). Через FindWindow и через Enum'ы. Ещё, наверное можно получить виндов под курсором мыши tihiy_grom Я пробовал через подведение курсора к окошку и через передачу координат в Param'е. И оба варианта сразу. Не проходит =( Чуть позже для проверки решил покликать по ярлыкам десктопа и чёт тоже не получилось, но десктоп я забросил, ибо с часами в трее уже наморочился. ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 06 мая 2008 08:50 · Личное сообщение · #8 Можно сделать SetCursorPos(99999,99999); GetCursorPos(xy); SetCursorPos(xy.x-10,xy.y-5); и mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Кодес действительно ламерский, но зато без использования хэндлов и 100% рабочий ----- iNTERNATiONAL CoDE CReW |
|
Создано: 06 мая 2008 16:56 · Личное сообщение · #9 |
|
Создано: 06 мая 2008 19:05 · Личное сообщение · #10 |
|
Создано: 06 мая 2008 22:21 · Поправил: AlexZ · Личное сообщение · #11 tihiy_grom Теоритически, в WM_LBUTTONDBLCLK (и может ещё кой где) надо засылать lParam как двойное слово, в котором старшее слово - координата икс, младшее слово - координата игрек. Но если бы всё так просто. Кстати, щас покликаю по десктопу через маусэвенты ) О, кликается десктоп. Теперь надо юзать эвенты ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 06 мая 2008 22:44 · Личное сообщение · #12 |
|
Создано: 06 мая 2008 23:12 · Личное сообщение · #13
----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 07 мая 2008 19:45 · Поправил: MACKLIA · Личное сообщение · #14 Spirit пишет: Можно сделать SetCursorPos(99999,99999); GetCursorPos(xy); SetCursorPos(xy.x-10,xy.y-5); и mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Кодес действительно ламерский, но зато без использования хэндлов и 100% рабочий Нет не на 100%,у меня рабочий стол растянут на два монитора,а часики на первом А зачем именно по часам кликать ,timedate.cpl запустить и сЁ - результат тотже ----- Что один человек сделал , другой всегда сломать может... |
|
Создано: 07 мая 2008 19:53 · Личное сообщение · #15 |
|
Создано: 07 мая 2008 20:24 · Личное сообщение · #16 |
|
Создано: 07 мая 2008 20:42 · Личное сообщение · #17 |
eXeL@B —› Оффтоп —› Ламерская задача покодить |