C#从控制台进程设置前台窗口



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

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

我还没有解决这个问题,但我只是使用自己的应用程序来测试不占用alt密钥的应用程序。这是窗口切换代码,供参考(它在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)

最新更新