我想写一个程序,如果有人登录到我的服务器上,应该会自动执行一些任务。
我对此的问题是:
发布于 2010-11-22 07:17:14
您最好(也是最安全的)选择是创建一个接受SERVICE_CONTROL_SESSIONCHANGE控件的服务。
这将允许您的服务控制处理程序在用户登录、注销、锁定会话和其他各种选项时接收控件。寻找更多的信息,在链接打击。
这是通过创建一个在SERVICE_ACCEPT_SESSIONCHANGE中具有dwControlsAccepted标志的服务来完成的,如下所示:
SERVICE_STATUS ss;
...
ss.dwControlsAccepted |= SERVICE_ACCEPT_SESSIONCHANGE;
其次是:
// This lets the service accept the session change ctrls
// The service handle here is received by calling RegisterServiceCtrlHandler
SetServiceStatus(hServiceHandle,
&ss);
这将允许窗口将SERVICE_CONTROL_SESSIONCHANGE控件发送到您的HandlerEx函数,该函数应该如下所示:
DWORD WINAPI HandlerEx(DWORD dwControl,
DWORD dwEventType,
LPVOID lpEventData,
LPVOID lpContext)
{
switch (dwControl)
{
...// Regular control handling
case (SERVICE_CONTROL_SESSIONCHANGE):
switch(dwEventType)
{
case(WTS_SESSION_LOGON):
// Handle logon
break;
case(WTS_SESSION_LOCK):
// Handle lock
break;
...
}
break;
...
}
}
您可以阅读从这里接收到的所有不同的会话更改通知:变化,您需要的所有通知都在描述的wParam部分。
不管怎样,这就是它的要旨。您可以在这里阅读关于handlerex函数的更多信息:HandlerEx,以及关于一般服务的更多信息:服务功能。我建议您阅读ServiceMain函数、RegisterServiceCtrlHandler函数,最重要的是阅读发布在MSDN页面上的示例。它们非常有用。
祝好运!
https://stackoverflow.com/questions/4242776
复制相似问题