Использование 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, но у меня та же проблема.
Пожалуйста, предположите, что с кодом что-то не так, или я могу использовать любой альтернативный метод для достижения того же поведения. Благодарю.