|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.03.2009, 21:58 | #1 |
Регистрация: 07.03.2009
Сообщений: 5
|
PostMessage программно и вручную
И снова здравствуйте...
У меня одна и та же проблема -- двойной щелчок мышью по таким-то координатам в чужом окне. Указатель на окно получен. В окне детей нет. В окне есть только куча TImage. Или похожих хреней, у которых нет хэндла. Spy++ при даблклике пишет: <00001> 0001042A P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:50 yPos:64 [wParam:00000001 lParam:00400032 point:(525, 103)] <00002> 0001042A P WM_LBUTTONUP fwKeys:0000 xPos:50 yPos:64 [wParam:00000000 lParam:00400032 point:(525, 103)] <00003> 0001042A P WM_LBUTTONDBLCLK fwKeys:MK_LBUTTON xPos:50 yPos:64 [wParam:00000001 lParam:00400032 point:(525, 103)] <00004> 0001042A P WM_LBUTTONUP fwKeys:0000 xPos:50 yPos:64 [wParam:00000000 lParam:00400032 point:(525, 103)] Когда я посылаю сообщение из кода: AppActivate имя_окна, True SetCursorPos 504&, 100& // на всяк случай PostMessage имя_дочернего_окна, WM_LBUTTONDOWN, &H1, ML(504, 100) PostMessage имя_дочернего_окна, WM_LBUTTONUP, 0, ML(504, 100) PostMessage имя_дочернего_окна, WM_LBUTTONDBLCLK, &H1, ML(504, 100) PostMessage имя_дочернего_окна, WM_LBUTTONUP, 0, ML(504, 100) где ML преобразует две пары в lWord, Spy++ обнаруживает такое: <00005> 0001042A P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:25688 yPos:19 [wParam:00000001 lParam:00136458 point:(504, 100)] <00006> 0001042A P WM_LBUTTONUP fwKeys:0000 xPos:25688 yPos:19 [wParam:00000000 lParam:00136458 point:(504, 100)] <00007> 0001042A P WM_LBUTTONDBLCLK fwKeys:MK_LBUTTON xPos:25688 yPos:19 [wParam:00000001 lParam:00136458 point:(504, 100)] <00008> 0001042A P WM_LBUTTONUP fwKeys:0000 xPos:25688 yPos:19 [wParam:00000000 lParam:00136458 point:(504, 100)] То есть параметры xPos, yPos отличаются. Если я захожу в прогу, на которую хочу сделать даблклик, ставлю фокус на картинку, выхожу в свою прогу, которая должна посылать PostMessage и запускаю её, то всё работает. Проблема в том -- что я либо неправильно пользуюсь PostMessage, либо не на тот элемент посылаю фокус... но как его послать, если нет хэндла?.. |
10.03.2009, 06:48 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
тебе же Spy++ четко показал
какой IParam нужно передавать... lParam:00400032 попробуй подставить готовый сразу...а не преобразовывать так же попробуй имитировать ВСЕ твои действия Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
10.03.2009, 21:36 | #3 |
Регистрация: 07.03.2009
Сообщений: 5
|
Любой параметр, который я передаю программно, превращается в дефолтовый параметр, который я уже указал даже если ничего не передаю, т.е. vbNull. Пока нашёл выход через SendInput(), всё работает, но мне не надо, чтобы окно было постоянно активным
Почему такой глюк с PostMessage, если SendInput всё делает, как нужно? |
11.03.2009, 15:44 | #4 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
11.03.2009, 22:08 | #5 |
Регистрация: 07.03.2009
Сообщений: 5
|
Ага...
Я её даже не проверял, просто по твоему совету (это не ты такой умный, это я такой тупой ) отсылал напрямую lParam=&H400032, после чего получал тот же ответ, после чего отсылал отсебятину от &H0 до &HFFFFFF; но результат от этого не менялся -- Spy++ стандартно видит один и тот же ответ:136458.
|
12.03.2009, 07:54 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
ты на C пишешь?
не знаю можно ли там, но попробуй передавать просто число(например единицу, или там 17) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как вручную перемещать индикатор в DBGrid | PilGrim | БД в Delphi | 5 | 04.01.2009 18:43 |
Макрос для обновления формул вручную только в одном листе | Neo007 | Microsoft Office Excel | 7 | 26.09.2008 18:17 |
Копирование *.exe вручную | v01umE | Общие вопросы C/C++ | 4 | 06.07.2008 20:06 |