delphi 如何检测Windows开始(Orb)按钮是否被单击?

ss2ws0br  于 2023-06-05  发布在  Windows
关注(0)|答案(1)|浏览(170)

在 Delphi 中,是否有可能检测到用户何时单击Windows的“开始”按钮(左下角的按钮,弹出菜单)?
我试着创建自己的开始菜单,所以当点击开始按钮时,它会显示我的菜单,而不是Windows的菜单。
我的概念是,当Windows启动时,我的应用程序将在系统托盘中自动运行,并检测用户何时单击开始按钮,然后显示我的菜单。
我看到一个类似的问题,但在C#中:How to detect when the Windows start menu / start screen opens?,但如何在 Delphi 中做到这一点?

5rgfhyps

5rgfhyps1#

使用鼠标钩子找到解决方案.. 1、获取开始按钮的大小和位置

_handle := FindWindow('Shell_TrayWnd', nil);
_Start.Handle := FindWindowEx(_handle, 0, 'Start', nil);
GetWindowRect(_Start.Handle, _Start.Rect);

然后使用mousehook检查鼠标指针是否点击开始按钮:

if (ms.X >= Start.Rect.Left)
and (ms.X <= Start.Rect.Right)
and (ms.Y >= Start.Rect.Top)
and (ms.Y <= Start.Rect.Bottom) then dowhatiwant ......

无论任务栏位置在左、下、右还是上,它总是会找到开始按钮的位置。

相关问题