Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tasten an Programm senden (https://www.delphipraxis.net/50169-tasten-programm-senden.html)

Wuaegner 21. Jul 2005 14:11


Tasten an Programm senden
 
Hallo,
habe jetzt schon seid über einer Stunde lauter Posts zum Thema gelesn und alle Möglichkeiten ausprobiert aber KEINE hat funktioniert. Ich öffne mit ShellExecute() ein Programm (klappt), dann möchte ich diesem Programm / Fenster die Taste: TAB und danach Strg+V senden.
Kann jemand eine Lösung posten die funktioniert?
Habe mit das Handle geholt, es ist nicht 0 , dann in Vordergrund geholt, dann keybd_event und Sendmessage und und und probiert.. nix hat geklappt.

barf00s 21. Jul 2005 14:43

Re: Tasten an Programm senden
 
auf der Delphi CD gibsne schicke unit namens "SendKeys" - aber kA ob des auch bei > D7 dabei iss
ansonsten - Google ist dein Freund

Wuaegner 21. Jul 2005 15:51

Re: Tasten an Programm senden
 
Habe mir die Unit besorgt, das Handle des Fensters bekomme ich auch jedoch:
Delphi-Quellcode:
procedure TForm1.DigitaleRckwrtssuchemiteinbeziehen1Click(Sender: TObject);
var targetWnd: HWND;
begin
  // Markierte Nummer in Zwischenablage
if LBNummern.Items.Count>0 then // nur wenn es einen gibt
  ClipBoard.AsText := LBNUmmern.Items.Strings[LBNummern.ItemIndex];

  ShellExecute(Application.Handle, 'open' ,PChar('C:\Programme\Digitale Rückwärtssuche 2005\KINVERS.EXE'), nil, nil, sw_ShowNormal);
  sleep(4000); // Damit das Handle dann auch exisitert , gibts hier ne bessere Lösung?
  targetWnd := FindWindow('TKIMainF', 'Digitale Rückwärtssuche 2005');

  if targetwnd <> 0 then
  begin
    SetForegroundWindow(targetwnd);
    SendKeys(targetwnd,'%D',false);
  end;
end;
Jedoch wird ALT+D nicht an die richtige Anwendung geschickt. Warum nicht?

Wuaegner 22. Jul 2005 13:01

Re: Tasten an Programm senden
 
So jetzt hab ich es endlich geschafft und zwar mit dieser Prozedure:
Delphi-Quellcode:
procedure SendAltTab;
var
  KeyInputs: array of TInput;
  KeyInputCount: Integer;

  procedure KeybdInput(VKey: Byte; Flags: DWORD);
  begin
    Inc(KeyInputCount);
    SetLength(KeyInputs, KeyInputCount);
    KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
    with KeyInputs[KeyInputCount - 1].ki do
    begin
      wVk := VKey;
      wScan := MapVirtualKey(wVk, 0);
      dwFlags := KEYEVENTF_EXTENDEDKEY;
      dwFlags := Flags or dwFlags;
      time := 0;
      dwExtraInfo := 0;
    end;
  end;
begin
  KeybdInput(VK_MENU, 0);               // Alt
  KeybdInput(VK_TAB, 0);                // Tab
  KeybdInput(VK_TAB, KEYEVENTF_KEYUP);  // Tab
  KeybdInput(VK_MENU, KEYEVENTF_KEYUP); // Alt
  SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0]));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.

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