Deplacer handle dans un autre ecran [Résolu]

Messages postés
5
Date d'inscription
mercredi 28 février 2007
Dernière intervention
3 mars 2008
- - Dernière réponse : Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 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

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
3
Merci
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 );
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
0
Merci
Salut, as tu regardé les méthodes et proprietés de la classe System.Windows.Forms.Screen !?
Commenter la réponse de Lutinore
Messages postés
5
Date d'inscription
mercredi 28 février 2007
Dernière intervention
3 mars 2008
0
Merci
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.