AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ChildWindow nicht gefunden? Wieso?

Ein Thema von SimStar001 · begonnen am 19. Jan 2010 · letzter Beitrag vom 19. Jan 2010
Antwort Antwort
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#1

ChildWindow nicht gefunden? Wieso?

  Alt 19. Jan 2010, 10:10
Hallo, ich habe ein kleines Problem,
und zwar kann ich das Handle für eine ListBox nicht finden.

Hier mal mein Code:

Delphi-Quellcode:
Function Find_IvAc_WindowHandle : HWND;
Var
  NextHandle: HWND;
  WinTitle, WinClass: Array[0..255] of Char;
  Const ClassName = 'Afx:00400000:0';
        WindowTitle = 'IvAc';
begin
  Result := 0;
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); // erstes Fenster ermitteln
  while NextHandle > 0 do // falls Fenster gefunden
  begin
    // Fenster Titel, Klassennamen ermitteln
    GetWindowText(NextHandle, WinTitle, SizeOf(WinTitle));
    GetClassName(NextHandle, WinClass, SizeOf(WinClass));
    // Überprüfung, ob Anfang der Strings übereinstimmen

    if (Copy(WinTitle, 1, Length(WindowTitle)) = WindowTitle) and
    (Copy(WinClass, 1, Length(ClassName)) = ClassName) then
    begin
      // Fenster gefunden, abbrechen
      Result := NextHandle;
      Break;
    end
    else
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); // nächstes Fenster ermitteln
  end;
end;


Function Find_IvAc_HandoffBox(IvAc_Handle :HWND):HWND;
var wndChild : HWND;
begin
  wndChild := 0;
  if IvAc_Handle > 0 then
    wndChild := FindWindowEx(ivAc_Handle, 0, 'ListBox', nil);
  result := wndChild;
end;

Ich bekomme nun bei der Funktion Find_IvAc_HandoffBox immer null als ergebnis zurück!
Wieso das? Mit WinSpy wurde das Handle ja auch ermittelt.
Was mache cih falsch?

LG Marco!
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#2

Re: ChildWindow nicht gefunden? Wieso?

  Alt 19. Jan 2010, 11:14
Hi,

ich weiß jetzt nicht ob das was ich dir sage das ist was du suchst, aber normalerweise kommst du an eine Komponente die auf einem Child liegt so ran:

Delphi-Quellcode:
var Child : TChild; //-> TChild = T'Name des Childs'
begin
//... was du sonst noch so machst
// Main = Name des Main Forms
// Das if assigned prüft ob das gerade gezeigte Child den Focus hat, also ob es gerade angewählt ist.
  if Assigned(Main.ActiveMDIChild) then
  begin
    Child := Main.ActiveMDIChild as TChild;
    Child.ListBox1.Items.Add('beispiel');
  end;
end;
So solltest du an deine Listbox ran kommen, ob das jetzt das ist was du willst weiß ich wie gesagt nicht. Du kannst das auch so umschreiben dass du alle Childs durchgehen kannst (denk ich zumindest) aber für ein gerade angezeigtes funktioniert das so.

Gruß
AnyKey
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#3

Re: ChildWindow nicht gefunden? Wieso?

  Alt 19. Jan 2010, 11:30
Also ich habs jetzt einfach mal so gemacht...
Delphi-Quellcode:
function Get_HandoffBox_Handle : HWND;
Var
  NextHandle: HWND;
  WinTitle, WinClass: Array[0..255] of Char;
  wndChild : HWND;
  Const ClassName = '#32770';
        WindowTitle = '';
begin
  Result := 0;
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); // erstes Fenster ermitteln
  while NextHandle > 0 do // falls Fenster gefunden
  begin
    // Fenster Titel, Klassennamen ermitteln
    GetWindowText(NextHandle, WinTitle, SizeOf(WinTitle));
    GetClassName(NextHandle, WinClass, SizeOf(WinClass));
    // Überprüfung, ob Anfang der Strings übereinstimmen

    if (Copy(WinTitle, 1, Length(WindowTitle)) = WindowTitle) and
    (Copy(WinClass, 1, Length(ClassName)) = ClassName) then
    begin
      // Fenster gefunden, abbrechen
      Result := NextHandle;
      // ermitteln ob Listbox und Button
      wndChild := FindWindowEx(Result, 0, 'ListBox', nil);
      if wndChild <> 0 then
        begin
        Result := wndChild;
        break;
        end;

      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
    end
    else
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); // nächstes Fenster ermitteln
  end;
end;

Es funktioniert auch, setzt allerdings vorraus, dass das fenster auf dem die Box liegt vorher geöffnet wurde...
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#4

Re: ChildWindow nicht gefunden? Wieso?

  Alt 19. Jan 2010, 11:42
Ja das sagte ich ja

Das Child muss schon existieren, geöffnet und aktiv sein.

Hoffe das hat dir trotzdem weitergeholfen

Gruß
AnyKey
  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 18:43 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