Deplacer handle dans un autre ecran [Résolu]

loudo21 5 Messages postés mercredi 28 février 2007Date d'inscription 3 mars 2008 Dernière intervention - 3 mars 2008 à 20:32 - Dernière réponse : Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention
- 3 mars 2008 à 23:33
Bonjour.

J'ai un PC avec deux cartes graphiques qui chacune peut avoir deux ecran en mode etendue. J'aimerai pourvoir changer une fenetre d'ecran. J'arrive deja a recuperr son handle et à l'agrandir mais cela ne se fait que sur l'ecran sur lequel la fenetre se trouve. Il faudrait que je puisse specifier l'ecran auquel la fenetre apaprtient ou alors la deplacer en lui specifiant sa location en 2048;0 (si les ecrans sont en 1024*768).

Quelles sont les API a utiliser?
Afficher la suite 

Votre réponse

3 réponses

Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 3 mars 2008 à 23:33
+3
Utile
Je peux difficilement testé car j'ai pas installé mon second écran.

private const int SWP_NOSIZE = 0x0001;
private const int SWP_NOZORDER = 0x0004;
private const string WINDOW_NAME = "Sans titre - Bloc-notes"; // Fr


[ DllImport( "User32.dll", SetLastError = true ) ]
private static extern IntPtr FindWindow( string className, string windowName );


[ DllImport( "user32.dll", SetLastError = true ) ]
private static extern bool SetWindowPos
(
    IntPtr hWnd,
    IntPtr hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    uint uFlags
);


private void OpenAndMoveNotepad( int x, int y )
{
    // Cherche si un nouvelle fenêtre de notepad est déja ouverte.
    IntPtr hWnd = FindWindow( null, WINDOW_NAME );


    // Ouvre une nouvelle fenêtre de notepad.
    if ( hWnd == IntPtr.Zero )
    {
        Process p = Process.Start( "notepad.exe" );
        p.WaitForInputIdle( 2000 );
        hWnd = p.MainWindowHandle;
        p.Close( );
        p = null;
    }


    // Récupère le screen via le handle !
    Screen screen = Screen.FromHandle( hWnd );
    MessageBox.Show( screen.DeviceName );


    SetWindowPos( hWnd, IntPtr.Zero, x, y, 0, 0, SWP_NOZORDER | SWP_NOSIZE );


    screen = Screen.FromHandle( hWnd );
    MessageBox.Show( screen.DeviceName );
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 3 mars 2008 à 21:10
0
Utile
Salut, as tu regardé les méthodes et proprietés de la classe System.Windows.Forms.Screen !?
Commenter la réponse de Lutinore
loudo21 5 Messages postés mercredi 28 février 2007Date d'inscription 3 mars 2008 Dernière intervention - 3 mars 2008 à 21:48
0
Utile
Slt Lutinore.

En fait je n'ai pas regarder la classe System.Windows.Forms.Screen car je passe par les API Windows puisque je veux changer d'ecran des fenetres dont je n'ai pas le code source. Du genre tu prend Notepad et tu le mets en plein ecran sur un autre ecran.

Aurais tu un code ou la fonction correspondante?
Commenter la réponse de loudo21

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.