2010-10-19 7 views
2

Я пытаюсь создать базовую систему записи/воспроизведения макросов. Если бы я хотел выбрать открытое приложение (например, блокнот), чтобы вывести его на передний план для ввода, как бы я мог его вызвать по имени или другому ссылочному атрибуту?C# Как открыть окно открытого приложения

ответ

6

Вот пример. В принципе, получить Process, а затем вызвать SetForegroundWindow на это MainWindowHandle:

using System; 
using System.Diagnostics; 
using System.Linq; 
using System.Runtime.InteropServices; 

namespace StackOverflow.Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var proc = Process.GetProcessesByName("notepad").FirstOrDefault(); 
      if (proc != null && proc.MainWindowHandle != IntPtr.Zero) 
        SetForegroundWindow(proc.MainWindowHandle); 
     } 

     [DllImport("user32")] 
     private static extern bool SetForegroundWindow(IntPtr hwnd); 
    } 
} 

Вы должны знать об ограничениях:

Система ограничивает какие процессы можно установить окно переднего плана. Процесс может установить окно переднего плана, только если один из следующих условий:

  • Процесс является основным процессом.
  • Процесс был начат процессом переднего плана.
  • Процесс получил последнее событие ввода.
  • Не существует процесса переднего плана.
  • Процесс переднего плана отлаживается.
  • Передний план не заблокирован (см. LockSetForegroundWindow).
  • Истек срок блокировки переднего плана (см. SPI_GETFOREGROUNDLOCKTIMEOUT в SystemParametersInfo).
  • Нет меню.
+0

Большое спасибо за ОЧЕНЬ подробно ответ. Я попытаюсь выполнить это немедленно. – ashurexm

+0

Это похоже на работу, но у меня есть своеобразная проблема. Я задал здесь новый вопрос: http://stackoverflow.com/questions/3973532 – ashurexm

0

Вы можете начать использовать с помощью Process.GetProcesses - это даст вам список всех запущенных процессов. Изучите различные свойства каждого процесса - это должно вас заставить.

+0

Проблема, с которой я столкнулся, заключается в том, как сделать это окно процесса активным. – ashurexm

0

Оформить заказ приложения с именем «Autohotkey», он делает все, что вам нужно, и экономит много времени на программирование, и это бесплатно.

Если AutoHotkey не решает свои проблемы или, если вы делаете это для целей обучения, кто-то спросил «совершенно новый» приложение, и т.д., есть некоторые ссылки, которые могут быть полезны:

Bringing Window to the Front in C# using Win32 API http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/92823775-29f6-4950-bf06-d2f1ca89ec8d (он говорит «мобильные окна», но все равно может быть полезно)

Надеюсь, это поможет.

+0

Я действительно посмотрел на autohotkey. Это определенно полезное приложение, проблема в том, что это должно быть внутренним типом вещей из-за ограничений сторонних разработчиков и будущего использования (макро-ввод основан на выборщиках и т. Д.) – ashurexm