Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Key an anderes Fenster senden das nicht aktiviert ist? (https://www.delphipraxis.net/161765-key-anderes-fenster-senden-das-nicht-aktiviert-ist.html)

Destroyer446 19. Jul 2011 17:29

Key an anderes Fenster senden das nicht aktiviert ist?
 
Hi...
Ich weiß, die Frage ist alt, aber ich habe schon seit 2 Tagen gegoogelt und keine funktionierende Antwort bekommen.
Ich habe es mit SendMessage probiert:
Delphi-Quellcode:
SendMessage(FensterHandle, WM_CHAR, Ord('C'), 0);
Ergebnis: Funktioniert nicht.
Das Fensterhandle habe ich das weiß ich aber ich habe es auch schon mit WM_KEYDOWN probiert - gleiches Ergebnis.
Hat jemand eine funktionierende Antwort parat?
Es kann doch nicht so schwer sein >.<

PS: Mein Test war bei einem Editor Fenster. Allerdings soll es auch bei allen anderen Fenstern funktionieren.

Danke!

himitsu 19. Jul 2011 21:18

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
Du mußt die Tastaturbefehle an das Control senden, welches auch diese Befehle verarbeitet und das ist meistens nicht das Fenster, sondern das darin liegende Memo.

FredlFesl 20. Jul 2011 06:18

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
WM_KEYUP und wM_KEYDOWN sollten zum Erfolg führen. Ist aber nicht so trivial, wie dein WM_CHAR, denn Du emulierst Tastendrücke, keine Zeichen.

Edit: Ich meine, es reicht, der Applikation (oder war es das Toplevel-Fenster?) WM_KEYxxx zu senden, denn Du emulierst ja Tastendrücke.

Destroyer446 20. Jul 2011 09:52

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
Zitat:

Du mußt die Tastaturbefehle an das Control senden, welches auch diese Befehle verarbeitet ... sondern das darin liegende Memo
Wie soll ich denn das Handle auf das Memo kriegen wenn wir mal vom Editor ausgehen?

Luckie 20. Jul 2011 14:44

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
FindWindowEx, EnumChildWindows.

Destroyer446 21. Jul 2011 12:26

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
Mhhh...
Ich habs jez so probiert:
Delphi-Quellcode:
var
 FensterHandle, MemoHandle: HWND;
begin
 FensterHandle := FindWindow('', 'Neu Textdokument - Editor');
 MemoHandle := FindWindowEx(MemoHandle, FensterHandle, 'TMemo', 'Neu Textdokument - Editor');
 SendMessage(MemoHandle, WM_CHAR, Ord('C'), 0);
Nur leider klappt das nit^^
Kapiere das mit FindWindowEx noch nit so ganz^^

[Edit: 21.Juli 2011 um 13:37]
Ich habe jeze ma geguckt was denn
Zitat:

EnumChildWindows
bringt, das ist das Resultat:
Delphi-Quellcode:
type
  PWindows = ^TWindows;
  TWindows = record
    WindowHandle: HWND;
    WindowText: string;
  end;
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  PNode, CNode: TTreeNode;
  AWindows: PWindows;

implementation

{$R *.dfm}

function EnumChildWindowsProc(Wnd: HWnd; Form: TForm1): Bool; export;
  {$ifdef Win32} stdcall; {$endif}
var
  Buffer: array[0..99] of Char;
begin
  GetWindowText(Wnd, Buffer, 100);
  //if StrLen(Buffer) 0 then
  if StrPas(Buffer) = '' then Buffer := 'Empty';
  new(AWindows);
  with AWindows^ do
  begin
    WindowHandle := Wnd;
    WindowText  := StrPas(Buffer);
  end;

  CNode := Form1.TreeView1.Items.AddChildObject(PNode,
                 AWindows^.WindowText + ':' +
                 IntToHex(AWindows^.WindowHandle, 8), AWindows);
  if GetWindow(Wnd, GW_CHILD) = 0 then
  begin
    PNode := CNode;
    Enumchildwindows(Wnd, @EnumChildWindowsProc, 0);
  end;
  Result := True;
end;

function EnumWindowsProc(Wnd: HWnd; Form: TForm1): Bool;
  export; {$ifdef Win32} stdcall; {$endif}
var
  Buffer: array[0..99] of Char;
begin
  GetWindowText(Wnd, Buffer, 100);
  //if StrLen(Buffer) 0 then
  if StrPas(Buffer) = '' then Buffer := 'Empty';
  new(AWindows);
  with AWindows^ do
  begin
    WindowHandle := Wnd;
    WindowText  := StrPas(Buffer);
  end;

  PNode := Form1.TreeView1.Items.AddObject(nil, AWindows^.WindowText + ':' +
    IntToHex(AWindows^.WindowHandle, 8), AWindows);
  EnumChildWindows(Wnd, @EnumChildWindowsProc, 0);
  Result := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 EnumWindows(@EnumWindowsProc, Longint(Self));
end;
Da kommen ganz viele ´Emtpys´... Was heißt das? ^^

PS: Den Code habe ich nicht selber gescriptet sondern von [Klick mich] geholt^^
[/Edit]
[Edit2]
Was ist das Parentwindow? Bzw. Wie bekomme ich das Handle vom "Eltern-Fenster" wie der Google-translator meint^^
Dankööö^^
[/Edit2]

Danke...^^

himitsu 21. Jul 2011 12:34

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
TMemo = Delphi-Klasse
ich glaub nicht, daß Microsoft diesen Editor mit Delphi erstellt hat, abgesehn davon haben die in den Delphiklassen gekapseltenControls eh andere Namen.


Es gibt da ein Programm, aber dessen Namen vergess ich ständig (dachte erst an WinSpy, aber ich glaub das war's doch nicht :gruebel:)
Bei Google suchendelphi fensterhandle finden

Destroyer446 21. Jul 2011 15:56

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
Das Handle eines Fensters kann ich schon kriegen, aber nur nicht das Handle des Memos... oder ist das auch ein "Fenster" :?
Ich steh grad ziemlich im Wald :O
PS: Theoretisch will ich ja eigentlich nur Tastendrücke simulieren, aber da dass nicht funktioniert hat, versuche ich, die Tastendrücke per SendMessage() funktion zu senden - funkt. auch nit ._.
Hat nicht iwer eine Lösung für eine der beiden "Fragen"?

Danke!!!

ASM 21. Jul 2011 16:28

AW: Key an anderes Fenster senden das nicht aktiviert ist?
 
Zitat:

Zitat von himitsu (Beitrag 1112877)
Es gibt da ein Programm, aber dessen Namen vergess ich ständig (dachte erst an WinSpy, aber ich glaub das war's doch nicht :gruebel:)

Vermutlich das Programm Windowse (Freeware) von Greatis Software.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.

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