nk, автокликер? Могу кинуть исходники, я как то делал. Хендл можно получить так: procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var CrPos:TPoint; hWnd: THandle; aName: array [0..255] of Char; begin CrPos.X:=X; CrPos.Y:=Y; hWnd:=WindowFromPoint(CrPos); if Boolean(GetClassName(hWnd, aName, 256)) then begin Form1.Caption:=string(aName) end else Form1.Caption:="Нет"; end;
вообщем посмотрел я твой код, не все понял, какойто он большой для автокликера. я хотел сделать чето очень уж простое, вот вообщем че я накалякал: procedure TForm1.Timer1Timer(Sender: TObject); var hWnd:THANDLE; begin hWnd:= FindWindow(nil,"World of Warcraft"); SendMessage(hWnd, wm_char, ord("w"), 0); end; ток один косяк, в варике клавиша не нажимается. или может и нажимается но действий никаких не происходит
nk, в моем автокликере прост идет с выбором куда, что (клавиша мыши или клавиатуры) и за какой промежуток времени нажимать. Писал его давно, поэтому и код корявый. А так, как я выше писал достаточно получить хендел и отправить ему нажатие нужной клавиши и все. hWnd:=WindowFromPoint(CrPos); - Получить хендел. PostMessage(hWnd, WM_KEYDOWN, 90, 0); - Отправка события нажатия. Остальное все делал для удобства, грубо говоря для твоих целей понадобится только эти 2 строчки + Таймер. Если хендел правильный, то должно реагировать в любом приложении. Накрайняк посмотри что отправляется при нажатии на нужную клавишу твоему окну и отправляй то же самое.
nk, Еще можно вообще с другого конца подойти, отследить WPE какое сообщение отсылается серверу при нажатии на "Z" и отсылать по таймеру то же сообщение (как бы не приложению, а серверу). Но думаю это уже извращения ненужные. Не бота ведь пишешь.
27 янв 2011 в 21:02
Хендл можно получить так:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
CrPos:TPoint;
hWnd: THandle;
aName: array [0..255] of Char;
begin
CrPos.X:=X;
CrPos.Y:=Y;
hWnd:=WindowFromPoint(CrPos);
if Boolean(GetClassName(hWnd, aName, 256)) then
begin
Form1.Caption:=string(aName)
end else
Form1.Caption:="Нет";
end;