使用这个函数,
COLORREF GetPixel(
HDC hdc, // handle to DC
int nXPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);
可以调用之前调用GerCursorPos 来获取鼠标在屏幕上的位置,
如果仅仅是为了取色的话,桌面窗口的HDC的获取,调用GetDC(NULL)来获取到,(不知到delphi里NULL写成什么样子,写成 GetDC(0)也可以。)
在把GerCursorPos 获取的屏幕坐标也给传过去,GetPixel即可返回屏幕坐标的相应颜色值了。
COLORREF 是一个 DWORD 类型,自己分析高低为就可以知道RGB值了。
可以参考使用GetRValue,GetGValue,GetBValue 宏
钩子类型:WH_MOUSE_LL 这个是全局的 值为14; WH_MOUSE是局部的 值为7
数据结构:PMouseHookStruct
鼠标坐标保存在钩子函数的lParam参数中, 如下:
PMouseHookStruct(lParam)ptX
PMouseHookStruct(lParam)ptY
这个应该可以记录鼠标轨迹了。
如果要将即时的坐标值回传给调用钩子的exe程序, 那么重载WndProc方法, 这样的话需要在exe端自定义一个消息标示符, 在挂钩的时候传入, 在钩子程序SendMessage的时候把这个消息标示符一起发送到exe端, exe端判断Messagemsg是否等于自定义的消息标示符, 如果Ture则保存坐标inherited, 否则直接inherited。
你的意思是不是:只要鼠标动了,然后,窗体的坐标就是鼠标的坐标?也就是说,窗口跟着鼠标走?如果是那样的话,下面的这个程序就可以了……
procedure TForm1Timer1Timer(Sender: TObject);
var
P: TPoint;
begin
GetCursorPos(P);
form1Caption:= Format('X: %d, Y: %d',[PX, PY]);
form1left:=pX;
form1top:=pY;
form1Show;
end;
不是代码问题
是因为 SetCursorPos(x,y); 的x y是针对屏幕的坐标
你设置的坐标如果不是 你窗体的范围内
那就相当于 是你用鼠标点一下程序外面
就自动激活其他界面了 原本的窗体自然隐藏了
至于你的鼠标位置
可以用
var
P: TPoint;
begin
GetCursorPos(P); 获取
如果是想在panel 的onmousedown事件里 判断当前鼠标位置
那算法就是
var
x1,y1,i,j:integer; //
begin
i:= round((Form1Width-form1ClientWidth)/2); //边框
j:= (Form1Height-form1ClientHeight)-i; //标题栏高度
//showmessage(inttostr(form1ClientWidth-Form1Width));
x1:=Form1Left+Panel1Left+i+x;
y1:=Form1Top+Panel1Top+j+y; //控制鼠标
showmessage(inttostr(x1));
showmessage(inttostr(y1));
end;
var
x,y:integer; //
begin
x:=614;
y:=282; //控制鼠标
SetCursorPos(x,y); //
Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); //开始点击
Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0); //d出
end;
以上就是关于delphi如何获取鼠标当前位置颜色全部的内容,包括:delphi如何获取鼠标当前位置颜色、delphi 鼠标钩子记录鼠标运行轨迹、delphi 如果获得窗口坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)