Использование 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 ответов

Другие вопросы по тегам