0
        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,但遇到了同样的问题。

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

4

0 回答 0