gpt4 book ai didi

c - Windows - 我们可以从鼠标点击 "clickable"中推断出什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:03 25 4
gpt4 key购买 nike

正如标题所暗示的,我在问通过点击屏幕我能找到什么。

更准确地说,可以点击一个精确的元素(它可以是用于在通用浏览器上打开新选项卡的 + 符号,或者 File 然后 Save as... Open Office 文档上的元素)被检测到并返回某种类型的已单击内容的字符串?

通过使用 Win32 API,我能够检测是否单击了鼠标左键:

for(character=1; character<=222; character++) {
if(GetAsyncKeyState(character) == -32767) {
...
switch(character) {
case VK_LBUTTON: ...; break;
...
}
}
}

当检测到点击时,我知道它被点击的位置(或者,至少,点击发生的窗口的名称):

    void whichWindow(FILE *f) {
HWND foreground = GetForegroundWindow();
char window_title[256];
if(foreground) {
GetWindowText(foreground, window_title, 256);
fputs(window_title, f);
getMenuFromWindow(f, foreground);
}
else fputs("Problem retrieving window's title name", f);
}

但是,我不知道点击了什么

你会发现获取鼠标点击的坐标对我来说毫无用处,除非我知道屏幕上所有可以点击的东西的坐标。

我检查了 WindowsUI Automation,但大部分是用 C# 编写的,对于我的豪 pig 来说,我更愿意留在 C 中。

很多人告诉我使用网络中的一个程序,但正如我所说,我更愿意只使用 C,而不包括一些外部库。

那么:有没有办法仅通过使用 Windows API 来查明我是在某些文本编辑器上单击了“新建文件”,还是在 VLC 上单击了“播放”?

最佳答案

您可以通过如下逻辑获取鼠标光标下(子)窗口的句柄、文本和类名:

HWND hWndF = GetForegroundWindow();
if (hWndF != NULL)
{ HWND hWndC;
TCHAR szClassName[64], szWindowText[256];
POINT pt;

GetClassName(hWndF, szClassName, _countof(szClassName)); // main window
GetWindowText(hWndF, szWindowText, _countof(szWindowText)); // main window

GetCursorPos(&pt); // in screen coordinates
ScreenToClient(hWndF, &pt); // in client coordinates of main window
hWndC = ChildWindowFromPointEx(hWndF, pt, CWP_ALL);
if (hWndC != NULL && hWndC != hWndF)
{ GetClassName(hWndC, szClassName, _countof(szClassName)); // child window
GetWindowText(hWndC, szWindowText, _countof(szWindowText)); // child window
}
}

关于c - Windows - 我们可以从鼠标点击 "clickable"中推断出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25367867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com