Re: Afficher/Activer une application déjà lancée ?
Publié : ven. 22/janv./2016 13:03
Merci pour tout ces codes.
@Ar-S
Fonctionne très bien.
J'ai trouvé une solution simple mais pas forcément satisfaisante.
J'utilise l'API FindWindow_("WindowClass", #NUL) pour trouver le hWnd de l'exe déjà lancé.
Comme je ne sais pas créer un "class name" avec PB pour identifier mon appli, je donne une valeur particulière a la fenêtre PB (#WinApp=999).
Donner une valeur a partir de 1000 et au dessus pose problème dans l'IDE mais pas une fois compilé.
Le titre de la fenêtre de mes applis change en cours d'utilisation, aussi pour pouvoir utiliser la fonction FindWindow_(..), il me faut le nom d'une classe.
Toutes les applis crées sans nom de classe ont pour nom de classe "WindowClass_0" si on utilise OpenWindow(0,...), "WindowClass_1" si on utilise OpenWindow(1,...), et ainsi de suite.
Ma question subsidiaire: peut-on créer un nom de classe pour une appli en PB ???
Exemple de code qui fonctionne:
@Ar-S
Je garde et je me suis fait un exe qui me sera très utile.De nouveau tiré de WinAPi
Le handle de la fenêtre sous le curseur :
Fonctionne très bien.
J'ai trouvé une solution simple mais pas forcément satisfaisante.
J'utilise l'API FindWindow_("WindowClass", #NUL) pour trouver le hWnd de l'exe déjà lancé.
Comme je ne sais pas créer un "class name" avec PB pour identifier mon appli, je donne une valeur particulière a la fenêtre PB (#WinApp=999).
Donner une valeur a partir de 1000 et au dessus pose problème dans l'IDE mais pas une fois compilé.
Le titre de la fenêtre de mes applis change en cours d'utilisation, aussi pour pouvoir utiliser la fonction FindWindow_(..), il me faut le nom d'une classe.
Toutes les applis crées sans nom de classe ont pour nom de classe "WindowClass_0" si on utilise OpenWindow(0,...), "WindowClass_1" si on utilise OpenWindow(1,...), et ainsi de suite.
Ma question subsidiaire: peut-on créer un nom de classe pour une appli en PB ???
Exemple de code qui fonctionne:
Code : Tout sélectionner
EnableExplicit
#WinApp=999 ; cette valeur me permet d'avoir un nom de classe "WindowClass_999" pour mon appli
Global MyApp$ = "MyApp" : Global Mutex
Global TB_Message = RegisterWindowMessage_("TaskbarCreated")
If TB_Message
Mutex = CreateMutex_(0,1, @MyApp$)
If GetLastError_() = #ERROR_ALREADY_EXISTS
; Code manquant pour activer la fenêtre si on tente de relancer l'application.
Define hWnd = FindWindow_("WindowClass_"+Str(#WinApp), #NUL) ; je teste "WindowClass_999"
If hWnd
SendMessage_(hWnd,#WM_SYSCOMMAND, #SC_RESTORE,0)
End
EndIf
EndIf
EndIf
Enumeration Images
#Image_App
EndEnumeration
Global IconApp = CatchImage(#Image_App , ?Image_App)
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=400 : #H=200
Define X = (DesktopWidth(0) -#W)/2
Define Y = (DesktopHeight(0)-#H)/2
Define Event
SetWindowCallback(@TaskbarCallback()) ; crash explorer
If OpenWindow(#WinApp, X, Y, #W, #H, "MyApp & Mutex & ...", #PB_Window_MinimizeGadget|#PB_Window_Minimize)
initSysTray()
SetWindowState(#WinApp, #PB_Window_Normal)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow : End
EndSelect
ForEver
EndIf
DataSection
Image_App:
; size : 1150 bytes
Data.q $1010000100010000,$0468002000010000,$0028000000160000,$0020000000100000,$0000002000010000
Data.q $0000000004400000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$50752D2D3E5A0100,$2A2A553045639433,$0000000000000600,$0000000000000000
Data.q $0000000000000000,$8E8A144C4C3F0000,$7575A8939390838C,$4663020000005075,$6093BE4F709A2431
Data.q $4764E2305381FD39,$000005000033562F,$0000000000000000,$4B3C000000000000,$B5B38D929290113C
Data.q $8785A38E8E8CE2B5,$4C69040000008887,$81AFDB5E80AC3534,$5481FE385F93FE5E,$0000512F4561DF31
Data.q $0000000000000400,$8F8D0F4444440000,$B7B4F4B8BAB6858F,$6B65BF9D9E9CFCB6,$333301000000326B
Data.q $81AD503C597C0500,$5F93FE5D81AFDA5F,$4361DC315481FE38,$3A3A040000004C2E,$B8B57E8B8D8B0D3A
Data.q $9D9AFCB5B6B3F2B7,$00002E696963BA9D,$0000000000000100,$5478040000000000,$80AED45D7FAA483C
Data.q $5481FE385F93FE5C,$8381522B415AD931,$B5B2F0B5B6B47A83,$625BB09B9C99FBB4,$0000010000002762
Data.q $0000000000000000,$0000000000000000,$7DA9403B53730300,$5F93FE5A7FADCD5C,$8387EA35537CFE38
Data.q $9895F9B1B2AFF37E,$000020575F57A598,$0000000000000100,$0000000000000000,$0000000000000000
Data.q $506F020000000000,$7CABC95879A43935,$8084FF51739DFE57,$58589F7D7E7BFB78,$0000000000001A58
Data.q $00240A1919190000,$0000000000000700,$2424010000000000,$1C1C040000000724,$7A94855A636D091C
Data.q $D0CBFEA9B4BCFB65,$4C4C7C969892F8CD,$2727000000000A4C,$39398E373B3D0D13,$00000F2222227C35
Data.q $ABA91E6E6E6E0000,$8E8C8D9D9F9D93A9,$A5A1E5ADAEAB838C,$D4CFAB838481F1A2,$A6A1EBD6DAD3DCD1
Data.q $2A2A1238383870A3,$4D4FC7393E402423,$4C4C694D5050F348,$D4D28AB6B8B60A4C,$BEBBFBC7C8C6F7D3
Data.q $8B88F2B2B3AFFCBD,$9592113C3C3C798B,$CFCAD8D3D5D04B95,$4445BC696D6CEDCC,$5F61F0494E4FCA3F
Data.q $999943484C4CAD5C,$A1A0E5CACBC95099,$ABA87D888886A4A1,$6B6BE2A9AAA8EBAA,$5555000000002D6B
Data.q $858552888B880355,$4D4FFF44494BED82,$4545C76C6F70FE48,$8787010000002145,$5151869496944487
Data.q $A8A42B5353531951,$8C8CF4C2C3C1D6A6,$0000000000004E8C,$4647243838380000,$7778FE494E50DC42
Data.q $000049656868DA73,$0000000000000200,$5252081F1F1F0300,$C4C1AC9D9E9B1F52,$7272B8B4B4B2F3C3
Data.q $0000010000003172,$545552373B3B0600,$6969DB747677EB4F,$0000040000004D69,$0000000000000000
Data.q $6666000000000000,$A2A2BBAFB1AE3466,$00001965656576A2,$3F3F381F24241000,$7272CE4F5455783B
Data.q $3F3F4768686BBE6E,$0000000000000400,$0000000000000000,$0000000000000000,$3333175858580300
Data.q $0000000000000533,$3A3A252222220700,$42423A464A4A4136,$0000020000001742,$0000000000000000
Data.q $FFFF000000000000,$C0030000E0070000,$0100000080010000,$07C0000003800000,$1080000019E00000
Data.q $0000000000800000,$8101000000010000,$07C0000003000000
Data.b $00,$00,$C4,$0F,$00,$00
Tool_ico_end:
EndDataSection