Есть ли способ переключения с одного приложения на другое в C #? - PullRequest
1 голос
/ 06 августа 2011

Привет У меня есть новый вопрос для всех коллег-программистов. Есть ли способ, которым я могу нажать кнопку или включить таймер, который вызовет событие, которое заставит мое приложение переключаться с одного приложения на другое? например, допустим, я хочу создать приложение, которое при нажатии кнопки переключится с текущего приложения на другое приложение, которое работает как блокнот, игра или что-то еще.

Если есть способ открыть конкретное приложение по его имени, было бы здорово, спасибо.

PS: я уже знаю, как кодировать таймер, чтобы вам не приходилось его публиковать, если вы этого не хотите.

Ответы [ 2 ]

3 голосов
/ 06 августа 2011

Используя две функции WinAPI FindWindow и SetFocus, вы можете достичь желаемой цели:

[DllImport("user32.dll")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
static extern IntPtr SetFocus(IntPtr hWnd);

Например, чтобы установить окно блокнота с заголовком "" на передний план, вы можете использовать следующий код:

SetFocus(FindWindow("Notepad", "Untitled - Notepad"));

Если вы не знаете имя формы, вы можете перечислить окна, используя другие функции WinAPI.


В качестве альтернативы вы можете использовать метод Interaction.AppActivate() из Microsoft.VisualBasic.dll, находящийся в пространстве имен Microsoft.VisualBasic, если вы ссылаетесь на него.

Просто позвоните Interaction.AppActivate("window title") или Interaction.AppActivate(iPID).

Соответствующую документацию для этого метода можно найти здесь .

0 голосов
/ 06 августа 2011

Вы можете использовать Pinvoke для вызова функции SetFocus, которая берет WindowHandle и устанавливает фокус клавиатуры на этот экран.

http://msdn.microsoft.com/en-us/library/ms646312(v=vs.85).aspx

http://www.pinvoke.net для получения дополнительной информации окак использовать Pinvoke.

http://support.microsoft.com/kb/147659: Хорошая статья, если вы не уверены в заголовке окна (если вы это сделаете, вы можете просто получить все дескрипторы окна и затем использовать GetWindowName (), чтобы получить имя окна и проверить, является ли оно тем, которое вам нужно, GetWindowName также берет дескриптор окна)

...