2015-06-05 1 views
0

Я попытался найти ответ с помощью Google, но, я думаю, я не использую правильную терминологию.Программа Menubar - Установить фокус на стороннее приложение

Что я создаю, это простое приложение для Windows, которое состоит из menustrip. Эта программа предполагает найти фокус существующего приложения, которое уже будет работать, и «прикрепить» себя к вершине.

Это старая оконная игра, и я пытаюсь создать набор инструментов для нее.

Идентификатор должен быть постоянным и следовать, если игра также перемещена. Но один шаг за раз.

Я думаю, мой вопрос - это правильная терминология для того, что я пытаюсь выполнить. Как только я знаю, что я поеду и сделаю домашнюю работу

+0

Вы можете получить позицию окна с помощью GetWindowRect (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633519%28v=vs.85%29.aspx) и проверить его периодически, чтобы увидеть, движется ли окно и при необходимости отрегулирует ваше окно. Есть некоторые сообщения об этом API, возвращающем плохие значения в Vista, хотя, не уверен, что он был исправлен в 7/8/X. –

+0

«Фокус» - это неправильное слово. Фокус - это состояние, в котором окно/управление получает вход от пользователя. Окно, которое вы вводите, будет иметь фокус. Вы хотите найти * главное окно * данного * процесса *, а затем расположите окно своего собственного процесса рядом с ним. – Blorgbeard

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

0

Вы можете следить за окном, используя uiacomwrapper, у меня даже есть образец приложения на github. При нажатии кнопки приложение будет прикрепляться к IE и перемещаться вместе.

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     string lpszParentClass = "IEFrame"; 
     IntPtr ParenthWnd = new IntPtr(0); 
     ParenthWnd = FindWindow(lpszParentClass, null); 
     if (!ParenthWnd.Equals(IntPtr.Zero)) 
     { 
      var parent = AutomationElement.FromHandle(ParenthWnd); 
      Automation.AddAutomationPropertyChangedEventHandler(parent, TreeScope.Element, WindowMoved, AutomationElement.BoundingRectangleProperty); 
     } 
    } 

    private void WindowMoved(object sender, AutomationPropertyChangedEventArgs e) 
    { 
     App.Current.Dispatcher.BeginInvoke(new Action(() => 
     { 
      if (e.NewValue != null) 
      { 
       var newPosition = (Rect)e.NewValue; 
       this.Left = newPosition.Left; 
       this.Top = newPosition.Top; 
      } 
     })); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^