如何将单击事件附加到.exe文件控件?

时间:2016-08-19 08:15:24

标签: c# events process

我有一个.exe windows桌面应用程序(WinForm),但我无法访问该.exe文件的代码。我想对已经在应用程序中呈现的.exe控件进行双击事件。

由于我没有这方面的代码所以我开始采用以下方法来做到这一点。

  1. 我有一个C#程序,它在后台运行并捕获所有双击事件(使用Hook概念)。
  2. 当在桌面上生成任何双击事件时,我会检查我的.exe是否正在运行。

    Process.GetProcesByName(“我的exe名称”);

  3. 因此,如果我的.exe正在运行,那么我就会做我的业务逻辑。

    问题: - 当我的.exe刚刚运行但不在前台时,我不想调用业务逻辑。它应该在前台,然后我必须调用我的业务逻辑。

    所以在这里,我希望通过我的C#代码告诉我.exe是否在前台或不在前面。

    如果方法本身不正确,请告诉我其他方法。

1 个答案:

答案 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();                       
    }

请参阅以下链接了解全局挂钩事件。

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C?msg=5288013#xx5288013xx