Suivant le post de Hi-Toro sur le fofo anglais, j'ai juste écrit ça plus propre et pour Pb 4.20
http://www.purebasic.fr/english/viewtop ... highlight=
Attention, pour 4.3, faut changer pour WindowFromPoint_(, alors débrouiller vous, na !
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Trouver le nom du programme à partir de l'ID d'une fenêtre
Procedure.s ProgramfileNameFromWindow(WindowID)
Protected ProcessID, Process32, Snapshot, ProcessEntry.PROCESSENTRY32, ProgramfileName.s
GetWindowThreadProcessId_(WindowID, @ProcessID)
Process32 = OpenLibrary (#PB_Any, "kernel32.dll")
If Process32
Snapshot = CallFunction (Process32, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0)
If Snapshot
ProcessEntry\dwSize = SizeOf(PROCESSENTRY32)
If CallFunction (Process32, "Process32First", Snapshot, @ProcessEntry)
Repeat
If ProcessID = ProcessEntry\th32ProcessID
ProgramfileName = PeekS(@ProcessEntry\szExeFile)
Break
EndIf
Until CallFunction (Process32, "Process32Next", Snapshot, @ProcessEntry) = 0
EndIf
CloseHandle_(Snapshot)
EndIf
CloseLibrary(Process32)
EndIf
ProcedureReturn ProgramfileName
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 30, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
StickyWindow(0, 1)
TextGadget(0, 5, 5, 290, 20, "")
SetTimer_(WindowID(0), 1, 500, 0)
Repeat
Event = WaitWindowEvent()
Select Event
Case #WM_TIMER
Select EventwParam()
Case 1
Fenetre = WindowFromPoint_(DesktopMouseX(), DesktopMouseY())
Texte.s =ProgramfileNameFromWindow(Fenetre)
SetGadgetText(0, Texte)
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
KillTimer_(WindowID(0), 1)
End