代码改变世界

Visual C++ 2011-6-6

2011-06-06 13:38  Clingingboy  阅读(1622)  评论(0编辑  收藏  举报

 

 

一.(Un)RegisterPowerSettingNotification(Vista+)

注册电源事件,允许用WM_POWERBROADCAST捕获消息,如笔记本电脑电量的使用,百分比发生变化会发送消息,还有一些键盘的物理按键

Registers the application to receive power setting notifications for the specific power setting event.

二.GetSystemPowerStatus 获取电源状态

SYSTEM_POWER_STATUS status;
GetSystemPowerStatus(&status);

比如查看电池现在的百分比及可用时间

三.GetDevicePowerState获取设备电源状态

Retrieves the current power state of the specified device. This function cannot be used to query the power state of a display device.

BOOL WINAPI GetDevicePowerState(
  __in   HANDLE hDevice,
  __out  BOOL* pfOn
);

四.WTS(Un)RegisterSessionNotification

http://hi.baidu.com/lifuchao2008/blog/item/efc44150d3691665843524d4.html

http://tech.ddvip.com/2006-04/11444382604312.html

但切换用户时,如用户锁定,远程登录触发消息

switch(message)
 {
  case WM_WTSSESSION_CHANGE:
   {
switch(wParam)
   {
   case WTS_CONSOLE_CONNECT:
    MessageBox("WTS_CONSOLE_CONNECT", "Esmile", MB_OK );
    break;
   case WTS_CONSOLE_DISCONNECT:
    MessageBox("WTS_CONSOLE_DISCONNECT",
    "Esmile", MB_OK );
    break;
   case WTS_SESSION_LOCK:
    MessageBox("WTS_SESSION_LOCK",
    "Esmile", MB_OK );
    break;
   case WTS_SESSION_UNLOCK:
    MessageBox("WTS_SESSION_UNLOCK",
    "Esmile", MB_OK );
    break;
   case WTS_SESSION_LOGOFF:
    MessageBox("WTS_SESSION_LOGOFF",
    "Esmile", MB_OK );
    break;
   case WTS_SESSION_LOGON:
    MessageBox("WTS_SESSION_LOGON",
    "Esmile", MB_OK );
    break;
   default:
    break;
   }
}
   break;
default:
   break;
 }

五.WTSGetActiveConsoleSessionId

得到当前登录用户的会话ID

DWORD WTSGetActiveConsoleSessionId(void);

六.ProcessIdToSessionId

根据进程ID获取SessionId

DWORD a=WTSGetActiveConsoleSessionId();
DWORD b=0;
ProcessIdToSessionId(GetCurrentProcessId(),&b);
a==b;

七.POWERBROADCAST_SETTING

当在WM_POWERBROADCAST消息中捕获消息时可以转化成这个结构体

 

参考:http://blog.csdn.net/breeze_vickie/archive/2009/07/09/4334257.aspx