2

我创建了一个 Windows 窗体应用程序。我想从另一个应用程序中获取该应用程序中的处理表单(当前表单)。因为(第一个)应用程序由多个表单组成,我想知道哪个表单正在处理/活动。

4

2 回答 2

0

使用其他应用程序?

那么app B必须访问app A的处理表单吗?在运行时,A 和 B 是不同的进程,不是吗?所以应用程序 A 应该公开一种可从应用程序 B 访问的侦听套接字和一个具有诸如GetCurrentForm(). 因此应用 B 可以向套接字发送请求并获取响应。我想出这样的事情。

参考:

于 2012-10-11T08:53:25.700 回答
0

GetForegroundWindow功能

检索前台窗口(用户当前正在使用的窗口)的句柄。

C#签名:

/// <summary>The GetForegroundWindow function returns a handle to the foreground window.</summary>
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

和来自 pinvoke 的示例代码:

public ApplicationState AppState
{
    get
    {
        Process[] processCollection = Process.GetProcessesByName(ProcessName);
        if(processCollection != null && processCollection.Length  >= 1 && 
            processCollection[0] != null)
        {
            IntPtr activeWindowHandle = Win32.GetForegroundWindow();
            //Optional int ProcessID;
            //Optional Win32.GetWindowThreadProcessId(GetForegroundWindow(),out ProcessID)
            foreach(Process wordProcess in processCollection)
            {
                //Optional if( ProcessID == wordProcess.Id ) return ApplicationState.Focused;
                if(wordProcess.MainWindowHandle == activeWindowHandle)
                {
                    return ApplicationState.Focused;
                }
            }
            return ApplicationState.Running;
        }
        return ApplicationState.NotRunning;
    }
} 
于 2012-10-11T09:37:18.983 回答