向winlogon.exe注入远程线程,实现截屏,该如何解决
向winlogon.exe注入远程线程,实现截屏
我向 winlogon.exe 注入了一个远程线程,用来截屏,可截取到的屏幕如下,一片漆黑。
当我改向explorer.exe、calc.exe注入时,可正确截取屏幕。
这是为什么呢?
还有当我按下WinKey+L锁屏,来到如下界面时,也可正确截得屏幕。
截得屏幕如下:
截屏代码如下:
开发工具是VS2005。
------解决方案--------------------
创建的线程首先OpenInputDesktop+SetThreadDesktop
我向 winlogon.exe 注入了一个远程线程,用来截屏,可截取到的屏幕如下,一片漆黑。
当我改向explorer.exe、calc.exe注入时,可正确截取屏幕。
这是为什么呢?
还有当我按下WinKey+L锁屏,来到如下界面时,也可正确截得屏幕。
截得屏幕如下:
截屏代码如下:
开发工具是VS2005。
- C/C++ code
bool CutScreen() { //----------------------------------------- // 获取目标设备描述表指针 CWindowDC *pDC=NULL; pDC=new CWindowDC(CWnd::GetDesktopWindow()); // 创建内存设备描述表 CDC memDC; memDC.CreateCompatibleDC(pDC); // 桌面大小 CRect rect; GetWindowRect(GetDesktopWindow(),&rect); // 位图 CBitmap Bitmap,*pOldBitmap; Bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()); // 创建与目标设备描述表兼容的位图 pOldBitmap=memDC.SelectObject(&Bitmap); memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY); memDC.SelectObject(pOldBitmap); // 使用CImage类保存图片 CImage img; img.Attach(Bitmap); img.Save("C:\\1.jpg"); // 扫尾工作 Bitmap.DeleteObject(); pOldBitmap->DeleteObject(); pDC->DeleteDC(); memDC.DeleteDC(); return true; }
------解决方案--------------------
创建的线程首先OpenInputDesktop+SetThreadDesktop