
在评论中,有人说您可以使用“ WindowFromPoint”实现此功能,因此可以使用以下代码。

// SpyDemo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
int main()
{
BOOL ret;
UINT count;
/*
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
*/
POINT point;
TCHAR pszFileName[MAX_PATH];
TCHAR lpClassName[MAX_PATH];
TCHAR windowText[MAX_PATH];
while(true) {
ret = GetCursorPos(&point);
if (!ret) {
printf("GetCursorPos -> fail(%ld)\n", GetLastError());
} else {
printf("GetCursorPos -> (%ld, %ld)\n", point.x, point.y);
HWND hwnd = WindowFromPoint(point);
if (hwnd == NULL || hwnd == INVALID_HANDLE_VALUE) {
printf("WindowFromPoint point=(%ld, %ld) -> hwnd=%p -> fail(%ld)\n", point.x, point.y, hwnd, GetLastError());
}
else {
printf("WindowFromPoint -> hwnd=%p\n", hwnd);
/*
检索与指定的窗口句柄关联的模块的完整路径和文件名称
WINUSERAPI UINT WINAPI GetWindowModuleFileNameW(
_In_ HWND hwnd,
_Out_writes_to_(cchFileNameMax, return) LPWSTR pszFileName,
_In_ UINT cchFileNameMax
);
返回值是复制到缓冲区的字符总数。
*/
count = GetWindowModuleFileName(hwnd, pszFileName, MAX_PATH);
_tprintf(_T("GetWindowModuleFileName hwnd=%p -> count=%d, fileName=%s\n"), hwnd, count, pszFileName);
/*
WINUSERAPI int WINAPI GetClassName(
_In_ HWND hWnd,
_Out_writes_to_(nMaxCount, return) LPTSTR lpClassName,
_In_ int nMaxCount
);
*/
count = GetClassName(hwnd, lpClassName, MAX_PATH);
_tprintf(_T("GetClassName hwnd=%p -> count=%d, lpClassName=%s\n"), hwnd, count, lpClassName);
count = GetWindowText(hwnd, windowText, MAX_PATH);
_tprintf(_T("GetWindowText hwnd=%p -> count=%d, lpClassName=%s\n"), hwnd, count, windowText);
}
//Screen(屏幕坐标)到Client(客户区坐标)的转换。
ret = ScreenToClient(hwnd, &point);
if (!ret) {
printf("ScreenToClient hwnd=%p -> fail(%ld)\n", hwnd, GetLastError());
}
else {
printf("ScreenToClient hwnd=%p -> point=(%ld, %ld)\n", hwnd, point.x, point.y);
//返回父窗口中包含了指定点的第一个子窗口的句柄
HWND childHwnd = ChildWindowFromPoint(hwnd, point);
printf("ChildWindowFromPoint hwnd=%p, point=(%ld, %ld) -> childHwnd=%p\n", hwnd, point.x, point.y, childHwnd);
count = GetClassName(hwnd, lpClassName, MAX_PATH);
_tprintf(_T("GetClassName hwnd=%p -> count=%d, lpClassName=%s\n"), hwnd, count, lpClassName);
count = GetWindowText(hwnd, windowText, MAX_PATH);
_tprintf(_T("GetWindowText hwnd=%p -> count=%d, lpClassName=%s\n"), hwnd, count, windowText);
}
}
Sleep(5000);
}
return 0;
}但是有一个问题:
为什么每次GetWindowModuleFileName的句柄都不同,但是每次获取的模块文件的路径都与当前路径相同。
我希望一位伟大的上帝可以帮助我回答。我很感激。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-334616-2.html
舍己为人的精神值得全世界学习
明天我就叫几个兄弟去你家提亲
因为去不了
万儿八千一年多了几块钱