我有一个.exe windows桌面应用程序(WinForm),但我无法访问该.exe文件的代码。我想对已经在应用程序中呈现的.exe控件进行双击事件。
由于我没有这方面的代码所以我开始采用以下方法来做到这一点。
当在桌面上生成任何双击事件时,我会检查我的.exe是否正在运行。
Process.GetProcesByName(“我的exe名称”);
因此,如果我的.exe正在运行,那么我就会做我的业务逻辑。
问题: - 当我的.exe刚刚运行但不在前台时,我不想调用业务逻辑。它应该在前台,然后我必须调用我的业务逻辑。
所以在这里,我希望通过我的C#代码告诉我.exe是否在前台或不在前面。
如果方法本身不正确,请告诉我其他方法。
答案 0 :(得分:0)
是的,最后这是正常工作的代码。
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
private string GetActiveWindowTitle()
{
const int nChars = 256;
StringBuilder Buff = new StringBuilder(nChars);
IntPtr handle = GetForegroundWindow();
if (GetWindowText(handle, Buff, nChars) > 0)
{
return Buff.ToString();
}
return null;
}
然后在我的全局钩子事件中,
private void HookManager_MouseDoubleClick(object sender, MouseEventArgs e)
{
string activeWindow = this.GetActiveWindowTitle();
if (activeWindow.ToLower().Contains("my .exe name") && e.X >= 64 && e.X <= 86 && e.Y >= 32 && e.Y <= 54)
CallChildProcess();
}
请参阅以下链接了解全局挂钩事件。