【发布时间】:2020-09-04 21:50:44
【问题描述】:
我有一个 winform 应用程序 (.NET C#)。 从这个应用程序中,我启动了另一个进程 (notepad.exe) 并将其停靠到我的窗口 - 类似于这里的操作:Docking Window inside another Window。
现在我的问题是,如何捕捉/处理在这个停靠的应用程序上发生的鼠标事件? 我试过的:
- 在停靠面板上创建一个透明面板。当我无法“通过”隐形面板单击(或执行其他任何操作)时,问题就出现了
- 全局鼠标钩子。我不喜欢这个解决方案,因为我只对表单中的鼠标位置感兴趣。另外,我需要鼠标相对于窗口的位置。
对于上下文,我想要实现的是在我的鼠标旁边有一个恒定的工具提示,通知我鼠标相对于面板的位置。见下面代码:
ToolTip trackTip;
public Form1
{
trackTip = new ToolTip();
transparentPanel1.MouseMove += new MouseEventHandler((object s, System.Windows.Forms.MouseEventArgs e) => trackTip.Hide(this));
transparentPanel1.MouseLeave += new EventHandler(TransparentPanel1_MouseLeave);
}
void TransparentPanel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
String tipText = String.Format("({0}, {1})", e.X, e.Y);
trackTip.Show(tipText, this, e.Location);
}
我找到了viable solution,但是我非常希望避免将代码注入到进程中,而且我觉得必须有更好的解决方案来解决我的具体问题。
如果您能给我任何建议,我将不胜感激。我是 .NET 编程新手。
【问题讨论】:
-
你为什么要这样做?似乎需要做很多工作才能取得真正实质性的成果。记事本是一个相当普通的应用程序
-
@MichaelRandall 我使用记事本只是为了启动和运行。在我的开发阶段运行什么 .exe 并不重要。
-
我认为您需要使用已建议的全局鼠标挂钩。我之所以这么说是因为 Windows API 可能不支持您想要获得的详细程度。例如广告鼠标相对于另一个窗口句柄的位置。您可以将全局鼠标位置与外部应用程序的窗口位置结合起来,一些基本的数学运算将为您提供相对坐标。即使有支持它的 Windows API。您可能会发现它仅在附加调试器或您的应用程序是最后一个活动应用程序时才有效。
标签: c# .net process mouseevent external