Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > как програмно выключить монитор ?


Автор: 12usver12 13.2.2008, 16:23
собсно как програмно выключить монитор ? возможно ли такое на шарпе 

Автор: jonie 13.2.2008, 18:07
да, можно.
Импортируйте в него вызовы системных библиотек и сделайте выключение средствами winApi (это как минимум).
правда, как я понимаю логику, у вашей программы должен быть определенный уровень доверия, чтобы это было возможно...
про чисто .net способ неслышал...

Автор: 12usver12 13.2.2008, 21:50
а вообще можно как-то так, как например для выкл комп есть \system32\shutdown.exe
вызываем и даем только параметры нужные, можно шото подобное и для моника есть ? 

Автор: 12usver12 14.2.2008, 13:16
вот нашел , не знаю что теперь прописать в static extern IntPtr SendMessage()  ?


 
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(HandleRef HWND,......,......);
        private void button4_Click(object sender, EventArgs e)
        {
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
        }

Автор: Stepan_Lameroff 14.2.2008, 14:16
Код

        private const int MONITOR_ON = -1;
        private const int MONITOR_OFF = 2;
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_MONITORPOWER = 0xF170;
        private const int HWND_BROADCAST = 0xffff;

        [DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd,
                                                 uint Msg,
                                                 IntPtr wParam,
                                                 IntPtr lParam);

        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        public static void MonitorOff()
        {
            IntPtr foregroundWindow = GetForegroundWindow();
            if (foregroundWindow == IntPtr.Zero)
                foregroundWindow = (IntPtr) HWND_BROADCAST;

            SendMessage(foregroundWindow, WM_SYSCOMMAND, (IntPtr) SC_MONITORPOWER, (IntPtr) MONITOR_OFF);
        }

        public static void MonitorOn()
        {
            IntPtr foregroundWindow = GetForegroundWindow();
            if (foregroundWindow == IntPtr.Zero)
                foregroundWindow = (IntPtr) HWND_BROADCAST;

            SendMessage(foregroundWindow, WM_SYSCOMMAND, (IntPtr) SC_MONITORPOWER, (IntPtr) MONITOR_ON);
        }

Автор: Legolas 14.2.2008, 14:23
12usver12, GOOGLE рулит!

Код

using System.Runtime.InteropServices; //to DllImport

public int WM_SYSCOMMAND = 0x0112;
public int SC_MONITORPOWER = 0xF170; //Using the system pre-defined MSDN constants that can be used by the SendMessage() function .


[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
//To call a DLL function from C#, you must provide this declaration .


private void button1_Click(object sender, System.EventArgs e)
{

SendMessage( this.Handle.ToInt32() , WM_SYSCOMMAND , SC_MONITORPOWER ,2 );//DLL function
}

Автор: 12usver12 14.2.2008, 16:04
Спсибо Степану_Ламерову, Legolasy и Googly  smile 

Автор: PetBzz 22.4.2011, 16:30
Люди! Это всё, конечно, хорошо,
но что делать, если нужно при этом блокировать включение монитора мышкой и клавиатурой?
Хуки не помогают!

Автор: -Mikle- 26.4.2011, 09:04
BlockInput(true) ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)