(1) 通过Desktop DC, 然后BitBlt
点评: 通过这种方法抓取到的截图是当前桌面的所有窗口,包括其他当前打开显示的窗口 , 这不是我们所期望的。
另外我们也不可能在需要截图时最小化所有窗口, 截完了再还原。
(2)通过注册表获取桌面壁纸保存的地方
点评:获取到该壁纸, 没有图标和任务栏, 也不是我们所期望的。
(3)通过DWM特性来获取
点评: Vista后的Desktop Window Manager(DWM)特性,可以让我们通过DwmRegisterThumbnail,DwmUpdateThumbnailProperties等API实时显示某个窗口的截图。可惜获取到的内容只能显示在我们预定义的窗口里, 但是我们没法获取里面的内容。另外这个特性只有Vista之后才支持, XP系统怎么办?
(4)通过Magnification来获取
点评:我们可以通过系统的放大镜技术, 过滤掉盖在桌面上的其他窗口(
MagSetWindowFilterList
),然后通过
MagSetImageScalingCallback
拦截内容。该技术的问题一是过滤窗口的个数限制, 另外也只能适用于Vista之后。
(5)通过API Hook技术
点评:通过API Hook技术我们可以动态拦截桌面窗口DC的绘画动作,这样就可以拦截或是合成窗口内容了。但是一来这样做比较复杂, 稳定性也很难保证,另外也有杀鸡用牛刀的感觉。
(6)通过PrintWindow技术
点评:PrintWindow API内部通过WM_PRINTCLIENT和WM_PRINT来获取窗口截图, 这个API在XP时代工作的不是很好,但是在Vista之后已经比较稳定了。
我们最后选择通过PrintWindow API来获取桌面截图, 大概过程如下:
a. 获取桌面窗口(Program Manager)的内容
b. 获取TaskBar窗口的位置和内容
c. 把TaskBar窗口内容和桌面内容合成, 贴在正确的位置
这里说一下要注意的一些问题:
a . 注意窗口的层次
Aero模式下, Program Manager窗口只包含背景图片, 图标列表在WorkerW窗口下:
Basic模式下窗口内容都在Program Manager窗口下:
b. 注意多显示器的情况, 多显示器时除了主显示器,其他桌面是没有任务栏的
c. 注意任务栏的位置, 任务栏是可以Dock到任何地方并且可以隐藏的,不要hard code在下面了。
d. XP下对ProgramManager窗口调用PrintWindow会有刷新问题。一直没有好的解决方案, 所以对XP勉强采用第一种DC的方式了。
最近工作 中有个需求是抓取桌面截图, 这里的桌面是指点了“显示桌面”之后看到的桌面, 截图内容包括桌面背景和图标以及任务栏,如下图:注意需求是:即使当前其他窗口盖在我们的桌面上,我们要求抓取到的内容也是这些窗口背后的桌面。思考怎么样才能在程序运行时,动态抓取该截图?大概想了些方法:(1) 通过Desktop DC, 然后BitBlt点评: 通过这种方法抓取到的截图是当前桌面的所有窗口,包括其他当前打开显示的窗口 , 这不是我们所期望的。另外我们也不...
占用系统资源小,不卡机不影响系统正常使用。
安装使用专用皮肤包,界面更美观。
整合
桌面
快捷方式,无需手动设置,程序自动
获取
桌面
快捷方式收纳到程序,一站式管理
桌面
不再乱了。
精准
获取
全国天气预报,
桌面
显示关注天气方便快捷。
桌面
农历节气显示,节日节气再也不怕忘记。
梦的
桌面
功能
占用系统资源小,不卡机不影响系统正常使用。
安装使用专用皮肤包,界面更美观。
整合
桌面
快捷方式,无需手动设置,程序自动
获取
桌面
快捷方式收纳到程序,一站式管理
桌面
不再乱了。
精准
获取
全国天气预报,
桌面
显示关注天气方便快捷。
桌面
农历节气显示,节日节气再也不怕忘记。
梦的
桌面
v2.0.1.68 更新内容:
重新设计各个界面。
删除一些多余功能。
减少内存CUP占用。
梦的
桌面
截图
最近试过几套
截图
软件,发现其中有些无法实现对半透明窗口或主题的图片截取,包括早期版本的QQ
截图
工具也无法截取,于是打算写一个简单抓屏函数的来测试下,以下采用Win32 API方式编写:
HBITMAP CapScreen()
HDC hDispDC,hMemDC;
//
获取
屏幕DC
hDispDC = CreateDC("DISPLAY",NU
1.数字图片使用类似与动画的方式显示,每次显示的是数字的一部分,当动态显示的时候人眼是可以分辨出具体数字的。但是
截图
的话就只能截取一部分,参考:
cups.cs.cmu.edu/soups/2007/posters/p147_lim.pdf
2.屏蔽系统按键:Print Screen 和 Alt + Print Screen,主要原理是注册热键的方式,参考:
http://www.v
adb 是 Android 调试桥(Android Debug Bridge)的简称,是 Google Android 开发平台下的一款调试工具,可以通过 adb 命令和设备通信,并管理设备、安装应用程序、
获取
系统日志和其他操作。
获取
桌面
应用图标就是其中之一。
获取
桌面
应用图标需要通过以下步骤:
1. 连接 Android 设备。将 Android 设备通过 USB 连接到电脑上,开启设备的 USB 调试模式。
2. 打开终端或命令行窗口。在终端或命令行窗口中输入 adb 命令,并等待设备与 adb 连接成功。
3.
获取
应用包名和 Activity 名称。在终端或命令行窗口中输入 adb shell dumpsys activity activities 命令,并查找需要
获取
图标的应用包名和对应的 Activity 名称。
4.
获取
应用图标。在终端或命令行窗口中输入 adb shell am start -n "应用包名/Activity 名称" 命令,启动应用并
获取
应用图标。
5. 将应用图标导出。在终端或命令行窗口中输入 adb pull "/data/data/应用包名/cache/icon_cache" "本地文件路径" 命令,将应用图标导出到本地计算机。
以上就是通过 adb
获取
桌面
应用图标的步骤。需要注意的是,不同的应用可能会有不同的图标存放位置和命名方式,需要根据具体情况进行调整。如果
获取
失败,可以尝试重新连接设备或重启设备并重新尝试
获取
。