我不知道這是如何在C#中完成的,但你也已經標記了這個問題WinAPI,所以我可以在那裏幫助。在WinAPI的,這是可以做到像這樣:
#include <stdio.h>
#include <Windows.h>
#include <Psapi.h>
#pragma comment(lib, "Psapi.lib")
int main(void)
{
/* Hacky loop for proof of concept */
while(TRUE) {
Sleep(100);
if(GetAsyncKeyState(VK_F12)) {
break;
}
if(GetAsyncKeyState(VK_LBUTTON)) {
HWND hwndPt;
POINT pt;
if(!GetCursorPos(&pt)) {
wprintf(L"GetCursorPos failed with %d\n", GetLastError());
break;
}
if((hwndPt = WindowFromPoint(pt)) != NULL) {
DWORD dwPID;
HANDLE hProcess;
GetWindowThreadProcessId(hwndPt, &dwPID);
hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, dwPID);
if(hProcess == NULL) {
wprintf(L"OpenProcess failed with error: %d\n", GetLastError());
} else {
wchar_t lpFileName[MAX_PATH];
DWORD dwSize = _countof(lpFileName);
QueryFullProcessImageName(hProcess, 0, lpFileName, &dwSize);
wprintf(L"%s\n", lpFileName);
CloseHandle(hProcess);
}
}
}
}
return EXIT_SUCCESS;
}
結果舉例:
在這種情況下,我只是輪詢來獲取鼠標點擊。更正確的方法是使用某種窗口鉤子。
您可能需要捕獲鼠標才能夠在另一個窗口上接收點擊。 – 2012-04-25 15:27:50
@MartinLiversage:可以使用'GetAsyncKeyState'。 – 2012-04-25 15:38:33
我在獲取光標位置時遇到了一些問題。我打電話給GetCursorPos,但我得到的X座標類似於6,47208716579385E-312和Y座標爲0.發生了什麼事? – daliz 2012-04-25 15:44:56