64 votes

Activer / désactiver le moniteur

Est-il possible par programme d'allumer / éteindre un moniteur avec du code (C #)?

26voto

Wim Haanstra Points 2501

Avez-vous même essayer de googler il?

Premier succès: http://www.codeproject.com/KB/cs/Monitor_management_guide.aspx

Je ne suis pas surpris que vous devez utiliser certaines DLL est fourni par Windows.

(J'ai deviné que vous aviez besoin d'une solution C#, parce que c'est la seule étiquette que vous avez appliqué).

EDIT 8 février 2013:

Il a été mentionné que la solution ne fonctionne plus sous Windows 7 fr 8. Eh bien en voici un qui fonctionne très bien sous Windows 7, n'ont pas essayé Windows 8.

http://www.sortedbits.com/turn-monitor-c/

20voto

Lee Points 663

Appuyez sur le bouton on/off


Si vous voulez le faire dans le code, apparemment c'est possible dans l'API Win32:

SendMessage hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, param

où WM_SYSCOMMAND = 0x112 et SC_MONITORPOWER = 0xF170 et param indique la mode pour mettre le moniteur en: -1 : sur 2 : off 1 : le mode économie d'énergie

hWnd peut être un handle de la fenêtre - si vous avez une Forme, quelque chose comme cela devrait fonctionner

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

public static void Main(string[] args)
{
    Form f = new Form();
    bool turnOff;   //set true if you want to turn off, true if on
    SendMessage(f.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, turnOff ? 2 : -1);
}

Remarque je n'ai même pas essayé...

19voto

Quinxy von Besiex Points 352

La réponse ci-dessus http://stackoverflow.com/a/713504/636189 convient parfaitement à la désactivation d'un moniteur Windows 7/8, mais pas à son réveil. Sur ces systèmes, vous devrez faire quelque chose de hackish comme ceci (comme indiqué sur http://stackoverflow.com/a/14171736/636189 ):

 [DllImport("user32.dll")]
static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo);

private const int MOUSEEVENTF_MOVE = 0x0001;

private void Wake(){
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, UIntPtr.Zero);
Sleep(40);
mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, UIntPtr.Zero);
}
 

18voto

tkpb Points 13

Pour qui veut cette fonctionnalité sur une application console :

 using System;
using System.Runtime.InteropServices;
using System.Timers;

namespace TurnScreenOFF
{
    class Program
    {
        private static int WM_SYSCOMMAND = 0x0112;
        private static uint SC_MONITORPOWER = 0xF170;

        public static void Main(string[] args)
        {
            SendMessage(GetConsoleWindow(), WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)2);
        }

        [DllImport("kernel32.dll")]
        static extern IntPtr GetConsoleWindow();

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
    }
}
 

Adapté et testé. 100% travaillant sous Windows 8.

17voto

Razzie Points 14705

En fait, il semble que vous puissiez le faire en C #: http://fci-h.blogspot.com/2007/03/turn-off-your-monitor-via-code-c.html . Je n'ai pas testé cela, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X