C# установить приоритетное окно из процесса консоли - PullRequest
0 голосов
/ 01 мая 2020

Это для тестового проекта C# xUnit, который порождает такие процессы, как notepad.exe, winword.exe и winver.exe. Мне нужно переключаться между этими приложениями для теста (сделать их окном переднего плана).

До сих пор я пробовал SetForegroundWindow, SwitchToThisWindow, SetActive, SetFocus et c из user32.dll, который не работает. Я попытался использовать трюк AttachThreadInput, но, похоже, он не работает (может, я делаю это неправильно? Я все же использую его из консольного приложения). Я также пробовал press alt метод переключения затем, но я не хочу делать это таким образом (блокнот ест alt).

1 Ответ

0 голосов
/ 10 мая 2020

Я не решил проблему, но я просто использовал свои собственные приложения для тестирования, которые не используют клавишу 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...