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