C# 从控制台进程设置前台 window
C# set foreground window from Console process
这是用于生成 notepad.exe
、winword.exe
和 winver.exe
等进程的 C# xUnit 测试项目。我需要在这些应用程序之间切换以进行测试(将它们设为前台 window)。
到目前为止,我已经从 user32.dll
尝试了 SetForegroundWindow
、SwitchToThisWindow
、SetActive
、SetFocus
等,但均无效。我试过使用 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)
这是用于生成 notepad.exe
、winword.exe
和 winver.exe
等进程的 C# xUnit 测试项目。我需要在这些应用程序之间切换以进行测试(将它们设为前台 window)。
到目前为止,我已经从 user32.dll
尝试了 SetForegroundWindow
、SwitchToThisWindow
、SetActive
、SetFocus
等,但均无效。我试过使用 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)