2015-02-18 2 views
2

Я пытаюсь создать программу, которая сможет управлять другой программой (в Windows).Нажмите на кнопку в другой программе - FindWindow, C#

Я нашел этот код:

// 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); 

//button event 
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", "Kalkulačka"); 

    // 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

да это возможно, я верю, что это может дать вам некоторые идеи -http: //stackoverflow.com/questions/26502035/perform-a-mouse-click-event-on-another-application-using-c-sharp if а затем выполните простой поиск google – MethodMan

+0

возможный дубликат [Управление другим приложением с использованием C#] (http://stackoverflow.com/questions/1134993/control-another-application-using-c-sharp) –

+0

Да, я читал это, но я не знаю, как использовать библиотеку. Я думаю, есть другой способ. – phawresl

ответ

1

Вы можете использовать следующий код для имитации мыши:

 [System.Runtime.InteropServices.DllImport("user32.dll")] 
     static extern bool SetCursorPos(int x, int y); 

     [System.Runtime.InteropServices.DllImport("user32.dll")] 
     public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 

     public const int MOUSE_LEFTDOWN = 0x02; 
     public const int MOUSE_LEFTUP = 0x04; 

     public static void LeftMouseClick(int x, int y) 
     { 
      SetCursorPos(x, y); 
      mouse_event(MOUSE_LEFTDOWN, x, y, 0, 0); 
      mouse_event(MOUSE_LEFTUP, x, y, 0, 0); 
     } 

Метода LeftMouseClick получает два параметр х и у, представляющие координаты на экране пользователя:

LeftMouseClick(400, 200); 

Или вы можете сделать это клавиатура: Link

private void button2_Click(object sender, EventArgs e) 
    {   
     SendKeys.Send("{ENTER}"); 
    } 

в основном то, что вы делаете в вашем коде:

SendKeys.SendWait("111"); 
SendKeys.SendWait("*"); 
SendKeys.SendWait("11"); 
SendKeys.SendWait("="); 

Я не думаю, что есть еще один способ сделать это.

+0

Благодарим вас за ответ, но я хочу сделать это в задаче BACGROUND ... – phawresl

+0

@phawres Вы можете отправлять нажатия клавиш в активное приложение, то есть самое близкое к тому, что вы можете «смотреть» в качестве фоновой операции, см. Edit выше. – Dn24Z

+0

@phawres вы можете сделать это только в фоновом режиме, обратившись к какой-то командной оболочке, интерфейсу прикладного программирования (API), макросам или dll. Если приложение dosnt поддерживает этот тип доступа, вы не можете делать это программно или в качестве фоновой операции. – Dn24Z

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