Wie erfrage ich den Fensternamen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Profizocker

Betreff: Wie erfrage ich den Fensternamen?

BeitragSa, Feb 27, 2010 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich würde gerne wissen, wie es möglich ist, einen Fensternamen zu ermitteln. Zum Beispiel den Namen des Internet Explorer Fensters. Irgendwie so etwas.

MFG

Xaymar

ehemals "Cgamer"

BeitragSa, Feb 27, 2010 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
GetWindowText
GetWindowTextLength
GetActiveWindow
GetForegroundWindow

Edit: msdn.microsoft.com

//Seltsam das dies auftaucht nachdem count-doku im chat gefragt hatte\\
Warbseite

count-doku

BeitragSa, Feb 27, 2010 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir wussten nicht mehr weiter, weil das ja nur bei manchen (sehr wenigen)
Porgrammen funzt. Und ich ihm riet wenn er eine andere Lösung sucht soll er im Forum fragen.

Chester

BeitragSa, Feb 27, 2010 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Vor längerer Zeit mal programmiert:

BlitzBasic: [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


Es werden alle Unterelemente/Fenster eines Programmes aufgelistet, inklusive Fensterhandle, deshalb sind es wahrscheinlich mehr, als du erwartest Very Happy
 

Profizocker

BeitragSa, Feb 27, 2010 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich komme mit deiner Funktion nicht wirklich zurecht, aber ich glaube es ist auch nicht das was ich suche. Ich möchte ein Programm, was zum Beispiel, sobald das Fenster mit dem Namen Word geöffnet wird, eine Nachricht ausgibt.
 

Christian+

BeitragSa, Feb 27, 2010 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mir nicht sicher ob ich kapiert habe was dein Problem ist aber vielleicht hilft dir die Antwort ja trotzdem. Meine Idee über API mit FindWindow das Handle des gesuchten Fensters ermitteln wenn das Handle 0 ist existiert es nicht sonst existiert es und du hast auch gleich das Handle davon. Setzt halt voraus du weißt wie genau das Fester bzw. Programm heißt falls nicht Google mal nach EnumWindows das lässt sich glaube ich auch dazu verwenden an die Namen aller Fenster zukommen.
Beispiel:
Code: [AUSKLAPPEN]
FindWindow(0,"Unbenannt - Editor")


mfg Christian+
strike2Death
 

Profizocker

BeitragSa, Feb 27, 2010 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich den editor offen habe, und ich diese Zeile in BB schreibe, sollte er mir hallo ausgeben, habe ich das richtig verstanden?

If FindWindow(0,"Unbenannt - Editor") = 1 Print "hallo"
 

Christian+

BeitragSo, Feb 28, 2010 0:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Beispiel geht nicht da FindWindow ein Handle zurück gibt du musst prüfen ob es 0 ist bzw. ungleich 0 da das Handle einfach eine beliebige Zahl ist wenn das Fenster existiert.
Hier mal ein lauffähiges Beispiel:
(Ich hoffe der Editor hat in allen Windows Versionen den gleichen Namen sonst musst den halt anpassen.)
Code: [AUSKLAPPEN]
;.lib "user32.dll"
;FindWindow% (lpClassName$, lpWindowName$) : "FindWindowA"
If FindWindow("NotePad","Unbenannt - Editor") = 0 Then
  Notify "Editor ist nicht geöffnet!"
Else
  Notify "Editor ist geöffnet!"
EndIf


mfg Christian+
strike2Death
 

Profizocker

BeitragSo, Feb 28, 2010 1:26
Antworten mit Zitat
Benutzer-Profile anzeigen
kann ich auch ueberpruefen ob der editor aktiviert ist?
 

Christian+

BeitragSo, Feb 28, 2010 10:26
Antworten mit Zitat
Benutzer-Profile anzeigen
So sollte es gehen habe es aber noch nicht getestet.
Code: [AUSKLAPPEN]
;.lib "user32.dll"
;FindWindow% (lpClassName$, lpWindowName$) : "FindWindowA"
;GetForegroundWindow% () : "GetForegroundWindow"
;SetForegroundWindow% (hwnd%) : "SetForegroundWindow"

;Damit der Editor in diesem Beispiel auch aktiv ist.
SetForegroundWindow(FindWindow("NotePad","Unbenannt - Editor"))

;Prüfen ob das Handle des Editors das gleiche ist wie das das GetForegroundWindow zurückgibt.
If FindWindow("NotePad","Unbenannt - Editor") = GetForegroundWindow() Then
  Notify "Editor ist geöffnet und aktiv!"
Else
  Notify "Editor ist nicht geöffnet und aktiv!"
EndIf

mfg Christian+
strike2Death
 

Profizocker

BeitragSo, Feb 28, 2010 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Was bedeutet das NotePad bei FindWindow("NotePad","Unbenannt - Editor")?

ozzi789

BeitragMo, März 01, 2010 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiers doch aus.. ich denke es ist der Name der Exe, und Unbennant-Editor der Fenstername.

mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Xaymar

ehemals "Cgamer"

BeitragMo, März 01, 2010 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
http://msdn.microsoft.com/en-u...85%29.aspx ... 13 Sekunden Suche( -7 Sekunden aufbauzeit = 5 Sekunden)
NotePad ist bei FindWindow die Klasse die ein Programm für die geöffneten Fenster benutzt. Deshalb kann man bei vielen Programmen auch zurückverfolgen mit was diese geschrieben wurden(Die Klasse ist oftmals dieselbe).
Blitz hat z.b. "Blitz Runtime Class"
Warbseite
 

mactep

BeitragSa, März 16, 2013 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie bekomme ich den Handle von nem Flashgame ?

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group