屏幕窗口句柄是指什么?
了解什么是句柄就好理解了
就是获得这个窗口的识别代码
句柄就是用来区分各种内存对象的唯一标识符号,是个32位整数。
有些是整个系统唯一(如窗口句柄),有些是当前进程或线程中唯一
(如线程句柄,全局的有另一个标识符)。
详细的可分为许多种,都是以H开头的。在VB中使用时全部都用Long。
常见的有窗口句柄(HWND),设备描述表句柄(HDC),内存句柄(HMEM),
文件句柄,进程句柄,线程句柄,笔的类型句柄(HPEN),字体句柄(HFONT),
区域句柄(HRGN)等等。
在申请句柄时是要占用资源的,分三类SYSTEM、USER、GDI。
而WINDOWS的资源是固定的,并不随内存的扩大而扩大,所以使用完以后一定要释
放。
>
如果只用VB本身的代码一般是不会用到句柄的,但要是使用API函数的话,
大多数会使用。
再Windows系统中,句柄(我一直觉得这个词翻译得特别别扭)分为三大类:Kernel
Handle、UserHandle和应用程序自定义的Handle。
KernelHandle实际上是进程内Kernel对象的指针表索引,Kernel对象包括进程、文
件、信号等。但是MS为了掩盖着一事实,在系统启动时生成了一个所谓Obsfucator的值
(其实应该是Obfuscator,MicrosoftBugs(R):),生成Handle后将Handle与这个值异
或后返回给应用程序,所以看到的Handle都是一些很大而且毫无意义的数字。这些
Handle和索引的对象是由KRNL32.DLL和VMM32.VXD共同管理的,所以称之为Kernel
Handle。
UserHandle是用来标示窗口、DC等对象的,他们是真实的指针,但指向的并不是对象
的开头,有一个偏移量。同样,这些对象是由USER32.DLL管理的。
第三种Handle不过是应用程序自定义的一些索引之类的东东,具体的意义和应用程序相关
如何获取控制台窗口句柄
1.调用 GetConsoleTitle() 来保存当前的控制台窗口标题。
2.调用 SetConsoleTitle() 来将控制台标题更改为一个唯一的标题。
3.调用 Sleep(40),以确保已更新窗口标题。
4.调用 FindWindow(NULL, uniquetitle),以获取 HWND,此调用将返回 HWND, 如果操作失败,将返回 NULL。
5.从步骤 1 中,若要恢复原始窗口标题检索调用 SetConsoleTitle() 的值。
应该测试结果的 HWND。例如可以测试是否返回的 HWND 对应于当前进程在 HWND 上调用 GetWindowText() 并将结果与 GetConsoleTitle() 进行比较。
示例代码
下面的函数中检索当前控制台应用程序窗口句柄 (HWND)。如果此函数成功,则返回值是控制台窗口的句柄。如果此函数失败,则返回值为 NULL。省略一些错误检查,为简洁起见。
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles.
HWND hwndFound; // This is what is returned to the caller.
char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle.
char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle.
// Fetch current window title.
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Format a "unique" NewWindowTitle.
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// Change current window title.
SetConsoleTitle(pszNewWindowTitle);
// Ensure window title has been updated.
Sleep(40);
// Look for NewWindowTitle.
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Restore original window title.
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
50分如何获取桌面所有窗口的句柄
#include
#include
using namespace std;
//用于EnumWindows的回调函数
BOOL CALLBACK EnumProc(HWND hwnd,LPARAM lparam)
{
vector
pvec->push_back(hwnd);
return TRUE;
}
void main()
{
vector
EnumWindows(EnumProc,(LPARAM)&vec);
}
这个是win32控制台程序项目里写的,如果要在MFC下的话,只需包含
#include
EnumProc定义在前面,按钮响应函数里添加main函数里的那两句就可以了。
我这里测试获取到了407个句柄
以上是屏幕窗口句柄是指什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

数据恢复始终是一个加热的话题。要成功地从设备恢复数据,您应该知道它如何存储数据。您可以从此PHP.CN帖子中学习RAID恢复和硬盘恢复之间的区别。

您会在打字时遇到单词文字消失吗?一些字母甚至段落可能会从您的文档中消失。怎么了?在PHP.CN网站的这篇文章中,我们将仔细研究自动删除文本问题的单词

当您尝试登录《守望先锋》 2时,您可能会收到LC-208错误消息,并防止您的游戏连接到游戏服务器。来自PHP.CN的这篇文章介绍了如何修复LC-208守望先锋错误。

通常,您可以从文件资源管理器快速访问和编辑Google Drive文件。但是,有时您可能会遇到“ Google Drive从File Explorer中消失”的问题。在这里,php.cn上的这篇文章告诉您如何让Google Drive显示我

为什么我的计算机在欢迎屏幕上这么长时间?如何修复Windows 7欢迎屏幕慢?如果您仍然在PC上运行Windows 7并遇到此问题,则您在正确的位置,并且将由PHP.CN提供多个解决方案。

是否要使用内置密码管理工具 - 凭据管理器来管理Web和应用程序的登录凭据?如何在Windows 11中打开凭据管理器?在这篇文章中,PHP.CN收集了多种访问该实用程序的方法,并让

Microsft Defender Antivirus具有称为周期性扫描的功能,当您在Windows 11/10设备上安装了另一个防病毒产品时,可以启用该功能。现在,PHP.CN的这篇文章教您如何在WI上启用/禁用定期扫描

您是否曾经遇到过“ Excel超链接不起作用”的问题?你知道如何处理吗?在PHP.CN的这篇文章中,您可以获得几种可行的解决方案,以摆脱此问题。您将知道专业的数据恢复工具T


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。