Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Вниз
mouse_event - не понял. Найти похожие ветки
← →
Dude (2003-10-04 17:01) [0]Hi all!
Я юзаю mouse_event. Следующий код, по идее, должен по нажатию одной кнопки, нажимать другую.
procedure TForm1.Button2Click(Sender: TObject);
var
P:TPoint;
begin
P:=Button1.ClientToScreen(Point(1,1));
mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_LEFTDOWN,P.X,P.Y,0,0);
mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_LEFTUP,P.X,P.Y,0,0);
end;
Но он нажимает вторую кнопку. Почему?
← →
Дубинин Алексей (2003-10-05 23:08) [1]Не могу сказать точно, но помоему ты в обоих моментах задаешь вторым параметром координаты 0 0...и куда она жмыхается? А вот идею не совсем понял...
← →
Almaz (2003-10-06 04:14) [2]
> Но он нажимает вторую кнопку. Почему?
По двум причинам:
1. Параметры, определяющие DX и DY актуальны только при выполнении команды MOUSEEVENTF_MOVE. Для остальных команд они игнорируются.
2. Даже если бы они не игнорировались, ваш код бы не сработал, т.к. координаты задаются не в пикселах а в нормализованных координатах.
А решение будет следующее:
var
P: TPoint;
begin
P := Button1.ClientToScreen(Point(1,1));
mouse_event(MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE,
Round(65535 / Screen.Width * P.X),
Round(65535 / Screen.Height * P.Y), 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
end;
Если хотите при этом еще и вернуть курсор обратно, то запомните сначала текущие координаты курсора, получив их с помощьюGetCursorPos
а затем выполните еще одинMOUSEEVENTF_MOVE
.
Удачи.
p.s. А еще можно простоButton1.Click;
;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c