2014-11-03 66 views
1

我正在創建一個控制檯應用程序,該應用程序應該調用VB應用程序MyProj.exe並觸發同一按鈕單擊事件。單擊.NET中的Visual Basic應用程序中的按鈕

截至目前,我能夠運行VB項目的可執行文件,但我想從控制檯應用程序中觸發某些按鈕單擊事件。

System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.FileName = @"C:\New\MyProj.exe"; 
System.Diagnostics.Process.Start(startInfo); 

我有以下鏈接嘗試 - 這是不是爲我工作 http://www.codeproject.com/Articles/14519/Using-Windows-APIs-from-C-again

- 在hwndChild執行每條語句後即將爲「零」

//Get a handle for the "5" button 
      hwndChild = FindWindowEx((IntPtr)hwnd,IntPtr.Zero,"Button","5"); 

      //send BN_CLICKED message 
      SendMessage((int)hwndChild,BN_CLICKED,0,IntPtr.Zero); 

      //Get a handle for the "+" button 
      hwndChild = FindWindowEx((IntPtr)hwnd,IntPtr.Zero,"Button","*"); 

      //send BN_CLICKED message 
      SendMessage((int)hwndChild,BN_CLICKED,0,IntPtr.Zero); 

      //Get a handle for the "2" button 
      hwndChild = FindWindowEx((IntPtr)hwnd,IntPtr.Zero,"Button","2"); 

      //send BN_CLICKED message 
      SendMessage((int)hwndChild,BN_CLICKED,0,IntPtr.Zero); 

      //Get a handle for the "=" button 
      hwndChild = FindWindowEx((IntPtr)hwnd,IntPtr.Zero,"Button","="); 

      //send BN_CLICKED message 
      SendMessage((int)hwndChild,BN_CLICKED,0,IntPtr.Zero); 

太感謝很多codecaster - 但我會需要一點幫助

 #define AMP_PAUSE 40046 
    HWND hwnd = FindWindow("Winamp v1.x", 0); 
    if(hwnd) SendMessage(hwnd, WM_COMMAND, AMP_PAUSE, 0); 

button1是按鈕的ID; Call_Method()是我們點擊button1時調用的過程。

你能請幫助如何編寫C#上面的代碼

+0

我檢查了該實用程序 - 但我無法弄清楚如何調用按鈕單擊事件我vb.exe - 我也希望它在後臺。 – 2014-11-03 11:31:30

+0

請顯示您使用的實際代碼。 「不爲我工作」不夠清楚,不能重新提出你的問題。使用SendMessage API是實現這一點的方法。 – CodeCaster 2014-11-03 13:40:26

+0

我已經下載了相同的代碼,當我跑它 - 計算器打開,但與「0」的值。所以這意味着有按鈕事件ared不會被解僱。每次hwndChild的值爲「0」 – 2014-11-03 14:55:48

回答

2

我建議你稍微不同的方法。向您的按鈕添加一個快捷鍵。這是通過將&放在要用作按鈕文本中快捷鍵的字母之前完成的。然後您可以通過輸入Alt-X激活此按鈕,其中X是您的快捷鍵。

[DllImport("User32.dll")] 
static extern int SetForegroundWindow(IntPtr point); 

有了這個聲明,那麼你可以發送快捷鍵,您的應用程序:

// Start your process 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.FileName = @"C:\New\MyProj.exe"; 
Process process = Process.Start(startInfo); 

// Wait for your process to be idle, sometimes an additional 
// Thread.Sleep(...); is required for the application to be ready. 
process.WaitForInputIdle(); 

// Make the started application the foreground window. 
IntPtr h = process.MainWindowHandle; 
SetForegroundWindow(h); 

// Send it Alt-X 
SendKeys.SendWait("%x"); 
相關問題