Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2009, 21:58   #1
YuraL
 
Регистрация: 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, либо не на тот элемент посылаю фокус... но как его послать, если нет хэндла?..
YuraL вне форума Ответить с цитированием
Старый 10.03.2009, 06:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тебе же Spy++ четко показал
какой IParam нужно передавать...
lParam:00400032
попробуй подставить готовый сразу...а не преобразовывать

так же попробуй имитировать ВСЕ твои действия
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.03.2009, 21:36   #3
YuraL
 
Регистрация: 07.03.2009
Сообщений: 5
По умолчанию

Любой параметр, который я передаю программно, превращается в дефолтовый параметр, который я уже указал даже если ничего не передаю, т.е. vbNull. Пока нашёл выход через SendInput(), всё работает, но мне не надо, чтобы окно было постоянно активным

Почему такой глюк с PostMessage, если SendInput всё делает, как нужно?
YuraL вне форума Ответить с цитированием
Старый 11.03.2009, 15:44   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
lParam:00136458
твой ML не верно преобразует координаты
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.03.2009, 22:08   #5
YuraL
 
Регистрация: 07.03.2009
Сообщений: 5
По умолчанию Ага...

Я её даже не проверял, просто по твоему совету (это не ты такой умный, это я такой тупой ) отсылал напрямую lParam=&H400032, после чего получал тот же ответ, после чего отсылал отсебятину от &H0 до &HFFFFFF; но результат от этого не менялся -- Spy++ стандартно видит один и тот же ответ:136458.
YuraL вне форума Ответить с цитированием
Старый 12.03.2009, 07:54   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ты на C пишешь?
не знаю можно ли там, но попробуй передавать просто число(например единицу, или там 17)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вручную перемещать индикатор в 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