标题:使用消息控制显示器关闭
只看楼主
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
 问题点数:0 回复次数:7 
使用消息控制显示器关闭
Option Explicit

Private Declare Function SendScreenMessage Lib "user32" _
   Alias "SendMessageA" _
  (ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   lParam As Any) As Long

Private Const MONITOR_ON = -1&
Private Const MONITOR_LOWPOWER = 1&
Private Const MONITOR_OFF = 2&
Private Const SC_MONITORPOWER = &HF170&
Private Const WM_SYSCOMMAND = &H112

'关闭 显示器
Public Function MonitorOff(Form As Form)
   
    Call SendScreenMessage(Form.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal MONITOR_OFF)

End Function

'开启显示器
Public Function MonitorOn(Form As Form)
   
    Call SendScreenMessage(Form.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal MONITOR_ON)

End Function

'关闭显示器电源 :)---深度睡眠
Public Function MonitorPowerDown(Form As Form)
   
    Call SendScreenMessage(Form.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal MONITOR_LOWPOWER)
   
End Function
搜索更多相关主题的帖子: 显示器 
2005-05-11 08:36
networkangle
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2005-4-22
得分:0 
请教版主用VB能关机吗

迎着太阳的朝阳我们喝着咖啡
2005-05-11 20:10
527cool
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2005-5-11
得分:0 
从一楼看来,看样子关机是有可能的。

2005-05-11 23:53
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
得分:0 
由于NT下关机还要获得相应的权限,你可以使用下面的代码   
       AdjustTokenPrivilegesForNT'先获得权限   
       ExitWindowsEx  uFlags,  0   
  
下面是相关的函数   
Declare  Function  ExitWindowsEx  Lib    "user32  "  (ByVal  uFlags  As  Long,  ByVal  dwReserved  As  Long)  As  Long   
  
Public  Const  EWX_LOGOFF  =  0   
Public  Const  EWX_SHUTDOWN  =  1   
Public  Const  EWX_REBOOT  =  2   
Public  Const  EWX_FORCE  =  4   
  
Public  Const  TOKEN_ADJUST_PRIVILEGES  =  &H20   
Public  Const  TOKEN_QUERY  =  &H8   
Public  Const  SE_PRIVILEGE_ENABLED  =  &H2   
Public  Const  ANYSIZE_ARRAY  =  1   
  
Type  LUID   
       lowpart  As  Long   
       highpart  As  Long   
End  Type   
  
Type  LUID_AND_ATTRIBUTES   
       pLuid  As  LUID   
       Attributes  As  Long   
End  Type   
  
Type  TOKEN_PRIVILEGES   
       PrivilegeCount  As  Long   
       Privileges(ANYSIZE_ARRAY)  As  LUID_AND_ATTRIBUTES   
End  Type   
  
Declare  Function  GetCurrentProcess  Lib    "kernel32  "  ()  As  Long   
Declare  Function  LookupPrivilegeValue  Lib    "advapi32.dll  "  Alias    "LookupPrivilegeValueA  "  (ByVal  lpSystemName  As  String,  ByVal  lpName  As  String,  lpLuid  As  LUID)  As  Long   
Declare  Function  AdjustTokenPrivileges  Lib    "advapi32.dll  "  (ByVal  TokenHandle  As  Long,  ByVal  DisableAllPrivileges  As  Long,  NewState  As  TOKEN_PRIVILEGES,  ByVal  BufferLength  As  Long,  PreviousState  As  TOKEN_PRIVILEGES,  ReturnLength  As  Long)  As  Long   
Declare  Function  OpenProcessToken  Lib    "advapi32.dll  "  (ByVal  ProcessHandle  As  Long,  ByVal  DesiredAccess  As  Long,  TokenHandle  As  Long)  As  Long   
  
Sub  AdjustTokenPrivilegesForNT()   
  
       Dim  hdlProcessHandle  As  Long   
       Dim  hdlTokenHandle  As  Long   
       Dim  tmpLuid  As  LUID   
       Dim  tkp  As  TOKEN_PRIVILEGES   
       Dim  tkpNewButIgnored  As  TOKEN_PRIVILEGES   
       Dim  lBufferNeeded  As  Long   
      
       hdlProcessHandle  =  GetCurrentProcess()   
       OpenProcessToken  hdlProcessHandle,  (TOKEN_ADJUST_PRIVILEGES  Or  _   
                                         TOKEN_QUERY),  hdlTokenHandle   
  
       LookupPrivilegeValue    "  ",    "SeShutdownPrivilege  ",  tmpLuid   
       tkp.PrivilegeCount  =  1   
       tkp.Privileges(0).pLuid  =  tmpLuid   
       tkp.Privileges(0).Attributes  =  SE_PRIVILEGE_ENABLED   
  
       AdjustTokenPrivileges  hdlTokenHandle,  False,  tkp,  _   
                                                   Len(tkpNewButIgnored),  tkpNewButIgnored,  _   
                                                   lBufferNeeded   
 End  Sub   

天津网站建设 http://www./
2005-05-12 00:26
fangys
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-6-15
得分:0 

2005-06-15 06:11
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
XP可以调用SHUTDOWN程序

快上课了……
2005-07-01 19:21
fm945
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-2-13
得分:0 
win2k等同于nt下的程序吗?
2005-07-03 19:53
cnliang
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-4-1
得分:0 
以下是引用griefforyou在2005-5-11 8:36:24的发言: '关闭显示器电源 :)---深度睡眠 Public Function MonitorPowerDown(Form As Form) Call SendScreenMessage(Form.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal MONITOR_LOWPOWER) End Function
为什么我试了之后感觉效果和下面那个是一样的? '关闭 显示器 Public Function MonitorOff(Form As Form) Call SendScreenMessage(Form.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal MONITOR_OFF) End Function

耐心和持久 胜过 激烈和狂热
2005-07-05 11:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-17847-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.161499 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved