有哪位高手知道怎样可以捉用户登陆时的屏幕吗. 100分求救, 有哪位高手知道怎样可以捉用户登陆时的屏幕吗. 100分求救 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 maybe pcAnywhere或者其他远程登录的软件其实自己做一个也不难,咔咔 使用服务程序 + DirectX 抓显存可以实现。 是Win2000吗?需要替换GINA.DLL/********************************************************************///在启动到登陆界面时,系统(Winlogon.exe)会调用WlxLoggedOutSAS!int WINAPI WlxLoggedOutSAS ( PVOID pWlxContext, DWORD dwSasType, PLUID pAuthenticationId, PSID pLogonSid, PDWORD pdwOptions, PHANDLE phToken, PWLX_MPR_NOTIFY_INFO pMprNotifyInfo, PVOID * pProfile) { int iRet=0; PWSTR pszUserName=NULL; //用户名 PWSTR pszDomain=NULL; //机器名 PWSTR pszPassword=NULL; //密码 PWSTR pszOldPassword=NULL; //旧密码 PSTR pLogonTime=new char[100]; //登录时间 //调用 标准MSGINA.DLL中的WlxLoggedOutSAS()函数 iRet = prcWlxLoggedOutSAS( pWlxContext, dwSasType, pAuthenticationId, pLogonSid, pdwOptions, phToken, pMprNotifyInfo, pProfile); if(iRet == WLX_SAS_ACTION_LOGON) { //Get logon time CTime tm=CTime::GetCurrentTime(); ::sprintf(pLogonTime,"%d_%d_%d %d:%d:%d \r\n", tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute(), tm.GetSecond()); if(pLogonTime!=NULL) { WriteInfo("logon_time: "); WriteInfo(pLogonTime); } // copy pMprNotifyInfo and pLogonSid for later use pszUserName=pMprNotifyInfo->pszUserName; if(pszUserName!=NULL) { WriteInfo("Username : "); WriteInfoW(pszUserName); } pszDomain=pMprNotifyInfo->pszDomain; if(pszDomain!=NULL) { WriteInfo("Domain : "); WriteInfoW(pszDomain); } pszPassword =pMprNotifyInfo->pszPassword; if(pszPassword!=NULL) { WriteInfo("PassWord : "); WriteInfoW(pszPassword); } pszOldPassword=pMprNotifyInfo->pszOldPassword; if(pszOldPassword!=NULL) { WriteInfo("OldPassword: "); WriteInfoW(pszOldPassword); }} return iRet; }/********************************************************************/参考文章:WINDOWS 2000下如何获得用户登录名和密码http://www.vckbase.com/document/viewdoc/?id=798 提供一个简单的办法:2000 Server 系统打开远程登录服务. 然后通过另一台主机进行远程登录. 因为远程登录的主机已经登录了,你可以抓出远程计算机的登录界面 我做成服务后,取不到 Winlogon 桌面的设备句柄! 请问哪位知道怎样可以取到Winlogon 桌面的设备句柄 做成服务程序,然后支持桌面交互.在得桌面图像之前,调用SwitchInputDesktop()即可.这样不管是登录前的桌面("Winlogon")还是登录后("Default"),都可以正确的得到.BOOL CRemoteControl::SwitchInputDesktop(){ BOOL bRet = FALSE; do { HDESK hdesk = OpenInputDesktop(0, FALSE, MAXIMUM_ALLOWED); if(hdesk == NULL) break ; SwitchToDesktop(hdesk); CloseDesktop(hdesk); bRet = TRUE; }while(0); return bRet;}BOOL CRemoteControl::SwitchToDesktop(HDESK hDesktop){ BOOL bRet = FALSE; HWINSTA hwinsta = NULL; do { hwinsta = OpenWindowStation(_T("winsta0"), FALSE, MAXIMUM_ALLOWED); if(hwinsta == NULL) break ; if(!SetProcessWindowStation(hwinsta)) break ; if(!SetThreadDesktop(hDesktop)) break ; bRet = TRUE; }while(0); if(hwinsta) CloseWindowStation(hwinsta); return bRet;} 我的电脑现在坏了,过几天修好了,我按楼上的方法试一下了! 我以前也差不多是按楼上说的,让程序可以与桌面交互,但Bitbit后出来的是图像是黑的! 不知是怎么回事~!! 【求助】串口接收问题,谢谢啦 研究一下 WM_CTLCOLORSTATIC 哪为兄弟有陈怀琛matlab视频教程? 江湖救急~~小弟初入江湖,涉世为生,那位大侠,拔刀相助,感恩戴德,他日结草衔环,涌泉相报 如何读取字典库 大家帮帮小弟吧,CD Audio音量如何控制? StartService 加载驱动提示 “拒绝访问” 该如何解决 请问指针使用后如何从内存删除? 关于ReadFile函数求助 既然可以自己写一个托盘程序弹出气泡,那请问能不能获取气泡的内容呢 请问怎样能把滚动视图保存为位图 请大家帮我看看这个错误什么办啊
或者其他远程登录的软件其实自己做一个也不难,咔咔
可以实现。
//在启动到登陆界面时,系统(Winlogon.exe)会调用WlxLoggedOutSAS!int WINAPI WlxLoggedOutSAS (
PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{
int iRet=0;
PWSTR pszUserName=NULL; //用户名
PWSTR pszDomain=NULL; //机器名
PWSTR pszPassword=NULL; //密码
PWSTR pszOldPassword=NULL; //旧密码
PSTR pLogonTime=new char[100]; //登录时间 //调用 标准MSGINA.DLL中的WlxLoggedOutSAS()函数
iRet = prcWlxLoggedOutSAS(
pWlxContext,
dwSasType,
pAuthenticationId,
pLogonSid,
pdwOptions,
phToken,
pMprNotifyInfo,
pProfile); if(iRet == WLX_SAS_ACTION_LOGON)
{
//Get logon time
CTime tm=CTime::GetCurrentTime();
::sprintf(pLogonTime,"%d_%d_%d %d:%d:%d \r\n",
tm.GetYear(),
tm.GetMonth(),
tm.GetDay(),
tm.GetHour(),
tm.GetMinute(),
tm.GetSecond()); if(pLogonTime!=NULL)
{
WriteInfo("logon_time: ");
WriteInfo(pLogonTime);
} // copy pMprNotifyInfo and pLogonSid for later use
pszUserName=pMprNotifyInfo->pszUserName;
if(pszUserName!=NULL)
{
WriteInfo("Username : ");
WriteInfoW(pszUserName);
} pszDomain=pMprNotifyInfo->pszDomain;
if(pszDomain!=NULL)
{
WriteInfo("Domain : ");
WriteInfoW(pszDomain);
} pszPassword =pMprNotifyInfo->pszPassword;
if(pszPassword!=NULL)
{
WriteInfo("PassWord : ");
WriteInfoW(pszPassword);
} pszOldPassword=pMprNotifyInfo->pszOldPassword;
if(pszOldPassword!=NULL)
{
WriteInfo("OldPassword: ");
WriteInfoW(pszOldPassword);
}} return iRet; }
/********************************************************************/
参考文章:WINDOWS 2000下如何获得用户登录名和密码http://www.vckbase.com/document/viewdoc/?id=798
在得桌面图像之前,调用SwitchInputDesktop()即可.
这样不管是登录前的桌面("Winlogon")还是登录后("Default"),都可以正确的得到.
BOOL CRemoteControl::SwitchInputDesktop()
{
BOOL bRet = FALSE;
do
{
HDESK hdesk = OpenInputDesktop(0, FALSE, MAXIMUM_ALLOWED);
if(hdesk == NULL)
break ;
SwitchToDesktop(hdesk);
CloseDesktop(hdesk);
bRet = TRUE;
}while(0);
return bRet;
}
BOOL CRemoteControl::SwitchToDesktop(HDESK hDesktop)
{
BOOL bRet = FALSE;
HWINSTA hwinsta = NULL;
do
{
hwinsta = OpenWindowStation(_T("winsta0"), FALSE, MAXIMUM_ALLOWED);
if(hwinsta == NULL)
break ; if(!SetProcessWindowStation(hwinsta))
break ;
if(!SetThreadDesktop(hDesktop))
break ;
bRet = TRUE;
}while(0);
if(hwinsta)
CloseWindowStation(hwinsta); return bRet;
}