-2

更新的完整代码

我正在尝试一个简单的代码示例,它返回聚焦窗口的窗口句柄,但似乎无法取回文本框中的值。

class ApplicationExecution
{
    public static bool MyWindow()
    {
        var activatedHandle = GetForegroundWindow();
        if (activatedHandle == IntPtr.Zero)
        {
            return false;       // No window is currently activated
        }

        var procId = Process.GetCurrentProcess().Id;
        int activeProcId;
        GetWindowThreadProcessId(activatedHandle, out activeProcId);


        return activeProcId == procId;
    }


    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    private static extern IntPtr GetForegroundWindow();

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern int GetWindowThreadProcessId(IntPtr handle, out int processId);

}

我试着像这样访问它

ApplicationExecution esma = new ApplicationExecution();
textbox1.text = esma;

 textBox1.Text = Convert.ToString(ApplicationsWPF.ApplicationExecution.MyWindow());

我得到真或假,而不是函数应该返回的 GetForegroundWindow 值

4

4 回答 4

4

您已定义MyWindowstatic方法,因此您需要通过类访问它:

textbox1.Text = ApplicationExecution.MyWindow().ToString();

请参阅静态(C# 参考)

于 2013-06-07T00:25:08.933 回答
2

要么使 MyWindow 非静态,并且:

textbox1.Text =esma.MyWindow();

或者:

textbox1.Text=ApplicationExecution.MyWindow();

但正如您现在所解释的,您需要带有窗口名称的字符串。

删除你的洞 MyWindow() 方法并将其替换为可以在此处接受的答案中找到的私有字符串 GetActiveWindowTitle() 方法

然后写:

textbox1.Text=esma.GetActiveWindowTitle();
于 2013-06-07T00:20:31.333 回答
1

因为您已将该方法标记为static. 您不需要创建实例。

textbox1.Text = ApplicationExecution.MyWindow().ToString();
于 2013-06-07T00:24:40.170 回答
0

鉴于对原始问题的更新,您只需将签名更改MyWindow为返回 anint然后返回 的值activeProcId

class ApplicationExecution
{
    public static int MyWindow()
    {
        ....

        return activeProcId;
    }

    ....
}

进行此更改后,您可能还想将该方法重命名为 MyProcessId 以清楚起见,但我知道您说过这只是您正在尝试的一个示例。

于 2013-06-07T00:41:34.063 回答