EnumWindows?
Übersicht

![]() |
Der EisvogelBetreff: EnumWindows? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Wie kann ich die Funktion EnumWindows in BB nutzen? (Code?) Kann ich sie überhaupt benutzen? Mein Problem liegt beim ersten Parameter der ein Funktion erwartet, ich weiß nicht wie ich die übergeben soll. Gibt es eine andere Möglichkeit alle Fenster aufzulisten? MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Funktionen kannst du nicht als Parameter benutzen, weil es in BB keine Funktionszeiger gibt.
Musst du wohl mit einer anderen Sprache machen oder FindWindow benutzen, wenn dir die Fensterklasse bekannt ist. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit GetWindow kann man auch das Handle des nächsten Fenster herausbekommen. Das kann man dann natürlich solange wiederholen, bis sich ein Handle wiederholt. Wäre wahrscheinlich einfacher als sich ne Dll für EnumWindows zu schreiben. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
So OK. Ich hab das mit dem GetWindow mal ausprobiert, aber das geht nicht, den gleich das erste Handle, das ich mit GetWindow hole existiert nicht. ;(
Code: [AUSKLAPPEN] hWnd=GetDesktopWindow()
DebugLog hWnd hWnd=GetWindow(hWnd,GW_HWNDFIRST) DebugLog hWnd While hWnd<>0 title_length=GetWindowTextLength(hWnd)+1 ;Fenstertitellänge ermitteln title_buffer=CreateBank(title_length) ;Bank für den Fenstertitel erstellen GetwindowText(hWnd,title_buffer,title_length) ;Fenstertitel ermitteln title=PeekString(title_buffer,0) ;Fenstertitel speichern FreeBank title_buffer ;Bank für den Fenstertitel löschen DebugLog title hWnd=GetWindow(hWnd,GW_HWNDNEXT) Wend Entweder bin ich zu blöd oder das geht nicht. Ich brauch diese Funktion auf jeden Fall sehr dringend, wenn also nix anderes mehr möglich ist muss ich auf ne extra Dll zurückgreifen ![]() |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier ein kurzes Beispiel, das allerdings alles - und ich meine wirklich alles - auflistet:
Code: [AUSKLAPPEN] ;------------------------------------------ ;----- user32.decls ------------------- ;GetWindow% (p1%,p2%) : "GetWindow" ;GetWindowText%(hwnd%,string*,max%):"GetWindowTextA" ;GetActiveWindow% () : "GetActiveWindow" ;------------------------------------------ Const GW_HWNDFIRST = 0 Const GW_HWNDLAST = 1 Const GW_HWNDNEXT = 2 Const GW_HWNDPREV = 3 Const GW_OWNER = 4 Const GW_Child = 5 EnumWindows() WaitKey() End Function EnumWindows() Local hwnd_first = GetWindow(GetActiveWindow(),GW_HWNDFIRST) Local hwnd_temp = hwnd_first Repeat ; Nächstes Fenster hwnd_temp = GetWindow(hwnd_temp,GW_HWNDNEXT) ;Name Herausfinden bank_temp = CreateBank(255) sdf=GetWindowText(hwnd_temp,bank_temp,255) Local pos%=0,name$="" Repeat byte=PeekByte(bank_temp,pos) pos=pos+1 If byte=0 Then Exit name$=name$+Chr(byte) Forever If name$ <> "" Then Print hwnd_temp + ": "+name$ FreeBank bank_temp Until hwnd_temp =0 End Function |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
So das funktioniert jetzt.
Wie kann ich jetzt überprüfen ob das Fenster, deren Handle ich habe, nach 5 Minuten noch nicht geschlossen wurde? 5 Minuten warten versteht sich. Das Handle verfällt ja nie. Aber ob das Handle noch auf einen Ordner oder ein anderes Fenster zeigt ist nicht klar. Ich dachte ich kann das mit SendMessage machen, indem ich einen Nachricht schicke, die eine Antwort zurück schickt, aber irgenwie klappt das nicht, oder ich verwende die flaschen Nachrichten. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versteh zwar irgendwie immer noch nicht, auf was du hinaus willst, aber du kannst, um herauszufinden, ob ein Fenster geschlossen wurde, ein wenig tricksen in dem du abfragst, ob das Fenster noch einen Device Kontext besitzt.
Da ich ja so lieb bin, hier wieder ein Beispielcode: Code: [AUSKLAPPEN] ;------------------------------------------ ;--------- user32.decls ------------------- ;GetWindow% (p1%,p2%) : "GetWindow" ;GetWindowText%(hwnd%,string*,max%):"GetWindowTextA" ;GetActiveWindow% () : "GetActiveWindow" ;GetWindowDC%(hwnd%):"GetWindowDC" ;------------------------------------------ ; Systemordner öffnen ExecFile(SystemProperty("SYSTEMDIR")) Graphics 800,600,32,2:SetBuffer BackBuffer() ; Handle & Name Global DIR_Handle%,DIR_Name$ ;Aufgrund der Verzögerung des Öffnens ;solange abfragen, bis das Handle existiert Repeat GetDirHandle() Until DIR_Handle<>0 Repeat Text 0,45,"Fenster geöffnet: "+WindowExists(DIR_Handle) Text 0,30,"Fenster Name: "+DIR_Name$ Text 0,15,"Fenster Handle: "+DIR_Handle Flip : Cls Until KeyHit(1) Function WindowExists%(hwnd%) Return GetWindowDC(hwnd%)<>0 End Function ; EnumWindows ein wenig modifiziert Function GetDirHandle() Local hwnd_temp = GetWindow(GetActiveWindow(),GW_HWNDFIRST) Repeat hwnd_temp = GetWindow(hwnd_temp,GW_HWNDNEXT) bank_temp = CreateBank(255) sdf=GetWindowText(hwnd_temp,bank_temp,255) Local pos%=0,name$="" Repeat byte=PeekByte(bank_temp,pos) pos=pos+1 If byte=0 Then Exit name$=name$+Chr(byte) Forever FreeBank bank_temp If Instr(name$,"system32")>0 Then DIR_Handle=hwnd_temp DIR_Name$ = name$ Exit EndIf Until hwnd_temp=0 End Function Const GW_HWNDFIRST = 0 Const GW_HWNDLAST = 1 Const GW_HWNDNEXT = 2 Const GW_HWNDPREV = 3 Const GW_OWNER = 4 Const GW_CHILD = 5 |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe das ganze jetzt darüber gelöst, indem ich die Liste der Fenster nach einer Handle-Übereinstimmung gesucht habe und wenn es nicht mehr gefunden wurde, dann ist das Fenser geschlossen.
Gebrahct habe ich das für meinen Window-Crasher. Siehe Showcase. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group