AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Key an anderes Fenster senden das nicht aktiviert ist?
Thema durchsuchen
Ansicht
Themen-Optionen

Key an anderes Fenster senden das nicht aktiviert ist?

Ein Thema von Destroyer446 · begonnen am 19. Jul 2011 · letzter Beitrag vom 21. Jul 2011
Antwort Antwort
Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#1

Key an anderes Fenster senden das nicht aktiviert ist?

  Alt 19. Jul 2011, 18:29
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: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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 19. Jul 2011, 22:18
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#3

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

  Alt 20. Jul 2011, 07:18
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.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#4

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

  Alt 20. Jul 2011, 10:52
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 20. Jul 2011, 15:44
FindWindowEx, EnumChildWindows.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#6

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

  Alt 21. Jul 2011, 13:26
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...^^

Geändert von Destroyer446 (21. Jul 2011 um 13:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 21. Jul 2011, 13:34
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 )
Bei Google suchendelphi fensterhandle finden
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#8

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

  Alt 21. Jul 2011, 16:56
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!!!
  Mit Zitat antworten Zitat
ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 21. Jul 2011, 17:28
Es gibt da ein Programm, aber dessen Namen vergess ich ständig (dachte erst an WinSpy, aber ich glaub das war's doch nicht )
Vermutlich das Programm Windowse (Freeware) von Greatis Software.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 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