Handles herausfinden / ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Handles herausfinden / ermitteln

Beitrag von AND51 »

Hallo!

ich habe schon oft Code gesehen, wo man ein Handle einsetzen muss, zum Beispiel

Code: Alles auswählen

BringWindowToTop_(hWnd)
Meine Frage: Wie kriege ich hier "hWnd" hraus? Ich weiß nr, dass es das gesuchte Handle (hier von einem Fenster) ist.

Kriege ich das Handle vielleicht so raus:

Code: Alles auswählen

handle = OpenWindow(0, 0, 0, 100, 100, #PB_Window_ScreenCentered, "Titel")
oder ist das Handle hier die ID des Fensters, also 0 ?

Ich weiß, dass es mit WinAPI zu tun hat, aber ich habe trotzdem das Problem.

Danke für eure Antworten, AND51
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

BringWindowToTop_(WindowID(0))

oder sofern du #PB_Any verwendest:

Code: Alles auswählen

WinID.l = OpenWindow(#PB_Any, 0, 0, 100, 100, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered, "")
If WinID
  
  ShowWindow_(WindowID(WinID), #SW_MAXIMIZE)
  
  Repeat
    WinEvent.l = WaitWindowEvent()
  Until WinEvent = #PB_Event_CloseWindow
  
EndIf

End
// EDIT:
ich hab das beispiel nun verständlichkeitshalber geändert.

c ya,
nco2k
Zuletzt geändert von nco2k am 14.10.2005 23:50, insgesamt 1-mal geändert.
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Also #PB_Any hätt ich nun nicht ins Spiel gebracht, aber um die Verwirrung zu perfektionieren hast du auch noch

Code: Alles auswählen

hwnd.l = OpenWindow(#PB_Any, ....)
geschrieben, was zum Verständnis nicht wirklich beiträgt.

Schliesslich kommt da kein Handle (hwnd) raus sondern eine ID.
Also wäre ein Variablenname a la WinID.l angebrachter gewesen.

Dein Beispiel da oben ist übrigens auch brauchbar AND51.
Wenn du KEIN #PB_Any benutzt, bekommst du das Handle zurück.

Sodele, nun dürftest du WIRKLICH verwirrt sein ;)
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

@HeX0R
hast natürlich recht, ist halt die krankheit, die man sich mit pb aneignen kann. :lol:

einige user würden es halt lieber sehen wenn OpenWindow() ein handle bei #PB_Any zurückgeben würde. aber naja, zum ziel kommt man trotzdem immer... irgendwie.

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

so duerfte es auch gehen

WinID.long = OpenWindow(#pb_any...

ShowWindow_(WinID\l,...
hidewindow(WinID,1)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Sodele, nun dürftest du WIRKLICH verwirrt sein :wink:
Ja, das war ich...
Aber ich glaube, es jetzt verstanden zu haben:

Code: Alles auswählen

a = OpenWindow(0, ...andere parameter...)
; a ist das handle, da kein #PB_any verwendet, 0 ist weiterhin die ID des Fensters

; ======= neues Beispiel =============

a=OpenWindow(#PB_Any, ...andere parameter...)
b=WindowID(a)
; a ist nicht das Handle, da #PB_Any verwendet
; b ist das Handle
Daraus resultiert eine Frage: Im 2. Beispiel ist WindowID(a) das Handle. Und was ist a? Ich habe ja #PB_Any verwendet, ist im 2. Beispiel also a die ID des Fensters?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Wenn du kein #pb_any nutzt werden die Fenster Daten in ein Array (siehe unten) gelegt. Die ID ist der Offset des Arrays .

Mit #PB_Any bekommst du eine Adresse auf einen Speicherbereich zurueck.
der so aussieht .

Code: Alles auswählen

  Structure PB_WindowStructure
    Window.l               
    NbAccelerators.l    
    *Accelerators.ACCEL[] 
    AcceleratorTable.l     
  EndStructure
  
Ich hoffe das stimmt so. :D
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Offset? Adresse? Speicherbereich?
Hilfe! SO weit bin ich noch nicht... ich danke dir aber trotzdem sehr für deinen Beitrag!

Mir würde es schon reichen, wenn jemand sagen kann, ob ich in meinem vorigen Beitrag recht habe, also ob ich das verstanden habe.

oder wenn einer folgenden befehl ausführt:

Code: Alles auswählen

übersetze_hallodri's_beitrag_in_anfängerfreundliche_sprache()
:wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

AND51 hat geschrieben:Mir würde es schon reichen, wenn jemand sagen kann, ob ich in meinem vorigen Beitrag recht habe, also ob ich das verstanden habe.
Das war absolut korrekt.
AND51 hat geschrieben:oder wenn einer folgenden befehl ausführt:

Code: Alles auswählen

übersetze_hallodri's_beitrag_in_anfängerfreundliche_sprache()
:wink:
Mach Dir darüber erstmal keine Gedanken, das brauchst Du
garnicht.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Das war absolut korrekt.
Danke!!!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten