Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tastaturkommandos an ein Handle senden (Remote) (https://www.delphipraxis.net/105981-tastaturkommandos-ein-handle-senden-remote.html)

Wotan89 5. Jan 2008 11:28

Re: Tastaturkommandos an ein Handle senden (Remote)
 
Ich hab nur ne kleine Bemerkung zu deiner Verwendung von GetWindowThreadProcessID(): Soviel ich weiß darfst du nicht die Variable direkt übergeben, sondern musst die Adresse der Variable übergeben:
Delphi-Quellcode:
GetWindowThreadProcessID(AHandle, @ProcessID);

little_budda 5. Jan 2008 11:38

Re: Tastaturkommandos an ein Handle senden (Remote)
 
Hallo.

@wotan98:
Wenn ich die Adresse angebe bekomme ich einen Fehler vom Compiler
[Fehler] main.pas(62): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen


@Franz Kogler:
Danke für die Unit.
Wenn ich es wie folgt aufrufe, bekomme ich immer eine Exeption "Zugriffsverletzung" ...
Delphi-Quellcode:
procedure Tfrm_main.btn_setTextClick(Sender: TObject);
var sEditValue : string;
    sendKeyBlock : TSendKeys;
begin
  sEditValue := ed_text.text;

  sendKeyBlock.WindowHandle := extWindowsHandle;
  sendKeyBlock.SendKeys(Pchar(sEditValue));    <- Hier wird die Exeption ausgelöst
...
Könnte ich eventuell noch einen Tipp zur Verwendung bekommen?

SirThornberry 5. Jan 2008 11:46

Re: Tastaturkommandos an ein Handle senden (Remote)
 
Zitat:

Zitat von Wotan89
Ich hab nur ne kleine Bemerkung zu deiner Verwendung von GetWindowThreadProcessID(): Soviel ich weiß darfst du nicht die Variable direkt übergeben, sondern musst die Adresse der Variable übergeben:
Delphi-Quellcode:
GetWindowThreadProcessID(AHandle, @ProcessID);

Laut MSDN hast du recht. In Delphi wurde es allerdings so definiert das nicht ein Pointer erwartet wird sondern das ganze als var-Parameter übergeben wird.

Wotan89 5. Jan 2008 11:59

Re: Tastaturkommandos an ein Handle senden (Remote)
 
Wenn ich die Adresse übergebe, muss die Variable ProcessID eine LongWord-Variable sein. Ich wusste nicht, dass Delphi es einem wieder so komfortabel macht :-D . Da ist es natürlich besser einfach nur die Variable zu übergeben.

little_budda 5. Jan 2008 14:02

Re: Tastaturkommandos an ein Handle senden (Remote)
 
Hallo,

ich habe es nun mal probiert mit "AttachThreadInput" (Hab ich im Forum gefunden)
Delphi-Quellcode:
procedure Tfrm_main.btn_setTextClick(Sender: TObject);
var sEditValue : string;
begin
  sEditValue := ed_text.text;

  // Einloggen
  AttachThreadInput(
                   Application.Handle,
                   extWindowsHandle,
                   true
                   );

  // Text zum Objektes schreiben
  PostMessage(extWindowsHandle, WM_SETTEXT, 0, Integer(Pchar(sEditValue)));

  // Auslogen
  AttachThreadInput(
                   Application.Handle,
                   extWindowsHandle,
                   false
                   );
end;
Aber der Erfolg will sich nicht einstellen ...

:gruebel:

Wotan89 5. Jan 2008 14:11

Re: Tastaturkommandos an ein Handle senden (Remote)
 
Es ist wichtig, dass das Window, welches den Tastendruck empfängt, den Focus hat! Deswegen kannst du dein altes Script mit Sendmessage verwenden, aber du musst noch den focus setzen:
Delphi-Quellcode:
sendmessage(extWindowHandle,WM_SetFocus,0,0);
sendmessage(extWindowHandle,WM_Char,iSendKeyCode,0);
Du musst aber auch das richtige ChildWindow haben :-D .

little_budda 5. Jan 2008 14:19

Re: Tastaturkommandos an ein Handle senden (Remote)
 
Das Senden der Taste klappt ja, nur das Senden von Text nicht.

Aber da es ein anderes Thema ist mache ich dafür einen neuen Thread auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz