能力值:
( LV3,RANK:30 )
|
-
-
2 楼
捕捉屏幕,貌似这个 api 和架构无关吧
**********
看了楼下,问题都没写清楚,你在 ring0,要么和 ring3通信,要么自己读显存,剩下的都比这麻烦
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
按下键盘上的<PrintScreen>键,屏幕图像就会存到剪贴板上,打开操作系统自带的图画工具,把剪贴板上的图像粘贴出来,保存成图片文件就可以了。
|
能力值:
( LV4,RANK:40 )
|
-
-
4 楼
亲。。我说的编程呢,,如果用以前XP用的API,获取出来的是黑屏。
|
能力值:
( LV4,RANK:40 )
|
-
-
5 楼
我说编程呢,亲。这不是很麻烦呀。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
GDI的方法创建一个DC,把DC的数据保存成BMP就行了,WIN7上没问题,常规解决方法
|
能力值:
( LV9,RANK:780 )
|
-
-
7 楼
楼上正解
|
能力值:
( LV4,RANK:40 )
|
-
-
8 楼
大牛,你说的方法是可以,用GDI的方法,因为我的源码是写在DLL中的,做成服务,让系统运行的。。。win7 64位好像不行。xp可以,, win7 64直接用加载器加载DLl是可以的,但是服务就不行了。不知道哪的问题,
|
能力值:
( LV4,RANK:40 )
|
-
-
9 楼
求关注最新进展。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
你这是在干坏事啊。 把服务相关的这一小段代码发出来。 调试看看。
|
能力值:
( LV15,RANK:520 )
|
-
-
11 楼
void PScreen(IStream *fStream, UINT quality)
{
HDC hDCSrc = ::GetDC(NULL);
int nBitPerPixel = GetDeviceCaps(hDCSrc, BITSPIXEL);
int nWidth = GetDeviceCaps(hDCSrc, HORZRES);
int nHeight = GetDeviceCaps(hDCSrc, VERTRES);
CImage cImage;//使用CImage能省好多截图的代码
cImage.Create(nWidth, nHeight, nBitPerPixel);
BitBlt(cImage.GetDC(), 0, 0, nWidth, nHeight, hDCSrc, 0, 0, SRCCOPY);
ReleaseDC(NULL, hDCSrc);
cImage.ReleaseDC();//截图的代码到这里就结束了
COleStreamFile cImgStream;
cImgStream.CreateMemoryStream(NULL);
cImage.Save(cImgStream.GetStream(), Gdiplus::ImageFormatBMP);//将2进制数据写入流
Image image(cImgStream.GetStream());//从流创建Graphics::Image对象
cImgStream.Close();
CLSID encoderClsid;
GetEncoderClsid(L"image/jpeg", &encoderClsid);//获取编码CLSID
EncoderParameters encoderParameters;//下面这几样编码的参数我只知道一个.Value为压缩率,其他的不懂。
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &quality;
image.Save(fStream, &encoderClsid, &encoderParameters);//写入流
image.Save(L"C:\\图片.jpg", &encoderClsid, &encoderParameters); //也可直接写入图片文件
}
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
另外,你可以模拟键盘,发送printScreen 的键盘消息。。。 然后去把剪切板中的数据copy出来。
|
能力值:
( LV4,RANK:40 )
|
-
-
13 楼
这种方法不行,用户也有可能复制东西,,
|
能力值:
( LV4,RANK:40 )
|
-
-
14 楼
亲。。win7 64位,,你确定你的代码可以么。
|
能力值:
( LV4,RANK:40 )
|
-
-
15 楼
大牛,忘了跟你说,我的代码是运行在服务里面的,session 0的,刚才在网上查了一下,桌面是运行在session1,这两个无法交互的。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
建议你翻翻gh0st 看看别人怎么做的。
void CScreenSpy::ScanScreen( HDC hdcDest, HDC hdcSrc, int nWidth, int nHeight)
{
UINT nJumpLine = 50;
UINT nJumpSleep = nJumpLine / 10; // 扫描间隔
// 扫描屏幕
for (int i = 0, nToJump = 0; i < nHeight; i += nToJump)
{
int nOther = nHeight - i;
if (nOther > nJumpLine)
nToJump = nJumpLine;
else
nToJump = nOther;
BitBlt(hdcDest, 0, i, nWidth, nToJump, hdcSrc, 0, i, m_dwBitBltRop);
Sleep(nJumpSleep);
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
设置允许服务与桌面交互
|
能力值:
( LV9,RANK:260 )
|
-
-
18 楼
在服务里面设置session
dwSessionId = WTSGetActiveConsoleSessionId();
SetTokenInformation(hToken, TokenSessionId, &dwSessionId, sizeof(DWORD));
|
能力值:
( LV4,RANK:40 )
|
-
-
19 楼
我已经试过gh0st了。很多个版本不可以,,有的版本可以,可以的版本我还没有拿到源码,如果用hdc的,那肯定是不可以的,gh0st都在service中运行。是获取不到桌面hdc的。
|
能力值:
( LV4,RANK:40 )
|
-
-
20 楼
亲。我设置了也没用。
|
能力值:
( LV4,RANK:40 )
|
-
-
21 楼
1、hToken是从哪个函数得到的呀。大牛。求详解。。。
2、在服务里设置是说在服务的源码里面设置么。还是?
|
|
|