Seite 1 von 1
Fenstertitel über exe ermitteln.
Verfasst: 06.02.2021 20:15
von Zerosurf
Hallo,
wie kann ich am besten den Fenstertitel von einem Programm ermitteln?
Ziel ist es bei Spotify.exe den aktuellen Fenstertitel heraus zu lesen.
Re: Fenstertitel über exe ermitteln.
Verfasst: 06.02.2021 20:19
von Mijikai
Re: Fenstertitel über exe ermitteln.
Verfasst: 07.02.2021 00:32
von Zerosurf
Kann ich das Handle auch über den laufenden Prozess (spotify.exe) herausfinden? Mit EnumWindows_ scheint das nicht zu gehen!
Wie kann ich den Klassennamen von einem laufendem Programm herausfinden?
Re: Fenstertitel über exe ermitteln.
Verfasst: 07.02.2021 11:22
von Mijikai
Edit:
Hat das Fenster Spotify im Titel?
Re: Fenstertitel über exe ermitteln.
Verfasst: 07.02.2021 16:34
von Zerosurf
Mijikai hat geschrieben:Edit:
Hat das Fenster Spotify im Titel?
Leider nicht, aber ich bin schon ein Stück weiter:
Code: Alles auswählen
EnableExplicit
Procedure ListWindows(hwnd,lParam)
Protected.s title = Space(1000),class = Space(1000)
If GetWindowLong_(hwnd,#GWL_EXSTYLE) ! #WS_EX_TOOLWINDOW And GetWindowLong_(hwnd,#GWL_STYLE) & #WS_VISIBLE
GetClassName_(hwnd,class,1000)
GetWindowText_(hwnd,title,1000)
If title <> ""
Debug "Title: "+title+" | Class: "+class+" | Handle: "+Str(hwnd)
EndIf
EndIf
ProcedureReturn #True
EndProcedure
EnumChildWindows_(FindWindow_("ToolbarWindow32",0),@ListWindows(),0)
Damit liste ich mal alle sichtbaren Prozesse auf und muss mir nur noch eine Auswahl Dropdown Liste machen!

Re: Fenstertitel über exe ermitteln.
Verfasst: 07.02.2021 17:15
von Mijikai
Sieht gut aus, geht in die richtige Richtung
Habe trotzdem mal was geschrieben (komplett kommentiert, hoffe es hilft):
Code: Alles auswählen
;hab mich für GetWindow_() anstelle EnumWindows_() entschieden
EnableExplicit;<- um fehler zu finden (am besten immer verwenden!)
Procedure.s GetProcessWindowText(Process.s)
Protected handle.i
Protected pid.i
Protected proc.PROCESSENTRY32
Protected buffer.s
Protected check.i
handle = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,#Null);<- snapshot handle holen
If Not handle = #INVALID_HANDLE_VALUE;<- wenn das handle ok ist weitermachen
proc\dwSize = SizeOf(PROCESSENTRY32);<- um die struktur benutzen zu können muss die größe übergeben werden
If Process32First_(handle,@proc);<- den ersten eintrag in der prozess liste holen
Repeat
If PeekS(@proc\szExeFile) = Process;<- schauen ob der eintrag der gesuchte ist (string vergleich)
pid = proc\th32ProcessID;<- wenn der eintrag der gesuchte ist die process id auslesen
Break;<- die suche abbrechen da die process id gefunden wurde
EndIf
Until Process32Next_(handle,@proc) = #False;<- falscher eintrag? dann weitersuchen
EndIf
CloseHandle_(handle);<- handle wieder freigeben
If pid;<- wurde die process id gefunden?
handle = GetWindow_(GetDesktopWindow_(),#GW_CHILD);<- das erste fenster handle holen (erstes fenster is immer das 'child' des desktops)
If handle;<- gibt es ein fenster weitermachen
Repeat
GetWindowThreadProcessId_(handle,@check);<- process id des fensters ermitteln
If check = pid And IsWindowVisible_(handle);<- wenn das fenster sichtbar (reicht meist um das richtige fenster zu bekommen *) ist und die process id die gesuchte ist weitermachen
check = GetWindowTextLength_(handle);<- die länge des fenster titels ermitteln (in chars)
If check;<- gibt es eine länge weitermachen
buffer = Space(check);<- speicher für den titel reservieren
If GetWindowText_(handle,@buffer,check + 1) = check;<- den titel auslesen (wichtig die api will einen char mehr! - siehe msdn)
ProcedureReturn buffer;<- den titel zurückgeben
EndIf
EndIf
EndIf
handle = GetWindow_(handle,#GW_HWNDNEXT);<- falsches fenster - weitersuchen
Until handle = #Null
EndIf
EndIf
EndIf
ProcedureReturn #Null$;<- nichts wurde gefunden
EndProcedure
;* wenn IsWindowVisible_() nicht reicht andere aspekte abfragen und vergleichen!
Debug GetProcessWindowText("PureBasic.exe");<- test den titel von PureBasic.exe ermitteln
End;<- programm beenden
;infos zu allen apis gibts bei 'msdn':
;https://docs.microsoft.com/en-us/windows/win32/api/
Re: Fenstertitel über exe ermitteln.
Verfasst: 07.02.2021 17:37
von Zerosurf
JAAA... und wie das hilft!!! Vielen Dank!!!
