![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Собственно вопрос в названии темы, возможно ли так сделать?
C эмулировать одновременный щелчок мышки (не так вначале туда щелкнул потом туда, а сразу в две точки) |
|
#2
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
saylar_06 (10.06.2012)
| ||
|
#3
|
|||
|
|||
|
Цитата:
Вы по теме сказать что либо можете? |
|
#4
|
|||
|
|||
|
используя нижеприведенный код у меня получилось кликнуть сразу по обеим вот только я не могу понять и определить произошел ли клик одновременно...
Код:
SetCursorPos(1774,858);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
Sleep(15);
SetCursorPos(1798,858);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);P.S Опробовав на самописной программе выполняя определенное действие за клик, вроде действия начинались одновременно, но всё же есть подозрение на опоздание в 15 миллисекунд ![]() |
|
#5
|
||||
|
||||
|
С одной мышью одновременный клик невозможен в принципе. Он может быть с минимальной задержкой, но не одновременный.
А вот если вы 2 мыши в системе имеете, то тут уже можно попробовать ![]() |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
saylar_06 (10.06.2012)
| ||
|
#6
|
||||
|
||||
|
попробуй использовать 2 потока, в которых собственно и будут производиться клики. в потоках используй WaitForSingleObject (на Mutex) для ожидания команды на клик (через ReleaseMutex в основном потоке). смысл в том, что кликающие потоки создаются в основном потоке и ждут команды на запуск от основного.
http://data.cod.ru/152472 Код:
type
TThreadClick = class(TThread)
private
FButton: TButton;
protected
procedure Execute; override;
public
constructor Create(AButton: TButton);
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FEvent: THandle;
implementation
{$R *.dfm}
constructor TThreadClick.Create(AButton: TButton);
begin
inherited Create(True);
FreeOnTerminate:=True;
FButton:=AButton;
Resume;
end;
procedure TThreadClick.Execute;
begin
WaitForSingleObject(FEvent, INFINITE);
PostMessage(FButton.Handle, BM_CLICK, 0, 0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FEvent:=CreateMutex(nil, True, nil);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(FEvent);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('Button1Click');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Add('Button2Click');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
TThreadClick.Create(Button1);
TThreadClick.Create(Button2);
Memo1.Lines.Add('Ok');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
ReleaseMutex(FEvent);
end;
end.потоки создаются при клике на кнопку "Create", и срабатывают при клике на "Release". эксперименты показали, что сообщения "Button1Click" и "Button2Click" появляются в различной последовательности - естественно, что одновременно они и не могут появиться) |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
saylar_06 (10.06.2012)
| ||