高手请进!江湖救急!如何实现?在线急等! 如何实现服务器控制客户端的开关机操作/? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不需要和硬件打交道那么复杂,window NT以上系统启动都是由winlogo调用msgina.dll进行工作的。建议你学习一下Gina相关知识,可以做到。(可以参看MSDN中GINA [Winlogon/GINA])简单来说,windows的启动,注销,锁定,关机,重启分别都对应一个sas消息,分别是WLX_SAS_ACTION_LOGOFF,WLX_SAS_ACTION_SHUTDOWN,WLX_SAS_ACTION_SHUTDOWN_REBOOT,WLX_SAS_ACTION_SHUTDOWN_POWER_OFF等等,winlogo收到这小sas消息后,会调用gina里面的对应函数,比如WlxLoggedOnSAS,WlxLogoutSAS,WlxDisplayLockedNotice等等。你需要做的就是用自己写的gina替换msgina.dll,在里面做你想做的事情就可以了,呵呵 在客户端,具体的关机代码如下:VOID WINAPI ExitWin(){ DWORD dwVer; HANDLE hProcess, hToken; TOKEN_PRIVILEGES NewState; DWORD ProcessId, ReturnLength = 0; LUID luidPrivilegeLUID; dwVer=GetOS(); if(dwVer==VER_PLATFORM_WIN32_WINDOWS) ExitWindowsEx(1,0); else if(dwVer==VER_PLATFORM_WIN32_NT) { ProcessId = GetCurrentProcessId(); hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId); OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luidPrivilegeLUID); NewState.PrivilegeCount = 1; NewState.Privileges[0].Luid = luidPrivilegeLUID; NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(AdjustTokenPrivileges(hToken, FALSE, &NewState, NULL, NULL, NULL)) ExitWindowsEx(EWX_FORCE|EWX_POWEROFF,0); }}//判断系统类型 DWORD WINAPI GetOS(){ OSVERSIONINFO os; TCHAR sVersion[MAX_PATH]; os.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); GetVersionEx(&os); switch(os.dwPlatformId) { case VER_PLATFORM_WIN32_WINDOWS: return VER_PLATFORM_WIN32_WINDOWS; case VER_PLATFORM_WIN32_NT: return VER_PLATFORM_WIN32_NT; }} 实在对不起大家,只要关机和得启就行了!谁有源代码给我发一份![email protected] ... hoho...搞根电线,把客户端的开关用电线连到电路版上,然后串口..yes!!! 图像比较问题出错 向自定义IE工具条上添加按钮 初学者提问VC问题? C++头文件的一个问题? Socket ip 地止解析问题 (SPI拦截) _RecordsetPtr重新查询如何操作? 关于在TreeView 中点击选项闪烁的问题 如何使一个程序自己删除自己? 做过语音播放的兄弟请进!很着急的问题!!!! 特怪问题:变量声明换了位置后就会出现问题? 急!在SDI中,默认的菜单拦,工具拦,状态拦的大小可调吗?怎样调? 如何取得控件的事件???再线等!
window NT以上系统启动都是由winlogo调用msgina.dll进行工作的。建议你学习一下Gina相关知识,可以做到。(可以参看MSDN中GINA [Winlogon/GINA])简单来说,
windows的启动,注销,锁定,关机,重启分别都对应一个sas消息,
分别是WLX_SAS_ACTION_LOGOFF,WLX_SAS_ACTION_SHUTDOWN,WLX_SAS_ACTION_SHUTDOWN_REBOOT,WLX_SAS_ACTION_SHUTDOWN_POWER_OFF等等,winlogo收到这小sas消息后,会调用gina里面的对应函数,比如WlxLoggedOnSAS,WlxLogoutSAS,WlxDisplayLockedNotice等等。
你需要做的就是用自己写的gina替换msgina.dll,在里面做你想做的事情就可以了,呵呵
{
DWORD dwVer;
HANDLE hProcess, hToken;
TOKEN_PRIVILEGES NewState;
DWORD ProcessId, ReturnLength = 0;
LUID luidPrivilegeLUID; dwVer=GetOS();
if(dwVer==VER_PLATFORM_WIN32_WINDOWS)
ExitWindowsEx(1,0); else if(dwVer==VER_PLATFORM_WIN32_NT)
{
ProcessId = GetCurrentProcessId();
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luidPrivilegeLUID); NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = luidPrivilegeLUID;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(AdjustTokenPrivileges(hToken, FALSE, &NewState, NULL, NULL, NULL))
ExitWindowsEx(EWX_FORCE|EWX_POWEROFF,0);
}
}//判断系统类型 DWORD WINAPI GetOS()
{
OSVERSIONINFO os;
TCHAR sVersion[MAX_PATH]; os.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&os);
switch(os.dwPlatformId)
{
case VER_PLATFORM_WIN32_WINDOWS:
return VER_PLATFORM_WIN32_WINDOWS; case VER_PLATFORM_WIN32_NT:
return VER_PLATFORM_WIN32_NT;
}
}
[email protected]
hoho...搞根电线,把客户端的开关用电线连到电路版上,然后串口..yes!!!