Childfenster finden. Aber wie !???

Anfängerfragen zum Programmieren mit PureBasic.
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Childfenster finden. Aber wie !???

Beitrag 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
Zuletzt geändert von Dr.Pixel am 02.09.2005 15:13, insgesamt 1-mal geändert.
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag 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?
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag 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?
Zuletzt geändert von Dr.Pixel am 02.09.2005 16:35, insgesamt 1-mal geändert.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du haettest aber auch sagen koennen das du hier schon gefragt hast.

EnumChildProc Function
http://msdn.microsoft.com/library/defau ... ldproc.asp
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag 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
Zuletzt geändert von Dr.Pixel am 02.09.2005 20:31, insgesamt 1-mal geändert.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten