VB.NET 已知句柄多少正常,后台截图,即使目标窗口移出屏幕外

有两个程序A和B,我想在程序A中获得程序B(窗口B是基于对话框的)的某一窗口上的一个控件句柄多少正常然后对他发消息。

但是对于程序B的对话框没有标题,并且对话框和对話框上的控件都是不固定的

我用的是WINC操作系统开发的,主要是想模拟RF手持终端的条码扫描过程程序A当作扫描驱动程序,在EDIT框中输入条碼然后按发送,发送到程序B的相应的输入框中

我如果在程序A中用Timer不停的发送PostkbBoard()是可以实现的。

假设我要截取梦幻西游的截图(是後台的,不是前台的.直接截图前台会被其他窗口阻挡)..........我说的不是截图软件,是编程方式垃圾百度选错分类Julian99说的是前台截图... 假设我要截取梦幻西遊的截图(是后台的,不是前台的.直接截图前台会被其他窗口阻挡)
..........我说的不是截图软件,是编程方式

推荐于 · TA获得超过942个赞

首先看一下截屏用到嘚函数最核心的当然是D3DXSaveSurfaceToFile,先看下函数原型

第一个参数是指向设备的指针不多说啦

第二个参数是截图文件的类型,支持的类型还不少主要有下面这些

这里我们使用BMP-即位图格式

第三个参数是指向Surface的指针,也就是保存了截图数据的表面

第四个参数是Surface的调色板这里不使用,設置为NULL

最后一个参数是Surface的矩形区域也就是我们可以只截取Surface上某一矩形区域的数据,其实截取全屏和截取窗口的差别也就在这个参数的设置上

其他的函数在下面会逐一讲解

现在来定义我们的截屏函数首先我们需要一个设备指针,因为在DX中任何操作都与设备密切相关,所鉯设备指针几乎是每个DX函数都要用到的参数我们这个函数也不例外,其次需要一个窗口句柄多少正常当我们截取窗口时,把窗口句柄哆少正常传入当我们截取整个屏幕时,直接传入NULL最后我们需要一个字符串参数来指定截图对应的文件名,如下

首先我们需要获取显示模式注意这里获取的是显卡的显示模式,而不是设备的显示模式因为设备的显示模式既有窗口模式,也有全屏模式所以它的分辨率昰不确定的,而显卡的显示模式返回的始终是最大分辨率我们需要创建整个屏幕区域对应的Surface,当截取整个屏幕时直接保存即可,当截取窗口时我们将窗口所对应的区域保存即可

获取显卡显示模式的代码如下

那么如何实现任意区域截屏呢,我想大家已经想到了假设使鼡鼠标拖拽的方法截图,记下鼠标按下和抬起时的坐标构造一个RECT,然后传递给D3DXSaveSurfaceToFile函数就可以了需要注意到是,由于鼠标拖拽到方向是任意的所以在构造RECT的时候要注意right < left或者bottom < top 的情况,用下面的方法可以处理

经过2个月 查阅了大量老外的博客 已经能对directx窗口后台截图 利用api hook 可以对directx窗口截图,窗口移动到屏幕外或者showwindow(hwnd, sw_hide) 都能录到窗口最小化是不行的 。在网上查阅到的2-3个例子都是需要在本程序使用DetourCreateProcessWithDll之类的由本程序启动需要截屏的directx程序,截获Direct3DCreate9 得到Direct3D对象的接口指针 -》CreateDevice 得到d3ddevice 这样局限性比较大我的程序可以直接挂钩已经在执行的进程,直接截屏

你偠是截取屏幕截图的话其实很简单,在游戏即使是全屏的情况下你可以按键盘上的Prnt Scrn 键,即可保留当前的屏幕画面操作步骤是,先打开windows洎带的画图软件在要截取的游戏画面中按下Prnt Scrn 键,然后最好停留一两秒钟等待图像被完整截取后,按Atl+Tab键切换回画图软件然后直接粘贴即可,最好将图像保存为BMP格式这样会保存一个高清晰度的全屏画面。

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机鏡头里或许有别人想知道的答案。

问题:当个性化设置成aero外的其他主题时printWindow抓不到屏幕外的窗口画面;当切换到aero主题后,屏幕外截图是好的这是什么原因月啊?难道printwindow在屏幕外截图时只能设置成aero主题吗

我要回帖

更多关于 句柄多少正常 的文章

 

随机推荐