SendInput

Rund um die LCL und andere Komponenten
Antworten
MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

SendInput

Beitrag von MitjaStachowiak »

Hallo,
ich versuche gerade einen Mausklick zu simulieren (um ein Fenster zu aktivieren). Jedoch heißt es:

Code: Alles auswählen

ActivateForm.pas(42,12) Error: Identifier not found "SendInput"
In welcher Unit ist denn SendInput? Ich finde es einfach nicht. :(

Straightdog
Beiträge: 10
Registriert: Mo 1. Aug 2011, 18:52

Re: SendInput

Beitrag von Straightdog »

Eingentlich Windows, ist dort (in redef.inc) aber auskommentiert.

Die einzige Stelle, die ich gefunden habe, stammt aus dem FPC-Package winunits-jedi. Dort wird die Funktion (und die benötigten Datentypen) sowohl in JwaWinAble als auch in JwaWinUser deklariert.

Wenn das nicht funktioniert, kannst du es immer noch mit mouse_event / keybd_event probieren (auch aus WIndows, diesmal nicht auskommentiert).

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: SendInput

Beitrag von MitjaStachowiak »

Jo, ich hab's:

Code: Alles auswählen

uses JWAWinUser;
 
(...)
 
// Aus der Unit ~Lazaruspfad~\components\mouseandkeyinput\winmouseinput.pas
procedure SendMouseInput(Flag: DWORD; MouseData: DWORD = 0);
var
  Input: TInput;
begin
  FillChar(Input, SizeOf(Input), 0);
  Input.mi.mouseData := MouseData;
  Input.type_ := INPUT_MOUSE;
  Input.mi.dwFlags := Flag;
 
  SendInput(1, @Input, SizeOf(Input));
end;
 
procedure DoDown(Button: TMouseButton);
var
  Flag: DWORD;
begin
  case Button of
    mbRight: Flag := MOUSEEVENTF_RIGHTDOWN;
    mbMiddle: Flag := MOUSEEVENTF_MIDDLEDOWN;
  else
    Flag := MOUSEEVENTF_LEFTDOWN;
  end;
  SendMouseInput(Flag);
end;
 
procedure DoUp(Button: TMouseButton);
var
  Flag: DWORD;
begin
  case Button of
    mbRight: Flag := MOUSEEVENTF_RIGHTUP;
    mbMiddle: Flag := MOUSEEVENTF_MIDDLEUP;
  else
    Flag := MOUSEEVENTF_LEFTUP;
  end;
  SendMouseInput(Flag);
end;   
 
// Mausklick simulieren:  
 DoDown(mbLeft);
 DoUp(mbLeft);
Ich denke, damit komme ich weiter. Vielen Dank :D

Antworten