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

时间:2020-05-01 05:44:55

标签: c# testing winapi console xunit

这用于C#xUnit测试项目,该项目产生诸如notepad.exewinword.exewinver.exe之类的进程。我需要在这些应用程序之间切换以进行测试(将它们设置为前台窗口)。

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

1 个答案:

答案 0 :(得分:0)

我还没有解决问题,但是我最终使用自己的应用程序测试了是否吃了alt键。这是窗口切换代码,以供参考(使用Vanara库在F#中,但您可以更改一些内容以使其可用于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)