C# 从控制台进程设置前台 window

C# set foreground window from Console process

这是用于生成 notepad.exewinword.exewinver.exe 等进程的 C# xUnit 测试项目。我需要在这些应用程序之间切换以进行测试(将它们设为前台 window)。

到目前为止,我已经从 user32.dll 尝试了 SetForegroundWindowSwitchToThisWindowSetActiveSetFocus 等,但均无效。我试过使用 AttachThreadInput 技巧,但它似乎不起作用(也许我做错了?毕竟我是从控制台应用程序使用它的)。我也试过 press alt then switch 方法,但我不想这样做(记事本吃 alt)。

我还没有解决这个问题,但我刚刚结束使用我自己的应用程序来测试不吃掉 alt 密钥。这是 window 切换代码,供参考(它在 F# 中使用 Vanara 库,但您可以更改一些内容以使其可用于 C#)。

let hwnd = mainWindowHWND
let keyState = Array.create 256 0uy

if User32.GetKeyboardState(keyState) && ((keyState.[VK_MENU |> int] &&& state) = 0uy) then
    User32.keybd_event(VK_MENU, 0uy, User32.KEYEVENTF.KEYEVENTF_EXTENDEDKEY, unativeint 0)

User32.SetForegroundWindow(hwnd()) |> ignore

if User32.GetKeyboardState(keyState) && ((keyState.[VK_MENU |> int] &&& state) = 0uy) then
    User32.keybd_event(VK_MENU, 0uy, User32.KEYEVENTF.KEYEVENTF_EXTENDEDKEY ||| User32.KEYEVENTF.KEYEVENTF_KEYUP, unativeint 0)