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,但我遇到了同样的问题。
请注意代码有什么问题,或者我是否可以使用任何替代方法来实现相同的行为。感谢。