Seite 1 von 2

Childfenster finden. Aber wie !???

Verfasst: 31.08.2005 12:30
von Dr.Pixel
Hallo.
Problem: Ich suche das Childfenster (Punkt 3 im Screenshot) und deren Gadgets.
Mittlerweile finde ich immerhin schon mein Parentfenster namens AR System User - Incident-Management (Neu) !!! (-> Siehe Screenshot)
Leider finde ich hieraus nicht mein Childfenster!
Ich muss vorher ein MDI-Gadget finden namens "" (-> siehe Screenshot Punkt 2)
Darunter würde ich endlich das Childfenster Incident-Management (Neu) finden !!! (-> siehe Screenshot Punkt 3)
Bloss wie komme ich hier weiter?
Siehe neues Screenshot: http://mitglied.lycos.de/christian1973/ars2.jpg

Das aktuelle bzw. aktive Fenster ist immer das Childfenster namens Incident-Management (Neu) !
Mit diesem Code finde ich NUR das handle vom PARENT-Fenster heraus:

Code: Alles auswählen

Name.s=Space(43)
wHandle.l = GetForegroundWindow_()
GetWindowText_(wHandle, Name, Len(Name))

If Name="AR System User - Incident-Management (Neu)" 
Goto gefunden 
Else
Goto nein
EndIf


nein:
Debug "Fenster nicht gefunden! Stattdessen: '"+Name+"'"
Delay(1000)
Goto start
End

gefunden:
Debug wHandle
childHandle.l = FindWindowEx_(wHandle,0,"Incident-Management (Neu)",0) 
Debug childHandle  ;Ausgabe ist immer 0 -> nicht gefunden!!!
If childHandle
Debug "Child-Fenster gefunden !!!"
EndIf
Debug "Child-Fenster NICHT gefunden !!!"

End
Leider wird das Childfenster mit childHandle.l = FindWindowEx_(wHandle,0,"Incident-Management (Neu)",0) nicht gefunden !?
Warum nicht?
Hinweis: Die Struktur des Programmes und deren Fenster wie sie Microsoft Spy++ darstellt ist IMMER gleich!!!
Daher sollte es doch kein Problem sein wenn ich schonmal das handle
vom Parentfenster habe, oder?

PS: Danke nochmal für die tolle Unterstützung in diesem Forum!
Vor 3 Wochen wusste ich noch nicht ob ich in Delphi oder Purebasic programmieren soll.
Purebasic war eine GUTE Entscheidung!


Euer Dr. Pixel

