2009-03-03 98 views
4

我已经使用一些代码来关闭显示器的电源,但我仍然有一点问题。如何在C#中正确关闭显示器电源?

该代码大多数时间工作正常,但一旦有一段时间,显示器变成空白。我的意思是,屏幕是完全黑色的,你什么也看不到,但你可以看到它仍然亮着。 LCD指示灯仍亮起,但屏幕完全黑屏。

我不知道为什么会这样,也许有些你知道为什么......如果我设置Windows电源设置,关闭显示屏X分钟后,这不会发生,但我需要一个应用程序来做到这一点,所以我可以随时用快捷方式调用它。

我正在使用的代码是这样的:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam); 

const int WM_SYSCOMMAND = 0x0112; 
const int SC_MONITORPOWER = 0xF170; 
const int HWND_BROADCAST = 0xFFFF; 

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); 

任何想法?

回答

1

你在多台机器上测试过吗?可能是驱动程序问题...

+0

不,只在我的。这是我希望它的工作... – 2009-03-03 13:29:49

4

您不希望将该消息广播到所有窗口。你正在依靠他们中的每一个来按照你的期望来处理它。

您需要创建自己的,只有将消息发送到它,所以你可以控制的行为。

有在这个岗位由雷蒙德陈的意见的几个解决方案:http://blogs.msdn.com/oldnewthing/archive/2006/06/13/629451.aspx

+1

+1广播可能会导致很多讨厌的问题。 – 2009-03-03 01:54:59

0

没有什么工作,我创建了自己的窗口和使用的窗口句柄,并大多数时候,屏幕被关闭,它是完全黑(LCD灯关闭),但每过一段时间,液晶光不关闭... :(

0

我有这个问题了。机器经常工作正常,然后没有任何已知因此,不会允许睡觉的画面。我无法找到一个具体的共性。

当机器LO​​GG有时甚至会出现删除。通常1次重启将清除问题。不总是。

我甚至看到屏幕醒来,并拒绝到被注销的机器上又睡了,与它没有一个互动。

显然是有一些工艺或流程的错,但你如何跟踪呢?