dotSITE
Вопросы/Ответы Учебник по ASP.NET Форумы
новости материалы решения форумы группы настройки/о проекте
Назад

Как активировать окно приложения, работающего в фоне?

Если приложение выполняется в фоновом режиме, когда его основное окно перекрыто активным приложением, то активация с помощью Form.Activate не сильно поможет, поскольку название окна будет просто мигать в панеле задач. Есть еще один способ с помощью средств Windows Forms активировать окно - это использовать две строчки:

Form.TopMost = true;
Form.TopMost = false;

Единственный минус - это то, что окно не получит фокус ввода.

Ничего не остается как прибегнуть к вызову API функций. Нижеприведенная функция активирует окно и устанавливает на нем фокус:

private void ForceActivate(Form form) {
  ForceActivate(form.Handle);
}

private void ForceActivate(IntPtr handle) {
  uint threadId1;
  uint threadId2;
  uint processId1;
  uint processId2;

  if (handle == GetForegroundWindow())
    return;

  threadId1 = GetWindowThreadProcessId(GetForegroundWindow(), out processId1);
  threadId2 = GetWindowThreadProcessId(handle, out processId2);

  if (threadId1 != threadId2) {
    AttachThreadInput(threadId1, threadId2, true);
    SetForegroundWindow(handle);
    AttachThreadInput(threadId1, threadId2, false);
  } else {
    SetForegroundWindow(handle);
  }

  if (IsIconic(handle))
    ShowWindow(handle, SW_RESTORE);
  else 
    ShowWindow(handle, SW_SHOW);
}

private const int SW_SHOW = 5;
private const int SW_RESTORE = 9;

[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

[DllImport("user32.dll")]
static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);

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

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

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

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

 Назад
Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2012 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development