Verfasst: 02.09.2005 15:12
von Dr.Pixel
Ha, Fenster habe ich jetzt gefunden mit EnumChildWindows_ !!! (-> Screenshot Punkt 3)
Nur kann ich immer noch nicht das handle auslesen mit GetWindow_(WindowID(), 0)
Auch GetWindow_(WindowID(), #GW_HWNDFIRST) hilft hier nicht weiter!

Was stimmt nicht mit der Zeile Childhandle ???

Code: Alles auswählen

Procedure ListWindows(Window, Parameter) 
  WindowClass.s = Space(255) 
  WindowTitle.s = Space(255) 
  Childhandle.l
  
  GetClassName_(Window, WindowClass, 255) 
  GetWindowText_(Window, WindowTitle, 255)
  Childhandle = GetWindow_(WindowID(), 0)
  ;Childhandle = GetWindow_(WindowID(), #GW_HWNDFIRST) 
  
  If WindowTitle = "Incident-Management (Neu)"
    Debug WindowTitle + " -> " + WindowClass + " Handle: "
    Debug Childhandle
    Goto gefunden
  EndIf 
  
  ProcedureReturn #True  
EndProcedure 


Delay(1000)

start:
Name.s=Space(43)
wHandle.l = GetForegroundWindow_()
GetWindowText_(wHandle, Name, Len(Name))

If Name="AR System User - Incident-Management (Neu)" 
Goto ok 
Else
Goto nein
EndIf

nein:
Debug "Fenster nicht gefunden! Stattdessen: '"+Name+"'"
Delay(1000)
Goto start
End

ok:
EnumChildWindows_(wHandle,@ListWindows(), 0)
Debug "fenster nicht gefunden"
End

gefunden:
Debug "JA, Fenster gefunden !!!!!"
End

Verfasst: 02.09.2005 15:16
von ts-soft
Mal ne blöde Frage, warum verwaltest Du die Childwindows nicht gleich bei der Erzeugung in einer strukturierten LinkList, oder hab ich da was übersehen? :freak:

Verfasst: 02.09.2005 15:25
von Dr.Pixel
ts-soft hat geschrieben:Mal ne blöde Frage, warum verwaltest Du die Childwindows nicht gleich bei der Erzeugung in einer strukturierten LinkList, oder hab ich da was übersehen?
Was für eine LinkList? Sagt mir jetzt nichts :oops:
Welche vorteile hätte ich denn damit?
Und warum bekomme ich nicht das handle zurück?

Verfasst: 02.09.2005 16:30
von Dr.Pixel
...oder gibt EnumChildWindows_ das handle an die Variable Window zurück:
Procedure ListWindows(Window, Parameter) ???

Und wenn ja, wofür steht Parameter?

Verfasst: 02.09.2005 16:34
von edel
Du haettest aber auch sagen koennen das du hier schon gefragt hast.

EnumChildProc Function
http://msdn.microsoft.com/library/defau ... ldproc.asp

Verfasst: 02.09.2005 17:13
von Dr.Pixel
hallodri hat geschrieben:Du haettest aber auch sagen koennen das du hier schon gefragt hast.
Nun ja, hier hatte niemand eine Lösung. Bis ich selbst drauf gestossen
bin.
Und wo liegt nun der Unterschied zwischen EnumChildWindows und der EnumChildProc Funktion?
Vielleicht wäre eine Anleitung für die API in Verbindung mit PB nicht schlecht!
Gibt es hierzu einen Link?
Wer erklärt mir, was genau ein handle (hWnd), Gadget etc. ist?
Muss ja nicht bis ins kleinste Detail erklärt werden.
Nur dass man auch einen Einstieg in die Windows-API findet !
Oder wäre hierzu ein Buch besser?

Euer Dr. Pixel

Verfasst: 02.09.2005 17:20
von DarkDragon
Dr.Pixel hat geschrieben:Vielleicht wäre eine Anleitung für die API in Verbindung mit PB nicht schlecht!
Ja klar und dann macht man noch ein zweites Platform SDK, eine zweite MSDN, eine zweite W32.hlp und ein zweiter api-viewer/api-guide. Wär ja garnicht unnötig. Die WinAPI wurde von Microsoft Entwickelt, nicht von Fred.

Verfasst: 02.09.2005 20:16
von Dr.Pixel
@DarkDragon: Ok, das mit der Erklärung ist vielleicht etwas zuviel verlangt.
Aber ich hatte ja um Tipps gebeten: Links oder Bücher.
MSDN und API-Guide kannte ich schon -> einiges ist teilweise für mich schwer nachzuvollziehen.
Werde mal auch nach SDK und w32.hlp suchen!

Trotzdem finde ich keine Erklärung auf Deutsch was hwnd, MDI-Gadget und lparameter etc. ist. Auch auf MSDN oder in der API-Guide!
Am meisten habe ich aus Sourcecode gelernt!

Wäre trotzdem nett wenn jemand ein paar Links zu diesem Thema hätte.

Trotzdem vielen Dank für diese Hinweise!

Gruss Dr. Pixel

Verfasst: 02.09.2005 20:29
von PMV
Also hwnd ... wenn ich dies lese ohne irgend welchen zusammen hang dann ist es das Handle von einem Fenster. Ich denke das meinst du auch hier. Das müsste doch als erklärung reichen, oder? -.-

Und zu lparameter (lparam) ... vielleicht hilft dir das FAQ Forum hier weiter ... z.B. (WinAPI) Wie funktioniert die Messagequeue unter Windows?
Dort ist im zweiten Post code komplet in WinAPI geschrieben. Hier tauchen die Variablen wParam und lParam auf, ... das sollte dir weiter helfen. :D Ansonnsten kannst dich da ja weiter durchlesen.

MFG PMV