2012-01-18 2 views
1

Как я могу получить доступ к элементам управления в окне другого приложения?
Мне нужно изменить значение этих элементов управления (например, текстовые поля) или нажать на них (например, кнопки).
Я думаю, что должен использовать функции API? Но как?элементы управления доступом на других окнах

ответ

3

Смотрите SendKeys class и читать this article, вот пример из статьи:

// Get a handle to an application window. 
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)] 
public static extern IntPtr FindWindow(string lpClassName, 
    string lpWindowName); 

// Activate an application window. 
[DllImport("USER32.DLL")] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 

// Send a series of key presses to the Calculator application. 
private void button1_Click(object sender, EventArgs e) 
{ 
    // Get a handle to the Calculator application. The window class 
    // and window name were obtained using the Spy++ tool. 
    IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator"); 

    // Verify that Calculator is a running process. 
    if (calculatorHandle == IntPtr.Zero) 
    { 
     MessageBox.Show("Calculator is not running."); 
     return; 
    } 

    // Make Calculator the foreground application and send it 
    // a set of calculations. 
    SetForegroundWindow(calculatorHandle); 
    SendKeys.SendWait("111"); 
    SendKeys.SendWait("*"); 
    SendKeys.SendWait("11"); 
    SendKeys.SendWait("="); 
} 
+0

Хорошо, но это безопасно? Я имею в виду, что должен использовать ключ табуляции для перемещения элементов управления броском, но что делать, если некоторые клавиши не работают? то я изменю значение другого элемента управления! Я ищу очень безопасный путь! – mrbm

+0

Это зависит от того, для чего вы собираетесь его использовать? могут быть лучшие варианты в зависимости от того, будет ли другое окно, к которому вы хотите получить доступ, urs или нет, вы можете использовать что-то вроде: http://inputsimulator.codeplex.com/ для имитации ввода в том же окне или программы сценария для запишите макрос, который имитирует это как: http://mwganson.freeyellow.com/winkeysim/. Какова цель всего этого? – CloudyMarble

+0

Нет, это окно не мое. Мне нужно запустить и управлять приложением, которое должно быть скрыто от пользователя, в моем собственном приложении. – mrbm

2

Посмотрите на "Spy ++": http://msdn.microsoft.com/en-us/library/dd460756.aspx

Вы можете получить доступ контроля на других окнах с ним.

+0

Спасибо, я работаю над этим прямо сейчас, очень полезно – mrbm

+0

Он может их найти, но как я могу щелкнуть элемент управления? По сообщению «сообщение»? как? – mrbm

2

вы должны использовать Windows API, как EnumWindow или FindWindow затем использовать EnumChildWindows API, чтобы найти элементы управления в целевом окне, как и текстовое поле вы ищете, то API SetWindowText

посмотрите здесь для некоторых идей: Why is EnumChildWindows skipping children? также поиск этих имен, API здесь в Stack Overflow, и вы найдете множество примеров ...

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