WinApi SendMessage
В какой конкретно момент происходит проблема? Тебе удается получить нужный хэндл?
Удается. Причем для любых частей окна. Spy++ подтверждает, что это те же хэндлы.
Окно не реагирует на SendMessage. Никак не реагирует.
Окно не реагирует на SendMessage. Никак не реагирует.
ХЗ. Я однажды столкнулся с тем, что ОЛЕ2 приложения иногда используют стандартные виндовые мессэджи в своих грязных целях, и проги, эмулирующие клаву, не работают. Может, та же хрень?
У меня такая мысль: может нужно предварительно "подключиться" к тому чужому окну? Листая старые попытки сделать то же самое, нахожу странные строчки, содержащие "AttachThreadInput".
А?
А?
Это бред.
Лезть в Тред проги нужно только если ты ей что-то по ссылке(адресу) передаешь.
все должно работать убедись что у SendMessage правильные параметры (координаты относительные в клиентской области (! MK_LBUTTON не забуть в wParam)
Лезть в Тред проги нужно только если ты ей что-то по ссылке(адресу) передаешь.
все должно работать убедись что у SendMessage правильные параметры (координаты относительные в клиентской области (! MK_LBUTTON не забуть в wParam)
советую использовать SBM_* , а не WM_* гемороя гораздо меньше 
хотя чтобы выполнить SBM_GETRANGE тебе придется в память другого процесса лезть

хотя чтобы выполнить SBM_GETRANGE тебе придется в память другого процесса лезть
ОК. После того, как я вписал wparam он начал реагировать на сообщения о нажатии кнопки мыши. А именно, при выполнении такой проги я явственно вижу, как меняется курсор на изображение руки. А потом снова исчезает. Но не происходит то, что должно происходить при движении мыши... Все msgresult-ы равны 0.
Что означает параметр, что передается после "WM_MOUSEMOVE"? Относительный сдвиг или координаты той точки, куда мышь сдвинулась?
Что означает параметр, что передается после "WM_MOUSEMOVE"? Относительный сдвиг или координаты той точки, куда мышь сдвинулась?
msgresult1 = SendMessage(tebook2_hwnd, WM_LBUTTONDOWN, MK_LBUTTON, &H1010)
Sleep (500)
msgresult2 = SendMessage(tebook2_hwnd, WM_MOUSEMOVE, MK_LBUTTON, &H2020)
Sleep (500)
msgresult3 = SendMessage(tebook2_hwnd, WM_LBUTTONUP, MK_LBUTTON, &H2020)
Sleep (500)
поставь мсдн там есть про параметры сообщений, или win32.hlp из дистрибутива Borland C
RE> Как сэмулировать действие: "нажать левой кнопкой мыши внутри внутреннего окна, протянуть мышь вверх, отпустить левую кнопку"?
Если я правильно понял, то поможет
Если я правильно понял, то поможет
VOID mouse_event( DWORD dwFlags,
DWORD dx,
DWORD dy,
DWORD dwData,
ULONG_PTR dwExtraInfo
);
Я так делал, но это не интересно, поскольку эмулируется именно движение мыши. При этом безразлично, какое окно находится под мышью, ибо не указывается handle. Получается куча забавных побочных эффектов.
Тогда можно попробовать dll-injection получишь доступ ко всему.
если программа, кроме обработки сообщений, также еще сама спрашивает положения мышки, то подход с WM_Mouse-ами работать не будет
Лови позицию мыши. Можешь ловить параметры десктопа и гарантированно загонять мышь в левый верхний угол, неважно.
Выясняй позиции нужных тебе окошек.
Эмулируй движения мыши (но уже не на ощупь, а точно зная, куда ее нужно шевелить).
Потому что окошки, строго говоря, согут игнорировать почти все.
Выясняй позиции нужных тебе окошек.
Эмулируй движения мыши (но уже не на ощупь, а точно зная, куда ее нужно шевелить).
Потому что окошки, строго говоря, согут игнорировать почти все.
Нафик мышку. Лучше использовать собственные сообщения контролов:
например SBM_* для скролл-бара и т.д.(большинство программ (~99.99%) используют common control.dll)
например SBM_* для скролл-бара и т.д.(большинство программ (~99.99%) используют common control.dll)
WM_MOUSEMOVE не следует делать, надо прямо кликать в нужную точку
procedure ClickTo(Handle: HWND; X, Y: integer);
// clicks control defined by Handle to (X, Y) point
begin
SendMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, MakeLong(X, Y;
SendMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, MakeLong(X, Y;
end;
http://07l4h6reqfqji8d140kg5jv5q2uxhz6z8pr9ivzn03ze54llx7.net 07l4h6reqfqji8d140kg5jv5q2uxhz6z8pr9ivzn03ze54llx7
G0MjqkzT
G0MjqkzT
http://55igbje0gpsnpqq0y5gmfu83xih76dshbxjfclq8cqtqwna4by.net 55igbje0gpsnpqq0y5gmfu83xih76dshbxjfclq8cqtqwna4by
pAWjDIXbH1wo
pAWjDIXbH1wo
http://u3rh52yviw9by99aljtr2e9sijfqrq8kd2q6nx9itvqp96k60f.net u3rh52yviw9by99aljtr2e9sijfqrq8kd2q6nx9itvqp96k60f
A8rozyHDf
A8rozyHDf
http://bsjy5jeozjomirpfak7l6rj8uognyqfaekc0td9d2q7qs17nd0.net bsjy5jeozjomirpfak7l6rj8uognyqfaekc0td9d2q7qs17nd0
nJ5NC8K4BRtm
nJ5NC8K4BRtm
http://epb33ms24popd7gjfny3hicj3ckzpser5bglv0k7tkapgca1m9.net epb33ms24popd7gjfny3hicj3ckzpser5bglv0k7tkapgca1m9
EqzOfLUdqgfS
EqzOfLUdqgfS
http://v677almtrrsdte4mpp1lwbn6x47iej6s5qn1mdyp42ohn0kc4p.com v677almtrrsdte4mpp1lwbn6x47iej6s5qn1mdyp42ohn0kc4p
1s9qnNgwb2Q4r
1s9qnNgwb2Q4r
Оставить комментарий
Elina74
См. на рисунок. Здесь изображено окно некоторой не моей программы, которое я изучил с помощью MS Spy++. Показано, какие указатели (handle) имеет каждая часть окна, классы (class type) окон и подписи (caption) к ним.
Как узнать эти handle из другой программы?
Как сэмулировать действие: "нажать левой кнопкой мыши внутри внутреннего окна, протянуть мышь вверх, отпустить левую кнопку"?
Плиз, не пишите RTFM, я честно пытался это сделать так на VB: