Windows2003的桌面交互问题 我的服务以System权限运行,在没有用户登录到系统之前,是捕捉不到桌面的。好像登录时的桌面,请教如何在用户登录之前,也能捕捉到当前显示的桌面?是不是在用户断开连接,或没有登录到系统上时,Winlogon.exe进程锁定了默认桌面所致?那么,此时我的服务切换到Winlogon桌面,能不能行呢?需要不需要什么特别的权限?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 准确的说,是“用户桌面”并不存在,而你所期望的是“用户桌面”,即登录用户的桌面。其实相关Windows的书当中都有介绍关于Windows程序当中用户桌面程序和服务程序的默认桌面的不同。“允许服务与桌面交互”仅仅只是做了一个强行的桌面绑定。 1. 在服务程序中, 可以通过挂接 ISensLogon 接口接收到用户桌面登陆的通知。2. 如果是使用远程桌卖弄访问的话, 加一个 /console参数才能使用默认桌面参考:http://www.codeproject.com/KB/system/SystemTrayIconInSvc.aspx 首先服务程序需设置与桌面交互式,在用户登录前系统处于Winlogon桌面,你需要切换到该桌面才能捕捉到桌面,用户登录后切换到用户桌面,此时你需重新切换到用户桌面才能捕捉. 回复五楼:在登录之前,切换到Winlogon桌面并成功捕获到了登录前的窗口。还有一个问题:我的服务程序如何能知道当前的活动桌面是不是已经切换了?如果获取当前的活动桌面的相关信息? BOOL IsDefaultDesktop(){ HDESK hdeskCurrent; hdeskCurrent = OpenInputDesktop(0, FALSE, DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP | GENERIC_WRITE); TCHAR name[100]; DWORD cbNeed; GetUserObjectInformation(hdeskCurrent,UOI_NAME,(PBYTE)name,sizeof(name),&cbNeed); CString str=name; str.TrimLeft();str.TrimRight();str.MakeLower(); if(str.Compare("winlogon") == 0) { CloseDesktop(hdeskCurrent); return FALSE; } else { CloseDesktop(hdeskCurrent); return TRUE; } return TRUE;} 关于m_hdcBottom=::CreateCompatibleDC(hDC);内存泄露的问题 关于键盘钩子,想请教大家 如何用HOOK实现禁用复制、粘贴 大家是如何做P2P文件传输的? 请问那种运行是根据负载自动创建线程的线程池有用吗?我觉得害处比较多 请问怎样读取DHCP服务器上的信息,如分配了那些IP等 qq数据库设计思想??? 如何在一个大工程的各个子工程之间快速切换(VC IDE) MFC数据库连接问题。急~~~ 如何将TCHAR字符串存储到UINT8类型的数组里? 界面上有一个图片,但是显示出来总是一个方框,很不好看,如何改 问一个关于工具条EnableButton的问题
还有一个问题:我的服务程序如何能知道当前的活动桌面是不是已经切换了?如果获取当前的活动桌面的相关信息?
BOOL IsDefaultDesktop()
{
HDESK hdeskCurrent;
hdeskCurrent = OpenInputDesktop(0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_WRITEOBJECTS |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
GENERIC_WRITE); TCHAR name[100];
DWORD cbNeed;
GetUserObjectInformation(hdeskCurrent,UOI_NAME,(PBYTE)name,sizeof(name),&cbNeed);
CString str=name;
str.TrimLeft();str.TrimRight();str.MakeLower();
if(str.Compare("winlogon") == 0)
{
CloseDesktop(hdeskCurrent);
return FALSE;
}
else
{
CloseDesktop(hdeskCurrent);
return TRUE;
}
return TRUE;
}