AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ein Handle herausfinden bei einer nicht eindeutigen Klasse
Thema durchsuchen
Ansicht
Themen-Optionen

Ein Handle herausfinden bei einer nicht eindeutigen Klasse

Ein Thema von gekmihesg · begonnen am 3. Jan 2004 · letzter Beitrag vom 3. Jan 2004
Antwort Antwort
gekmihesg
(Gast)

n/a Beiträge
 
#1

Ein Handle herausfinden bei einer nicht eindeutigen Klasse

  Alt 3. Jan 2004, 18:53
Hi

ich versuche das handle eines buttons herauszufinden (mit findwindowex).
allerdings liegt dieser button in einem fenster das keine eindeutige fensterklasse hat und keinen titel. wenn ich jetzt versuche das parentfenster herauszufinden findet er mal das eine und mal das andere. also kann der button nur manchmal geklickt werden.
was soll ich da machen?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var h: HWnd;
begin
  h:=FindWindow('#32770',nil); //#32770 ist die fensterklasse (zweimal vorhanden)
  h:=FindWindowEx(h,0,'Button','ChannelUp'); //liefert manchmal ergebnis und manchmal nicht
  SendMessage(h,BM_CLICK,0,0);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 18:56
Geh die Child-Fenster mit EnumChildWindows rekursiv durch. Die Beschriftung des Buttons scheint ja eindeutig zu sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 18:57
Hi,
du sagst es direkt: Es existieren zwei Fenster dieser Fensterklasse. Dem entsprechend musst du auch zwei mal suchen und darauf reagieren. Lässt sich lösen per EnumWindows und/oder dem Text des Windows.

Chris

[edit]Satz korrigiert.[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 19:01
Zitat von Chakotay1308:
Das Handle existiert zweimal.
Sollte das der Fall sein, würde ich mir ernsthafte Sorgen machen. Ein Handle kann es zu einem Zeizpunkt im System nur einmal geben!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#5

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 19:05
nein nicht das handle 2mal sondern die fensterklasse

und kann mir jemand des mit dem EnumChildWindows erklären?
am besten mal in den code einbauen und dann posten...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 19:13
Solltest du selber hinbekommen: Hier im Forum suchenEnumchildwindows
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 19:17
Delphi-Quellcode:
var C: Array[0..256] Of Char;
    winhandle, handle2: Cardinal;
begin
  WinHandle := FindWindow(Nil, Nil);
  While (WinHandle <> 0) Do
  Begin
    windows.GetClassname(WinHandle, C, 255);
    if string(C) = '32770then
    begin
      //überprüfen ob parentwindow das richtige ist
      handle2 := GetWindow(WinHandle, GW_OWNER);
      windows.GetClassname(handle2, C, 255);
      if string(C) = 'classname vom parentwindowthen
      begin

      end;
    end;
    WinHandle := GetWindow(WinHandle, GW_HWNDNEXT);
  End;
end;
bei bedarf eventuell noch fenstertitel abfrage einbauen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 19:18
Hi Luckie,
sorry... mein Fehler: ich meinte eigentlich, dass zwei Fenster dieser Klasse existieren. 2 mal das gleiche Handle für verschiedene Controls wäre wirklich schlecht.

Chris
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#9

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 19:48
ok soweit hab ich jetzt:

Delphi-Quellcode:
function FindButton(const AhWindow : DWORD;const ApButton : PDWORD) : longbool; stdcall;
var h:Hwnd;
begin
  Result := true;
  showmessage(inttostr(AhWindow));
  h:=findwindowex(AhWindow,0,'Button','ChannelUp');
  ApButton^:=h;
  if h <> 0 then result:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var h, hbutton: Hwnd;
begin
h:= findwindow(nil, 'InterVideo WinDVR');
hbutton:=0;
windows.EnumChildWindows(h,@findbutton,integer(@hbutton));
showmessage(inttostr(hbutton));
end;
aber er findet den button nicht weil er vorher ein child findet das selber nochmal childs hat und dann diese child-childs durchgeht und dann abbricht wenn er mit denen fertig is.
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#10

Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas

  Alt 3. Jan 2004, 20:41
Ich weiß ja nicht, ob das geht, aber ich benutze in letzter Zeit immer wieder (geht so schön leicht und ist variabel) WindowFromPoint. Wenn man Die Position deines Handles irgendwann mal mit dem Mauszeiger erwischt, kann das dir helfen:

Delphi-Quellcode:
var
 H: THandle;
begin
 H := WindowFromPoint(Mouse.CursorPos);
   {...}
end;
Das wäre z.B. in eine LabelMouseUp procedure eizubinden, dann musst du nur auf das Label klicken, geklickt halten, zu denerm Hanlde fahren und die Maustaste loslassen. Oder du schiebst das ganze in die FormKeyPress procedure rein, dann musst du nur die Maus positionieren und auf Tastendruck hast du dein Handle! (Dabei muss allerdings die Form aktiv sein, wegen Keydown).

Wenn dich das interessiert kannst du ja mal auf die Seite schauen:
http://www.delphipraxis.net/topic15877 ...
  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:25 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