Afficher/Activer une application déjà lancée ?
Publié : jeu. 21/janv./2016 16:08
Bonjour a tous,
Petit a petit, j'essaye d'améliorer mes applications PB.
Cette fois ci, je souhaiterais pouvoir ré-afficher une application PB déjà lancée.
L'application a un Mutex que je teste au démarrage.
Au lieu de simplement terminer l'application si le Mutex existe, je voudrais ré-afficher cette application.
Est-il possible de connaitre le Handle de l'appli a partir du Mutex.
J'ai (mal) recherché sur les forums FR/EN sans rien trouver de pertinent.
Je sais trouver le PID a partir du nom de l'exe mais pas le Handle.
Pourriez-vous sans me donner la solution, me mettre sur la voie (si possible).
Pour info, le titre de mon appli change en cours d'utilisation et n'est pas prévisible.
Merci.
Petit a petit, j'essaye d'améliorer mes applications PB.
Cette fois ci, je souhaiterais pouvoir ré-afficher une application PB déjà lancée.
L'application a un Mutex que je teste au démarrage.
Au lieu de simplement terminer l'application si le Mutex existe, je voudrais ré-afficher cette application.
Est-il possible de connaitre le Handle de l'appli a partir du Mutex.
J'ai (mal) recherché sur les forums FR/EN sans rien trouver de pertinent.
Je sais trouver le PID a partir du nom de l'exe mais pas le Handle.
Pourriez-vous sans me donner la solution, me mettre sur la voie (si possible).
Pour info, le titre de mon appli change en cours d'utilisation et n'est pas prévisible.
Merci.
Code : Tout sélectionner
EnableExplicit
#WinApp=0 : Global MyApp$ = "MyApp" : Global Mutex
Mutex = CreateMutex_(0,1,MyApp$)
If GetLastError_() = #ERROR_ALREADY_EXISTS
; Code manquant pour activer la fenêtre si on tente de relancer l'application.
End
EndIf
DataSection ; Images
Image_App:
IncludeBinary "MyApp.ico"
EndDataSection
Enumeration Images
#Image_App
EndEnumeration
Global IconApp = CatchImage(#Image_App , ?Image_App)
Global TB_Message = RegisterWindowMessage_("TaskbarCreated")
Procedure initSysTray()
If FindWindow_("Progman", #NUL) <> 0
AddSysTrayIcon(#WinApp, WindowID(#WinApp), IconApp)
SysTrayIconToolTip(#WinApp, MyApp$)
EndIf
EndProcedure
Procedure TaskbarCallback(hWnd, Msg, wParam, lParam)
If Msg = TB_Message
initSysTray()
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
ExamineDesktops()
#W=300 : #H=200
Define X = (DesktopWidth(0) -#W)/2
Define Y = (DesktopHeight(0)-#H)/2
Define Event
SetWindowCallback(@TaskbarCallback()) ; crash explorer
If OpenWindow(0, X, Y, #W, #H, "MyApp & Mutex & ...", #PB_Window_MinimizeGadget|#PB_Window_Minimize)
initSysTray()
SetWindowState(0, #PB_Window_Normal)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow : End
EndSelect
ForEver
EndIf