Deplacer handle dans un autre ecran [Résolu]

Signaler
Messages postés
5
Date d'inscription
mercredi 28 février 2007
Statut
Membre
Dernière intervention
3 mars 2008
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
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?

3 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
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 );
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Salut, as tu regardé les méthodes et proprietés de la classe System.Windows.Forms.Screen !?
Messages postés
5
Date d'inscription
mercredi 28 février 2007
Statut
Membre
Dernière intervention
3 mars 2008

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?