Maintenir une form au dessus d'une application donnée
jabajaba
Messages postés3Date d'inscriptionvendredi 21 novembre 2003StatutMembreDernière intervention29 juin 2008
-
27 juin 2008 à 15:36
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 2014
-
30 juin 2008 à 12:57
Voilà, j'ai une form que je veux maintenir "topmost" mais seulement au dessus d'une application précise, pas au dessus de toutes les applis ouvertes.
Me.topmost met la form au dessus de toutes les applis.
J'ai essayé avec l'api SetWindowsPos, ça fonctionne bien quand on passe comme argument HwndInsertAfter les valeurs:
-1 (topmost) et -2 (not topmost) mais si je passe le hwnd (window handle) de l'appli sur laquelle je veux maintenir ma form toujours visible, ça ne marche pas. Elle part derriere l'appli.
Si quelqu'un a une idée, merci de m'aider.
Voici le code que j'utilise:
Imports System.Runtime.InteropServices
Public Class TopOfApp
Public Const SWP_NOSIZE As Int32 = &H1
Public Const SWP_NOMOVE As Int32 = &H2
<DllImport( _
"user32.dll", _
CharSet:=CharSet.Auto, _
CallingConvention:=CallingConvention.StdCall _
)> _
Public Shared Function SetWindowPos( _
ByVal hWnd As IntPtr, _
ByVal hWndInsertAfter As IntPtr, _
ByVal X As Int32, _
ByVal Y As Int32, _
ByVal cx As Int32, _
ByVal cy As Int32, _
ByVal uFlags As Int32) _
As Boolean
End Function
Public Shared Function FindHWND() As IntPtr
'je recupère le handle de mon appli (ici calculatrice pour l'exemple)
For Each proc As Process In Process.GetProcessesByName("Calculatrice")
If proc.MainWindowTitle.StartsWith("Calculatrice") Then Return proc.MainWindowHandle
Next
End Function
Public Shared Function IsTopOf(ByVal cForm As Form) As Boolean
Return SetWindowPos(cForm.Handle, FindHWND, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Function
End Class
A voir également:
Maintenir une form au dessus d'une application donnée