Gå til innhold

Anbefalte innlegg

SendInput() kan brukes til å simulere blant annet et eller flere tastetrykk. En av parametrene til denne funksjonen er definert som "var csInputs: Input" såvidt jeg husker i farten. Typen Input er en struktur som skal fylles ut med nødvendige data før funksjonen kalles.

 

Problemet er at denne parameteren i følge MSDN-dokumentasjonen skal være et array av Input-strukturer, mens den i Delphi er definert som én Input-struktur.

Funksjonen har også en parameter hvor antallet elementer i dette arrayet skal angis, så det sier seg selv at det skal kunne sendes med et helt array av Input-strukturer.

 

Kan jeg sende med hele arrayet på noe vis? Delphi godtar naturligvis ikke et array når det ikke forventes et array, men det er kanskje mulig likevel?

 

Dette går som en drøm i C++, men jeg synes det burde være mulig å få til i Delphi óg...

Lenke til kommentar
  • 2 uker senere...
Videoannonse
Annonse

Quote:


Den 2002-11-18 12:12, skrev maurbiff:

Dette går som en drøm i C++, men jeg synes det burde være mulig å få til i Delphi óg...


 

Fortvil ikke - løsningen er på vei :wink:

 

Det er dessverre en del windows api-funksjoner som importeres feil i Delphi. Det ser ut til at dette kan være en av dem.

 

Med litt pusling har jeg fått til å sende flere verdier. Det jeg har gjort er å importere SendInput funksjonen på nytt og endret parameteren til å være en peker til en TInput. Siden arrays kun er flere objekter av samme type etterhverandre i minnet vil os'et finne alle elementene du sender inn selv om du bare gir den pekeren til første ellement.

 

Ta en titt på koden nedenfor. Det er kanskje litt klarere enn mitt skarve forsøk på å forklare... :wink:

 

-Vegar

 

Code:

function MySendInput(cInputs: UINT; pInputs: PInput;
cbSize: Integer): UINT; stdcall; external
'user32.dll' name 'SendInput';

procedure TForm1.Button1Click(Sender: TObject);
var
input: PInput;
p: PInput;
ret: integer;
i: integer;
begin
getMem(input, sizeOf(TInput) * 4);
try
p := input;
for i := 0 to 3 do
begin
p^.Itype := INPUT_MOUSE;
p^.mi.dwFlags := MOUSEEVENTF_MOVE;
p^.mi.dx := Random(100) - 50;
p^.mi.dy := Random(100) - 50;
p^.mi.mouseData := 0;
p^.mi.dwExtraInfo := 0;
p^.mi.time := 0;
p := pointer(integer(p) + sizeof(TInput));
end;
ret := MySendInput(4, input, sizeOF(TInput));
if ret <> 4 then
RaiseLastOSError;
finally
freemem(input);
end;
end;

 

 

 

[ Denne Melding var redigert av: Format71 på 2002-12-02 23:29 ]

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...