Benutze ich als Unterstützung ChatGPT. Mittlerweile geht es ganz gut. Ohne eigenen Kenntnisse, die zur
Fehlerbehandlung benötigt werden. Kommt man aber nicht weit. Ich möchte euch ein Beispiel zeigen.
Ich habe das Problem gehabt. Das die Funktion FindWindow() plötzlich ständig meinte, das ein Fenster von mir
geöffnet sei.
Ich bin dem Problem hinterhergejagt und habe Folgendes festgestellt.
FindWindow() unterscheidet nicht, Gross- und Kleinschreibung. Es war noch der Explorer mit einem Fenster gleichen Namens offen. Ich habe dann mithilfe von ChatGPT einen Scanner für die Fensternamen und die Programmzugehörigkeit zusammengestellt. Den möchte ich euch nicht vorenthalten.
Gruss TFT
Code: Alles auswählen
; PureBasic Musterprogramm zur Ausgabe aller geöffneten Fenster und ihrer Programme in der Konsole
; mit einem geöffneten Fenster zur Sicherstellung des Loops
#MainWindow = 0
#WindowTitleLength = 256
#ProgramNameLength = 260
; Definieren der Konstanten
#PB_Process_QueryInformation = $0400
#PB_Process_VMRead = $0010
; Laden der psapi.dll Bibliothek
If OpenLibrary(0, "psapi.dll")
Global GetProcessImageFileName_.i = GetFunction(0, "GetProcessImageFileNameW") ; Unicode-Version der Funktion
EndIf
Procedure EnumerateWindowsCallback(hwnd, lParam)
Protected windowTitle.s = Space(#WindowTitleLength)
Protected processID
Protected processHandle
Protected programName.s = Space(#ProgramNameLength)
Protected exeName.s
If GetWindowText_(hwnd, @windowTitle, #WindowTitleLength) > 0
If windowTitle <> "Default IME" And windowTitle <> "MSCTFIME UI"
GetWindowThreadProcessId_(hwnd, @processID)
processHandle = OpenProcess_(#PB_Process_QueryInformation | #PB_Process_VMRead, #False, processID)
If processHandle
If CallFunctionFast(GetProcessImageFileName_, processHandle, programName, #ProgramNameLength) > 0
; Kürze den Pfadnamen auf den Namen der EXE-Datei
exeName = GetFilePart(programName)
PrintN("Fensterhandle: " + Str(hwnd) + ", Fenstername: " + windowTitle + ", Programm: " + exeName)
EndIf
CloseHandle_(processHandle)
EndIf
EndIf
EndIf
ProcedureReturn #True
EndProcedure
Procedure EnumerateWindows()
PrintN("Liste der geöffneten Fenster und ihrer Programme:")
EnumWindows_(@EnumerateWindowsCallback(), 0)
EndProcedure
Procedure MainLoop()
Protected userInput.s
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ClearConsole()
EnumerateWindows()
Print("Drücken Sie die Eingabetaste, um die Liste zu aktualisieren oder 'q' zum Beenden: ")
userInput = Input()
If userInput = "q"
End
EndIf
ForEver
EndProcedure
; Hauptprogramm
If OpenWindow(#MainWindow, 0, 0, 400, 300, "Hauptfenster", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If OpenConsole()
MainLoop()
CloseConsole()
EndIf
CloseWindow(#MainWindow)
EndIf
; Schließen der psapi.dll Bibliothek
CloseLibrary(0)