请问怎么写可以实现从“Winsta0\\Winlogon”互相转换“Winsta0\\Default”

xijhee 2005-12-26 11:35:38
nt service
请教高手
怎么写可以实现从“Winsta0\\Winlogon”互相转换“Winsta0\\Default”?

...全文
931 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
皮皮鲁 2005-12-27
  • 打赏
  • 举报
回复
报什么错
看看OpenDesktop是不是返回NULL,可能是权限不够
皮皮鲁 2005-12-27
  • 打赏
  • 举报
回复
HDESK hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
SwitchDesktop(hDesk);

HDESK hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
SwitchDesktop(hDesk);

你不会还要更详细吧?
xijhee 2005-12-27
  • 打赏
  • 举报
回复
请问 , 能说详细点吗?
xijhee 2005-12-27
  • 打赏
  • 举报
回复
不行呀,我人手从Winsta0\\Default转到Winsta0\\Winlogon登陆界面,程序就报错了.
void CNTServiceDlg::P_Switch_Desktop()
{
HDESK hDesk;
if(IsWSLocked()==FALSE)
{
hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
SwitchDesktop(hDesk);
}

if(IsWSLocked()==TRUE)
{
hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
SwitchDesktop(hDesk);
}
}
BOYGUARD110 2005-12-27
  • 打赏
  • 举报
回复
mark
皮皮鲁 2005-12-27
  • 打赏
  • 举报
回复
SetThreadDesktop

自己看MSDN吧,如果到了这个地步你还不会的话,我很怀疑你的学习能力
xijhee 2005-12-27
  • 打赏
  • 举报
回复
做的一个远程控制项目.
现在就是想“Winsta0\\Winlogon”和“Winsta0\\Default”都可以抓屏.
皮皮鲁 2005-12-27
  • 打赏
  • 举报
回复
你这个程序想完成什么功能?

if(IsWSLocked()==FALSE)//for Default
{
hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
//返回值 hDesk =124

bb=SwitchDesktop(hDesk);
//返回值 bb=TRUE
}

IsWSLocked返回false表明这当前已经是Default桌面,干嘛还要Swith到Default桌面?

if(IsWSLocked()==TRUE)//for Winlogon
{
hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
//返回值 hDesk =244 或 hDesk=248

bb=SwitchDesktop(hDesk);
//返回值 bb=TRUE
}
IsWSLocked返回TRUE表明当前桌面是WinLogon桌面或者屏保桌面,那么你这整段代码就是说如果发现是屏保桌面就切换到Winlogon桌面,如果是的话,需要这样写程序么?

总而言之,你这程序的逻辑很有问题
xijhee 2005-12-27
  • 打赏
  • 举报
回复
up
xijhee 2005-12-27
  • 打赏
  • 举报
回复
请指教,谢谢!!! 返回值如下:
void CNTServiceDlg::P_Switch_Desktop()
{
BOOL bb;
HDESK hDesk;
if(IsWSLocked()==FALSE)//for Default
{
hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
//返回值 hDesk =124

bb=SwitchDesktop(hDesk);
//返回值 bb=TRUE
}

if(IsWSLocked()==TRUE)//for Winlogon
{
hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
//返回值 hDesk =244 或 hDesk=248

bb=SwitchDesktop(hDesk);
//返回值 bb=TRUE
}
}


//////////////////
BOOL CNTServiceDlg::IsWSLocked()
{
//if (!IsWinNT())
// return false;

bool bLocked = false;


HDESK hDesk;
BOOL bRes;
DWORD dwLen;
char sName[200];

hDesk = OpenInputDesktop(0, FALSE, 0);

if (hDesk == NULL)
{
bLocked = true;
}
else
{
bRes = GetUserObjectInformation(hDesk, UOI_NAME, sName, sizeof(sName), &dwLen);

if (bRes)
sName[dwLen]='\0';
else
sName[0]='\0';

CloseDesktop(hDesk);

if (stricmp(sName,"Default") != 0)//sName!="Default" =="Winlogon"
bLocked = TRUE; // WS is locked or screen saver active
else
bLocked = FALSE;//sName=="Default"
P_WriteLog("sName=");
P_WriteLog(sName);
}

return bLocked;
}
皮皮鲁 2005-12-26
  • 打赏
  • 举报
回复
OpenDesktop

SwitchDesktop

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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