maurbiff Skrevet 18. november 2002 Del Skrevet 18. november 2002 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
Format71 Skrevet 2. desember 2002 Del Skrevet 2. desember 2002 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå