我想用VB实现假关机,出现保存程序,正在关机,当然这都比较好解决,关键是关闭显示器的代码?希望大家帮帮我!

解决方案 »

  1.   

    转贴 VB编程关闭显示器    热     ★★★ 【字体:小 大】 
     
    VB编程关闭显示器 
     
    作者:雷涛    文章来源:问专家    点击数:18    更新时间:2004-12-7 
    可以调用windows API:SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 
        我对c++ builder不熟,只能给出vb和delphi的例子,你参考看看: 
        VB版: 
        Option Explicit 
        Private Declare Function SendMessage Lib "user32" _ 
        Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg _ 
        As Long, ByVal wParam As Long, ByVal lParam As Long) _ 
        As Long 
        Const WM_SYSCOMMAND = &H112& 
        Const SC_MONITORPOWER = &HF170& 
         
        Private Sub Form_Load() 
        SendMessage Me.hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2&'根据MSDN,这个参数如果是1,则 表示显示器处于低能耗状态。 
        End Sub 
     
      

  2.   

    上面的代码在xp+sp2中已失效,估计可能是sp2的DesktopWindow对这个消息作了特殊处理。
    在xp+sp2中关闭显示器可以这样:'于窗体添加一个timer
    Option Explicit
    Private Declare Function GetForegroundWindow Lib "user32" () As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Const WM_SYSCOMMAND = &H112&
    Const SC_MONITORPOWER = &HF170&
    Private Sub Timer1_Timer()
    Timer1.Enabled = False
    SendMessage GetForegroundWindow, WM_SYSCOMMAND, SC_MONITORPOWER, 2
    End Sub'运行代码,两秒钟后关闭显示器,然后移动鼠标可以重新打开。
      

  3.   

    哦,漏了说要设置timer,完整代码:
    Option Explicit
    Private Declare Function GetForegroundWindow Lib "user32" () As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Const WM_SYSCOMMAND = &H112&
    Const SC_MONITORPOWER = &HF170&Private Sub Form_Load()
    Timer1.Interval = 2000
    Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
    Timer1.Enabled = False
    SendMessage GetForegroundWindow, WM_SYSCOMMAND, SC_MONITORPOWER, 2
    End Sub