使用SetForegroundWindow聚焦于窗口

时间:2015-02-19 06:12:55

标签: c# winapi setforegroundwindow

        var hwnd = GetWindowHandle(); //Custom function that returns the target window's handle
        var currentThreadId = GetCurrentThreadId();
        uint pid;
        var targetThreadId = GetWindowThreadProcessId(hwnd, out pid);
        if (targetThreadId == IntPtr.Zero) return;
        if (targetThreadId != currentThreadId)
        {
            AttachThreadInput(currentThreadId, targetThreadId, true);
        }
        SetForegroundWindow(hwnd);
        if (currentThreadId != targetThreadId)
        {
            AttachThreadInput(currentThreadId, targetThreadId, false);
        }

我使用上面的代码将焦点放到另一个窗口,使用目标窗口的句柄。上面的代码放在一个方法中,当按下快捷键时调用该方法。 我面临的问题是,焦点第一次被困在窗口,即焦点没有转移到窗口中的其他控件(按下按钮)。所以我必须使用鼠标将焦点放在窗口内。在第二次按下快捷键时,焦点不再卡住,它在标签按下时正确移动。 另请注意,我尝试过使用SetFocus,但我遇到了同样的问题。

请注意代码有什么问题,或者我是否可以使用任何替代方法来实现相同的行为。感谢。

0 个答案:

没有答案