请问怎么写可以实现从“Winsta0\\Winlogon”互相转换“Winsta0\\Default” nt service请教高手怎么写可以实现从“Winsta0\\Winlogon”互相转换“Winsta0\\Default”? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HDESK hDesk = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);SwitchDesktop(hDesk);HDESK hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);SwitchDesktop(hDesk);你不会还要更详细吧? 不行呀,我人手从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); }} 报什么错看看OpenDesktop是不是返回NULL,可能是权限不够 请指教,谢谢!!! 返回值如下: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;} 你这个程序想完成什么功能?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桌面,如果是的话,需要这样写程序么?总而言之,你这程序的逻辑很有问题 做的一个远程控制项目.现在就是想“Winsta0\\Winlogon”和“Winsta0\\Default”都可以抓屏. SetThreadDesktop自己看MSDN吧,如果到了这个地步你还不会的话,我很怀疑你的学习能力 如何抢占带宽(原理和方法) C++ 输入异常怎么捕获 这种情况下大家一般怎么处理? 哪位前辈能介绍一下 JOBOBJECT_SECURITY_LIMIT_INFORMATION 的各个参数和作用 一个关于OUTLOOK的问题,救命啊~~ 请教一段代码中的几个问题? 怎样将long型或字符型转换成hwnd型? 基于对话框的网络聊天室? 深入浅出mfc中宏定义问题 ON——COMMAND 紧急求助,请各位大虾帮帮忙啊,拜托了! CDiolog类中哪个成员可以让对话框隐藏(在后台运行) 请教COM高手
SwitchDesktop(hDesk);HDESK hDesk = OpenDesktop("Winlogon",0,FALSE,MAXIMUM_ALLOWED);
SwitchDesktop(hDesk);你不会还要更详细吧?
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);
}
}
看看OpenDesktop是不是返回NULL,可能是权限不够
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;
}
{
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桌面,如果是的话,需要这样写程序么?总而言之,你这程序的逻辑很有问题
现在就是想“Winsta0\\Winlogon”和“Winsta0\\Default”都可以抓屏.