点击鼠标时获取荧幕某点的坐标和颜色
点击鼠标时获取屏幕某点的坐标和颜色
程序运行时,先把本窗口最小化或隐藏,这时屏幕上显示的另外一个进程的窗口。我把鼠标移动到这个窗口的某个点上,点击鼠标左键,这时就获得这个点的坐标值和颜色值,返回并显示原窗口。
------解决思路----------------------
SetWindowsHookEx
------解决思路----------------------
根本不需要用构子。两三行代码搞定。
GetDC取得你的窗口DC,然后用GetPixel即可。
------解决思路----------------------
既然是其他进程的窗口,那一定要用钩子了,激活MouseDown,然后获取信息,Active之前的窗口。
下面是获取本进程的信息
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
dc: HDC;
s: string;
Color: Cardinal;
begin
dc := GetDC(Self.Handle);
try
Color := GetPixel(dc, x, y);
if Color = clr_invalid then Exit;
s := Format('X at:%d, Y at:%d, Color:%d', [x, y, Color]);
Application.MessageBox(PChar(s), 'Mouse Down Info', MB_ICONINFORMATION);
finally
ReleaseDC(Self.Handle, dc);
end;
end;
------解决思路----------------------
想得复杂了。
首先拷屏,然后在一个全屏幕的顶端窗口上用画布画出来,想怎样处理鼠标消息都是可以了。。。
程序运行时,先把本窗口最小化或隐藏,这时屏幕上显示的另外一个进程的窗口。我把鼠标移动到这个窗口的某个点上,点击鼠标左键,这时就获得这个点的坐标值和颜色值,返回并显示原窗口。
------解决思路----------------------
SetWindowsHookEx
------解决思路----------------------
根本不需要用构子。两三行代码搞定。
GetDC取得你的窗口DC,然后用GetPixel即可。
------解决思路----------------------
既然是其他进程的窗口,那一定要用钩子了,激活MouseDown,然后获取信息,Active之前的窗口。
下面是获取本进程的信息
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
dc: HDC;
s: string;
Color: Cardinal;
begin
dc := GetDC(Self.Handle);
try
Color := GetPixel(dc, x, y);
if Color = clr_invalid then Exit;
s := Format('X at:%d, Y at:%d, Color:%d', [x, y, Color]);
Application.MessageBox(PChar(s), 'Mouse Down Info', MB_ICONINFORMATION);
finally
ReleaseDC(Self.Handle, dc);
end;
end;
------解决思路----------------------
想得复杂了。
首先拷屏,然后在一个全屏幕的顶端窗口上用画布画出来,想怎样处理鼠标消息都是可以了。。。