Как послать нажатие кнопки мыши в окно?
Материал из DRKB
Как послать нажатие кнопки мыши в окно?[править | править код]
WM_LBUTTONDOWN WM_RBUTTONDOWN
Author: Song
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01576
Я решил проверить точку нажатия мышки таким вот образом:
SetForegroundWindow(WindowUO); mouse_event(MOUSEEVENTF_MOVE, 400, 400, 0, 0);
и получилось, что мышка перемещалась не в те координаты(относительно разрешения монитора (800 на 600)) которые я задумал(в не зависимости от местоположения мышки она перемещалась строго по одному направлению на одинаковое расстояние), причем я сделал еще один вариант - dx=100, dy=100, но тогда перемещение мышки произошло в другую сторону(в сторону x=0 y=0 монитора)! Подскажите плз в чем дело?
Author: Spawn
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01577
Mouse_event программирует не абсолюьные, а относительные координаты.
Чтобы не думалось, просто сначала установите курсор в нужную позицию - SetCursorPos(), а потом делайте клик - Mouse_event()
Author: Song
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01578
На форму вынесите компонент TTimer и опишите его единственное событие следующим образом:
procedure TForm1.Timer1Timer(Sender: TObject);
var
x, y: Integer;
begin
x := Random(Screen.Width);
y := Random(Screen.Height);
SendMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, x + y shl 16);
SendMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, x + y shl 16);
end;
Для того, чтобы убедиться, что сообщения на самом деле посылаются, давайте обработаем событие OnMouseDown для формы. Мы попытаем обозначать те места, где якобы была нажата кнопка мыши.
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Form1.Canvas.Ellipse(x - 2, y - 2, x + 2, y + 2);
end;
Source: http://delphiworld.narod.ru
ID: 01579
// Set the mouse cursor to position x,y:
// Maus an Position x,y setzen:
SetCursorPos(x, y);
// Simulate the left mouse button down
// Linke Maustaste simulieren
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
// Simulate the right mouse button down
// Rechte Maustaste simulieren
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
// Simulate a double click
// Einen Doppelklick simulieren
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
GetDoubleClickTime;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
// Simulate a double click on a panel
// Einen Doppelklick auf einen Panel simulieren
SendMessage(Panel1.Handle, WM_LBUTTONDBLCLK, 10, 10)
Language: en
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01580