Deplacer handle dans un autre ecran

Résolu
loudo21 Messages postés 5 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 3 mars 2008 - 3 mars 2008 à 20:32
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre 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?

3 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 mars 2008 à 23:33
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 );
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 mars 2008 à 21:10
Salut, as tu regardé les méthodes et proprietés de la classe System.Windows.Forms.Screen !?
0
loudo21 Messages postés 5 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 3 mars 2008
3 mars 2008 à 21:48
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?
0
Rejoignez-nous