快帮帮我!!如何实现在win98 and win2000下的远程关机??

Archerkids 2003-04-25 09:17:08
如何用vc实现在win98 and win2000下的远程关机和重启(可以在远程机上加载一定的程序,最好给出源代码)
...全文
39 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangrq 2003-05-16
  • 打赏
  • 举报
回复
可以使用不InitiateSystemShutdown在NT和2000下关机,98和me没机器试。
guoyin 2003-04-26
  • 打赏
  • 举报
回复

BOOL WINAPI PL_ExitWindow(UINT uFlag)
{
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tkp;
BOOL fResult = FALSE;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
if(LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid))
{
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0))
{
return ::ExitWindowsEx(uFlag, 0);
}
}
}

return ::ExitWindowsEx(uFlag, 0);
}

void CShutDownDlg::OnOK()
{
OSVERSIONINFO ver;
ZeroMemory(&ver, sizeof(OSVERSIONINFO));
ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&ver);
int nID = GetCheckedRadioButton(IDC_RADIO_LOGOFF, IDC_RADIO_SHUTDOWN);
BOOL bForce = ((CButton*)GetDlgItem(IDC_CHECK_FORCE))->GetCheck();
int nSel = nID - IDC_RADIO_LOGOFF;
UINT uFlag = bForce ? EWX_FORCE : 0;
switch(nSel)
{
case 0:
uFlag |= EWX_LOGOFF;
break ;
case 1:
uFlag |= EWX_REBOOT;
break ;
case 2:
{
if(ver.dwMajorVersion <= 4)
{
uFlag |= EWX_SHUTDOWN;
}
else
{
uFlag |= (EWX_SHUTDOWN | EWX_POWEROFF);
}
}
break ;
}
CDialog::OnOK();
PL_ExitWindow(uFlag);
}
Archerkids 2003-04-26
  • 打赏
  • 举报
回复
那,2000 or NT该怎么做??
qiufuwang 2003-04-26
  • 打赏
  • 举报
回复
up
etboy327 2003-04-25
  • 打赏
  • 举报
回复
必须在远程机上加载一定的程序。
1。对于98,简单! ExitWindowsEx(具体参数); 就ok了。
当然你要建立一个侦听的SOCKET,收到信息进行判断,决定是否关机,不要告诉我
你不懂网络编程。
2。对于2000,首先要获得关机的权限,不然你只能做到注销。
代码如下:
static HANDLE hToken;
static TOKEN_PRIVILEGES tp;
static LUID luid;
OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ;
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &luid );
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL );
然后就和98一样了。

BTW,哥们,你给的分少了点吧!
shilong 2003-04-25
  • 打赏
  • 举报
回复
InitiateSystemShutdown不支持95,98,ME
Archerkids 2003-04-25
  • 打赏
  • 举报
回复
用InitiateSystemShutdown实现??
Archerkids 2003-04-25
  • 打赏
  • 举报
回复
我的意思是想用SE_RAMOTE_SHUTDOWN_NAME不需要SOCKET即可以实现的!!再帮帮我吧多谢!!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