Statusbar vorhanden ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Statusbar vorhanden ?

Beitrag von hjbremer »

Guten Tag,

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
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

Re: Statusbar vorhanden ?

Beitrag von ts-soft »

Ich nehme an, Fremdfenster und Windows:

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)
Habs jetzt nicht getested, aber so in etwa sollte es gehen.

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.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Statusbar vorhanden ?

Beitrag von RSBasic »

http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Wenn -1, dannn gibt es keine StatusBar.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
NeoChris
Beiträge: 205
Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kontaktdaten:

Re: Statusbar vorhanden ?

Beitrag von NeoChris »

Statusbar vorhanden ?
Warum schreibst du vor dem Fragezeichen ein Leerzeichen? Ich schreib doch auch nicht vor einem Punkt ein Leerzeichen . << Dat is Kacka. :D
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

Re: Statusbar vorhanden ?

Beitrag von ts-soft »

Hatte nen kleinen Fehler drinn.

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.
Bild
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

Tut mir leid dass ich wieder "meckern" muss aber ich versuche nur gute Tipps zu geben. :)
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
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

hWnd = FindWindow_(0, "PureBasic 5.30 (x64)")
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

Protected CName.s{128}
GetClassName_(hWnd, @CName, 128)
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!
Zuletzt geändert von CodeCommander am 18.01.2015 14:33, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Statusbar vorhanden ?

Beitrag von hjbremer »

RSBasic hat geschrieben:http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Wenn -1, dannn gibt es keine StatusBar.
Vielen Dank, genau das habe ich gebraucht !!! :praise:

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
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Statusbar vorhanden ?

Beitrag von Kiffi »

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?
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:Toller lauffähiger Beispielcode. Man sollte nicht via Fenstertitel das Handle lesen wenn der Titel variable ist zb. wenn dieser eine Versionsnummer enthält..
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.
a²+b²=mc²
Antworten