C# 使用SetForegroundWindow聚焦窗口
我已经使用上面的代码使用目标窗口的句柄将焦点放在另一个窗口上。上面的代码放在一个方法中,该方法在按下快捷键时被调用。 我面临的问题是,焦点第一次卡在窗口上,即焦点没有转移到窗口中的其他控件(按tab键)。所以我必须用鼠标将焦点放在窗口内。第二次按快捷键时,焦点不再被卡住,按tab键时焦点移动正确。 另外请注意,我曾尝试使用SetFocus,但我也遇到了同样的问题C# 使用SetForegroundWindow聚焦窗口,c#,winapi,setforegroundwindow,C#,Winapi,Setforegroundwindow,我已经使用上面的代码使用目标窗口的句柄将焦点放在另一个窗口上。上面的代码放在一个方法中,该方法在按下快捷键时被调用。 我面临的问题是,焦点第一次卡在窗口上,即焦点没有转移到窗口中的其他控件(按tab键)。所以我必须用鼠标将焦点放在窗口内。第二次按快捷键时,焦点不再被卡住,按tab键时焦点移动正确。 另外请注意,我曾尝试使用SetFocus,但我也遇到了同样的问题 请说明代码有什么问题,或者我是否可以使用其他方法来实现相同的行为。谢谢。AttachThreadInput调用了什么?看看,它可能会给
请说明代码有什么问题,或者我是否可以使用其他方法来实现相同的行为。谢谢。AttachThreadInput调用了什么?看看,它可能会给你一些有用的提示。如果你不知道如何使用链锯,你可能不应该这样做。
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);
}