您的位置:首页 > 其它

experiment: recive windows notify message on tray program

2011-09-27 20:51 399 查看
实验的原因: 想在托盘上接收windows退出或注销消息.

在原始demo中是可以的,那是个win32程序.

托盘中注册通知总是得到1702错误.

先记下, 有时间,做个实验。

<2011_1001>

参考资料:

Turn Off Monitor when PC is Locked
http://www.codeproject.com/KB/winsdk/Turn_OFF_Monitor_OnLock.aspx
可以以前搞错了, 弄个托盘和接收不到系统通知没有任何关系. 带上托盘也是可以收到消息通知的.

注册Windows消息通知和窗体程序没区别,也是注册到主窗口的句柄上。只是主窗体不显示而已.

INT ProcessWindowsSystemNotify(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, TAG_PROCESS_SYSTEM_NOTIFY * pProcess)
{
	if(!pProcess->pDebugLog)
		goto END;

    switch (wParam)
    {
    case WTS_SESSION_UNLOCK:
        {
			/** 在WinXpSp3下, 不显示欢迎界面时, 三键锁定界面解锁时, 进入这里 */
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_SESSION_UNLOCK"));
        }
        break;

    case WTS_SESSION_LOCK:
        {
			/** 在WinXpSp3下, 不显示欢迎界面时, 三键锁定界面锁定时, 进入这里 */
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_SESSION_LOCK"));
        }
        break;

    case WTS_SESSION_LOGON:
		{
			/** 一个账户收不到本身的此消息 */
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_SESSION_LOGON"));
		}
		break;

	case WTS_SESSION_LOGOFF:
		{
			/** 一个账户收不到本身的此消息 */
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_SESSION_LOGOFF"));
		}
		break;

	case WTS_REMOTE_CONNECT:
		{
			/** 在WinXpSp3下, 同一个账户, 已经登录过, 
			* 用远程桌面用同一个账户远程登入, 进入这里 
			*/
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_REMOTE_CONNECT"));
		}
		break;

	case WTS_REMOTE_DISCONNECT:
		{
			/** 在WinXpSp3下, 同一个账户, 已经登录过, 
			* 用远程桌面用同一个账户远程登等出, 进入这里 
			*/
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_REMOTE_DISCONNECT"));
		}
		break;

	case WTS_SESSION_REMOTE_CONTROL:
		{
			/** 启动的晚, 没有收到此消息 */
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_SESSION_REMOTE_CONTROL"));
		}
		break;

	case WTS_CONSOLE_DISCONNECT:
		{
			/** 别的用户登录时, 已经登录的用户控制连接断开, 进入这里 */
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_CONSOLE_DISCONNECT"));
		}
		break;

	case WTS_CONSOLE_CONNECT:
		{
			/** 用户登录后, 进入这里 */
			TRACE_CODE_INFO(pProcess->pDebugLog, _T("WTS_CONSOLE_CONNECT"));
		}
		break;

    default:
		{
			pProcess->pDebugLog->logv(_T("<%s><%d> <%s>=<%d> <%s>=<%d>"), 
				__WFILE__, __LINE__,
				_T("wParam"), wParam,
				_T("lParam"), lParam);
		}
		break;
    };

END:
    return S_OK;
}


系统登出的消息, GINA程序可以得到.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: