Statusbar vorhanden ?
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Statusbar vorhanden ?
Guten Tag,
Kann man herausfinden ob ein Fenster eine Statusbar hat und welche Id ?
Kann man herausfinden ob ein Fenster eine Statusbar hat und welche Id ?
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
- 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
Re: Statusbar vorhanden ?
Ich nehme an, Fremdfenster und Windows:
Habs jetzt nicht getested, aber so in etwa sollte es gehen.
Gruß
Thomas
Code: Alles auswählen
Procedure EnumChildProc(hWnd, lParam)
Protected CName.s{128}
GetClassName_(hWnd, @CName, 128)
If CName = "msctls_statusbar32"
PokeI(@lParam, hWnd)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Define hStatusbar.i
EnumChildWindows_(hWnd, @EnumChildProc(), @hStatusbar)
Gruß
Thomas
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Statusbar vorhanden ?
http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Wenn -1, dannn gibt es keine StatusBar.
Wenn -1, dannn gibt es keine StatusBar.
Re: Statusbar vorhanden ?
Warum schreibst du vor dem Fragezeichen ein Leerzeichen? Ich schreib doch auch nicht vor einem Punkt ein Leerzeichen . << Dat is Kacka.Statusbar vorhanden ?

- 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
Re: Statusbar vorhanden ?
Hatte nen kleinen Fehler drinn.
Hier der korrigierte Beispiel:
Hier der korrigierte Beispiel:
Code: Alles auswählen
Procedure EnumChildProc(hWnd, *lParam.Integer)
Protected CName.s{128}
GetClassName_(hWnd, @CName, 128)
If CName = "msctls_statusbar32"
*lParam\i = hWnd
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Define hStatusbar.i, hWnd.i
hWnd = FindWindow_(0, "PureBasic 5.30 (x64)")
If hWnd
EnumChildWindows_(hWnd, @EnumChildProc(), @hStatusbar)
Debug hStatusbar
EndIf
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
Tut mir leid dass ich wieder "meckern" muss aber ich versuche nur gute Tipps zu geben.

Das Sieht langsam aus weil das eine Enumeration-Schleife ist. Gibt es damit keinen Performance Verlust bei über 10000 Gadgets die einzeln abgefragt wird ob deren Klasse gleich StatusBar ist?ts-soft hat geschrieben:Code: Alles auswählen
Procedure EnumChildProc(hWnd, *lParam.Integer) Protected CName.s{128} GetClassName_(hWnd, @CName, 128) If CName = "msctls_statusbar32" *lParam\i = hWnd ProcedureReturn #False EndIf ProcedureReturn #True EndProcedure Define hStatusbar.i, hWnd.i hWnd = FindWindow_(0, "PureBasic 5.30 (x64)") If hWnd EnumChildWindows_(hWnd, @EnumChildProc(), @hStatusbar) Debug hStatusbar EndIf
Toller lauffähiger Beispielcode. Man sollte nicht via Fenstertitel das Handle lesen wenn der Titel variable ist zb. wenn dieser eine Versionsnummer enthält..ts-soft hat geschrieben:Code: Alles auswählen
hWnd = FindWindow_(0, "PureBasic 5.30 (x64)")
Woher nimmst du die Information dass der Class Name maximal 128 Zeichen lang ist? Laut WNDCLASS beträgt die maximale Länge von Class Name 256 Zeichen und nicht 128! Du must schon sauber WindowsAPI umsetzen und nicht willkürliche Zahlen verwenden!ts-soft hat geschrieben:Code: Alles auswählen
Protected CName.s{128} GetClassName_(hWnd, @CName, 128)
Zuletzt geändert von CodeCommander am 18.01.2015 14:33, insgesamt 1-mal geändert.
~ DELETE ~
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Statusbar vorhanden ?
Vielen Dank, genau das habe ich gebraucht !!!RSBasic hat geschrieben:http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Wenn -1, dannn gibt es keine StatusBar.

Code: Alles auswählen
Macro GetStatusbar(window)
GetProp_(WindowID(window), "PB_StatusBar_ID") -1
EndMacro
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: Statusbar vorhanden ?
das ist der übliche Weg, um Handles in einer unbekannten und beliebig tiefen Struktur zu ermitteln. Wie wäre Dein Lösungsvorschlag?CodeCommander hat geschrieben:Das Sieht langsam aus weil das eine Enumeration-Schleife ist. Gibt es damit keinen Performance Verlust bei über 10000 Gadgets die einzeln abgefragt wird ob deren Klasse gleich StatusBar ist?
richtig erkannt: das ist ein Beispielcode. Den kann man sich an seine Bedürfnisse anpassen. Die IDE hat jeder installiert, der diesen Code ausführen kann und die Titelanpassung von x64 auf x86 sollten wohl jeder hinbekommen.CodeCommander hat geschrieben:Toller lauffähiger Beispielcode. Man sollte nicht via Fenstertitel das Handle lesen wenn der Titel variable ist zb. wenn dieser eine Versionsnummer enthält..
a²+b²=mc²