获取屏幕某个坐标的像素本不难,
类似
HDC hDC = CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
COLORREF clr = ::GetPixel(hDC, x, y);
这样就可以。
可是如何获取这x和y的值却难倒我了。。。
怎么样获取鼠标的当前屏幕位置?
我也尝试过用HOOK来做,
可是写了个简单的是有时候有效有时候无效,
我的HOOK段大致如下:
#pragma data_seg("my_data")
HHOOK hHook = NULL;
HWND hMainWnd = NULL;
HDC hDC = CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
CPoint pt;
COLORREF clr;
#pragma data_seg()
#pragma comment(linker, "/SECTION:my_data,RWS")
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
hMainWnd = FindWindow(NULL, "拾色器");
if(hMainWnd==NULL)
::MessageBox(NULL, "NULL", 0, 0);
MOUSEHOOKSTRUCT *mht = (MOUSEHOOKSTRUCT*)lParam;
clr = ::GetPixel(hDC, mht->pt.x, mht->pt.y);
int nRed = GetRValue(clr);
int nGreen = GetGValue(clr);
int nBlue = GetBValue(clr);
// char ch[20];
// sprintf(ch, "r=%d, g=%d, b=%d",nRed,nGreen,nBlue);
// TRACE0(ch);
// ::MessageBox(NULL, ch, 0, 0);
SetDlgItemInt(hMainWnd, IDC_RED, nRed, FALSE);
SetDlgItemInt(hMainWnd, IDC_GREEN, nGreen, FALSE);
SetDlgItemInt(hMainWnd, IDC_BLUE, nBlue, FALSE);
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
HHOOK InstallMyHook()
{
hHook = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle(NULL), NULL);
return hHook;
}
void UninstallMyHook()
{
::ReleaseDC(NULL, hDC);
::UnhookWindowsHookEx(hHook);
}
不用HOOK能做吗?如果能,怎么做?
如果非得用HOOK,那么我的应该怎么改?为什么会有时候无效?