Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在系统托盘中找到图标的位置_C#_Winforms_Visual Studio 2008_Notifyicon - Fatal编程技术网

C# 如何在系统托盘中找到图标的位置

C# 如何在系统托盘中找到图标的位置,c#,winforms,visual-studio-2008,notifyicon,C#,Winforms,Visual Studio 2008,Notifyicon,我有一个NotifyIcon控件出现在系统托盘中。如何在屏幕上找到图标的位置(x,y) 谢谢你不能。获取系统托盘的窗口句柄并不困难,GetClassName()返回“ToolbarWindow32”,这是标准工具栏公共控件的类名。请注意,64位操作系统有两个。然后你可以像TB_GETBUTTONINFO一样向它发送消息。主要的问题是,你不知道该选择什么按钮ID,返回的信息不包括按钮位置 更好的是,按钮在移动时,您无法锁定它们。实际上,您可以做到这一点,下面的代码向您展示了如何操作以及更多操作 在

我有一个NotifyIcon控件出现在系统托盘中。如何在屏幕上找到图标的位置(x,y)


谢谢

你不能。获取系统托盘的窗口句柄并不困难,GetClassName()返回“ToolbarWindow32”,这是标准工具栏公共控件的类名。请注意,64位操作系统有两个。然后你可以像TB_GETBUTTONINFO一样向它发送消息。主要的问题是,你不知道该选择什么按钮ID,返回的信息不包括按钮位置


更好的是,按钮在移动时,您无法锁定它们。

实际上,您可以做到这一点,下面的代码向您展示了如何操作以及更多操作

在NotifyIcon的任何鼠标事件中,只需查看Control.MousePosition,它包含鼠标的(x,y)。同样,可以使用这些(x,y)值将ContextMenu精确定位在表单/控件上单击表单/控件的位置

这两方面的一个很好的例子如下:


更多信息:

经过漫长的尝试和错误,以及我自己开发的notify图标定位器,我找到了一种找到最佳位置图标的方法,目前为止效果不错,直到我看到@zhwang的这个惊人的项目。这个项目有三种方法来定位通知图标,从不准确的(比如我自己的开发)到在Windows7API中使用新的。这是明确的答案。

显然是这样的。我知道在回答这个问题时它可能没有暴露出来,但它通过本机调用完成了任务,就像你说的那样,这在旧版本的windows上是不可能的。它还可以通过新的Windows7API实现这一点。“我认为你做不到”比“你做不到”是更好的答案——这有点牵强。感谢作者没有忽略我文章的最后一句话。他将代码放在不推荐使用的文件夹中,并使用诸如“ThehereBeDragons”之类的注释,这一点非常清楚。你可以忽略这个建议,你可以否决它,这不会使它无效。