Maintenir une form au dessus d'une application donnée

Signaler
Messages postés
3
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
29 juin 2008
-
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
-
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

3 réponses

Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
4
Form2.ShowDialog()
Messages postés
3
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
29 juin 2008

???
Je crois que je n'ai pas bien été compris.
Il s'agit de mettre la form au dessus d'une autre application, pas d'une form de mon application.
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
4
sorry j'ai été trop vite,
 je crois que l'api SendMessage
http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx