А как сделать перемещение или клик для окна которое например свернуто в трее?
Только лучше, я думаю, использовать SendMessage вместо PostMessage. Разница в том, что первый... выполняется немедленно, а второй - ставится в очередь сообщений...
Пробовал такие строки, задавая в Lparam разные значения:
Разница в том, что SendMessage ставит сообщение в очередь, и ожидает, пока это сообщение не обработают. А PostMessage ставит сообщение в очередь, и возвращает выполнение к коду, вызвавшему его, сразу же, без всякого ожидания.
как сделать эмуляцию перемещения мыши для процесса который свернут?
Окно с графикой, никахих дочерних объектов имеющих собственный хендл.
Согласен... Просто эти тонкости я опустил и сказал в "двух словах" как получилось...
Если свернут... думаю никак... Хотя может есть какие-нибудь Хакер(!)ские приемы...
От куда такое твердое убеждение???
Если я правильно понимаю lparam это 8 байт
первые четыре должны
0 - 65535, а вторые соответсвенно коорд. - у. Или наоборот, не суть важно.
Поэтому, точка с коорд 255,255 в области окна (которое занимает четверть рабочего стола) должна выглядеть как lparam=&H000F000F.
Я пробовал ставить значения &H000F000F, &H7D007D00 + другие прмежуточные между &HFFFFFFFF и &H00000001.
Бесполезно, курсор не менял своей позиции.
...
PostMessage(Form1.hwnd, WM_MOUSEDOWN, MakeLong(x,y))
PostMessage(Form1.hwnd, WM_MOUSEUP, MakeLong(x,y))
...
Т.е. получается эмуляция события происходит только на объекте, чей hwnd передается в функцию?
...
x=10
y=10
SendMessage ie.hwnd, WM_RBUTTONDOWN, 0, MakeLong(X, Y)
SendMessage ie.hwnd, WM_RBUTTONUP, 0, MakeLong(X, Y)
...
X%=369
Y%=386
Res& = ((Y * 65536) + X)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Sub Command1_Click()
X% = 369
Y% = 386
Res& = ((Y * 65536) + X)
SendMessage Me.hwnd, WM_LBUTTONDOWN, 0, ByVal Res&
SendMessage Me.hwnd, WM_LBUTTONUP, 0, ByVal Res&
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.Caption = X \ Screen.TwipsPerPixelX & " " & Y \ Screen.TwipsPerPixelY
End Sub
EvgenyZ писал(а):...хэндл там один и тот же...
EvgenyZ писал(а):Посмотрел список дочерних классов окна игры, там нет класса GxWindowClassD3D. Там более ста классов Tedit и все. Мне нужно посылать сообщения одному из них?
awl100Alex писал(а):Возникла идея...
К примеру, Spy++ у тебя возвращает что-то типа такого...
<00235> 001002C8 S WM_NCHITTEST xPos:370 yPos:415
<00236> 001002C8 R WM_NCHITTEST nHittest:HTCLIENT
<00237> 001002C8 S WM_NCHITTEST xPos:370 yPos:415
<00238> 001002C8 R WM_NCHITTEST nHittest:HTCLIENT
<00239> 001002C8 S WM_SETCURSOR hwnd:001002C8 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00240> 001002C8 R WM_SETCURSOR fHaltProcessing:True
<00241> 001002C8 P WM_MOUSEMOVE fwKeys:0000 xPos:369 yPos:386
НЕ закрывая окна игры, попробуй взять текущий хэндл окна «hwnd:001002C8» и подставить «001002C8» в SendMessage... послать ему пару таких же сообщений. Пронаблюдай за поведением окна.
Хакер писал(а):Что за чушь вы тут несёте? Один про посылку сообщений хендлам, другой про посылку сообщеий классам, третий про дочерние классы.
Лучше бы помог, чем критиковать
Хакер писал(а):Невозможно помочь людям, которые занимаются ерундой
EvgenyZ писал(а):Наверно все-таки игра отслеживает реальное положение курсора
Private Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
Private Const Invert = 1
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Timer1_Timer() '120 мсек...
Dim CurPos As POINTAPI
GetCursorPos CurPos
Caption = "X = " & CurPos.x & " " & "Y = " & CurPos.y
Select Case CurPos.x
Case 100 To 200
Select Case CurPos.y
Case 100 To 200: FlashWindow hwnd, Invert
End Select
End Select
End Sub
EvgenyZ писал(а):Как я уже говорил объекты в игре подсвечиваются даже если водить курсором на окне, которое стоит перед окном игры...
EvgenyZ писал(а):...и даже если окно игры не активно и курсор за пределами окна.
Ruslan2000 писал(а):...но приложение абсолютно никак не реагирует на сообщения движения мыши.
Хакер писал(а):Ерунда в постановке задачи, в самой задаче и в стратегии поиска её решения. Иными словами, во-всём, что есть в этой теме.
Зачем ты вообще залез в эту тему?
Решаем задачу как можем. Если бы я все знал, я бы тогда ничего не спрашивал.
Сейчас этот форум просматривают: SemrushBot и гости: 77