首页
社区
课程
招聘
[求助]搜索3天没有发现好的解决方案,一个非常棘手的问题
发表于: 2014-3-8 16:12 7351

[求助]搜索3天没有发现好的解决方案,一个非常棘手的问题

2014-3-8 16:12
7351
先给看帖的大大们行个礼。。

最近利用C#(只会C#)开发一个单机“监控”软件,监控的对象是游戏窗口,我一共开了10个游戏在挂机,但是我想看到每个游戏的画面,正常来说,游戏窗口都是叠起来的,没有办法同时看到所有画面,于是我想将游戏画面的图像转发到我的软件上来。

以上说明目的。以下说明测试情况

1:想利用DWM,做一个类似WIN7系统的任务栏缩略图,虽然已经实现,但是不能达到目的,因为系统必须开启AERO效果,开了这个效果尼玛真太卡了,完全没办法开10个游戏。开5个都卡爆了。 - 放弃

2:利用时时截图传输画面情况,尝试了目前网络上我看得懂的几个截图方案(不包括DX截图),均失效,不是只能截取最前端的画面,就是截取的画面是黑色的 - 放弃

3:利用SetParent将游戏窗口装载到我的软件里,这个可以达到时时监视的目的,但是有几个副作用,一个是游戏帧率变的非常低,游戏画面扭曲,游戏画面上每个点的坐标都发生改变,这样我的挂机软件完全没办法控制游戏。 - 放弃

目前就测试了以上三个方案,均未成功,现在请大大们指教一下,还有什么方案可以实现这个软件的功能呢?

要求就是:

1:游戏原始画面大小不改变,游戏流畅度保持正常

2:游戏画面能正常传输到我的软件上

跪求方法,!请各位赐教~

下面是一款类似软件的效果图




[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶啊求大神!!!
2014-3-9 10:16
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
就这样沉了~
2014-3-10 18:19
0
雪    币: 151
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
千万别沉 坐等大神
2014-3-10 19:10
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
又沉了~~~
2014-3-13 14:56
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
c#调用大漠插件,绑定后可以dx后台截图,截图到手你爱怎么弄怎么弄
2014-3-14 16:37
0
雪    币: 144
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
PrintWindow
2014-3-16 21:46
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
8
多开的游戏窗口,不是当前窗口视图的话,能够捕获到画面吗,不太清楚,帮顶下
2014-3-16 22:41
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
9
感觉有点扯啊,如果可以控制非激活窗口的话,不局限于游戏,假如你的QQ聊天窗口最小化状态,照这意思,就可以在毫不知情的情况下,在你的电脑上使用你的QQ跟别人聊天了
2014-3-16 22:47
0
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
可以. 比如 有些人做外挂.就用的这种 方式
2014-3-16 23:51
0
雪    币: 30
活跃值: (3385)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
使用截图,设置截图时间间隔灵活点
2014-3-17 00:16
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
12
外挂的话,肯定可以啊,他是分析了通信的协议,模拟用户操作,照你说的,你的监控软件也要分析出通信协议,然后根据你选择的窗口,切换到对应游戏进行交互
2014-3-17 10:11
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我印象中。 后台窗口是不处理绘制事件的。也就是说窗口根本就不显示的~ 。 所以你得自己分析协议来显示?
2014-3-17 10:18
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
14
procedure Test1(FD3DDevice: IDirect3DDevice9);stdcall;
var
  Scrf:IDirect3DSurface9;
  LOCKRECV:_D3DLOCKED_RECT;
  Myread:DWORD;
begin                                    //和其他读取显存的程序互拆
  FD3DDevice.GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, Scrf);
  if Scrf.LockRect(LOCKRECV,nil,D3DLOCK_READONLY)=0 then
  begin
    //显存大小为画面width*height*4=1024*768*4=3145728 因为是BGRA存储方式所以需要X4    //这样游戏显存就获取到memPic中了 然后把BGRA 转成RGB的 BMP的什么的
    ReadProcessMemory($FFFFFFFF,LOCKRECV.pBits,MemPic,3145728,Myread);            
  end;
  Scrf.UnlockRect;
end;

//------------------------------------------------------------------------------
function PresentCallback(const Self: IDirect3DDevice9;
   const SourceRect, DestRect: PRect; const DestWindowOverride: HWND;
   DirtyRegion: PRgnData): HResult; stdcall;
begin
   Test1(Self);
   Result :=TPresentNext(PresentNext)(Self, SourceRect, DestRect, DestWindowOverride, DirtyRegion);
end;

function CreateDeviceCallback(const Self: pointer; Adapter: longword;
  DeviceType: TD3DDevType; hFocusWindow: HWND; BehaviorFlags: DWord;
  pPresentationParameters: PD3DPresentParameters;
  out ppReturnedDeviceInterface: IDirect3DDevice9): HResult; stdcall;

begin

  Result := CreateDeviceNext(self, Adapter, DeviceType, hFocusWindow,
    BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
if (Result = 0) and (@PresentNext = nil) then
    hookcode(GetInterfaceMethod(ppReturnedDeviceInterface, 17),
      @PresentCallback, @PresentNext);

end;

function Direct3DCreate9CallBack(SDKVersion: cardinal): Pointer; stdcall;
begin

  Result := Direct3DCreate9next(SDKVersion);
  if not (Result = nil) and (@CreateDeviceNext = nil) then
    hookcode(GetPtrMethod(Result, 16), @CreateDeviceCallback,
      @CreateDeviceNext);
end;
Procedure InstallHook();
  begin
    hookapi('d3d9.dll','Direct3DCreate9',@Direct3DCreate9CallBack,@Direct3DCreate9Next);
  end;
end.
2014-3-18 09:06
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
说一点…dx最小化依然绘制内存表面
2014-3-19 12:43
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
租一台服务器 上面装几十个虚拟机
我看别人就是这样弄的
2014-3-21 01:52
0
游客
登录 | 注册 方可回帖
返回
//