2011-12-22 153 views
8

我想寫一個程序,將採取一行數據,並將其傳遞到另一個窗口/進程。c#發送鍵盤命令到另一個窗口/進程

這是我到目前爲止的代碼,但我一直無法解決如何將鍵盤命令發送到OUTLOOK進程。

我希望能夠使用Tab命令/鍵和輸入命令/鍵。

這是我到目前爲止已經試過

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Threading; 
using System.Runtime.InteropServices; 
using System.Diagnostics; 
using System.Windows.Forms; 

namespace Config 
{ 
    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      System.Threading.Thread.Sleep(30);//300000 
      TextReader tr = new StreamReader("config.txt"); 
      Clipboard.SetText(tr.ReadLine()); 
      tr.Close(); 

      var proc = Process.GetProcessesByName("OUTLOOK").FirstOrDefault(); 
      if (proc != null && proc.MainWindowHandle != IntPtr.Zero) 
      { 
       SetForegroundWindow(proc.MainWindowHandle); 
       //SendKeys.Send("{ENTER}"); 
       // Clipboard.GetText(); 
      } 
     } 

     [DllImport("user32")] 
     private static extern bool SetForegroundWindow(IntPtr hwnd); 
    } 
} 

回答

6

SendMessage是你在找什麼。 也許你的問題已經解決了這裏:How to send text to Notepad in C#/Win32?

+0

泰的答案,但這不發送鍵盤命令,據我可以看到它剛剛的過去文本在 – monkeylumps 2011-12-22 15:23:35

+0

您可以爲擊鍵設置一個標誌。例如。對於Tab鍵:'SendMessage(hwnd,WM_KEYDOWN,VK_TAB,NULL)' – arminb 2011-12-22 15:28:55

1

考慮,你知道什麼鍵盤命令你要發送到Outlook過程中,你需要使用SendMessage Windows API函數。

只是sample

7
[DllImport("user32.dll")] 
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

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

public void Start() 
{ 
    IntPtr zero = IntPtr.Zero; 
    for (int i = 0; (i < 60) && (zero == IntPtr.Zero); i++) 
    { 
     Thread.Sleep(500); 
     zero = FindWindow(null, "YourWindowName"); 
    } 
    if (zero != IntPtr.Zero) 
    { 
     SetForegroundWindow(zero); 
     SendKeys.SendWait("{TAB}"); 
     SendKeys.SendWait("{TAB}"); 
     SendKeys.SendWait("{ENTER}"); 
     SendKeys.Flush(); 
    } 
} 

嘗試水木清華這樣的。

+4

'SendKeys'無法正常工作。假裝其他窗口正在被帶到前臺。在這種情況下,您會將您的密鑰發送給錯誤的應用程序。 – arminb 2011-12-22 15:04:02

+1

這就是爲什麼使用SendWait完成然後刷新。 – Elastep 2011-12-22 15:07:00

+0

對不起復活,但任何想法如何我可以做到這一點 - 在互聯網上?我需要做基本相同的事情,但目標應用程序/進程正在另一臺機器上運行! – pookie 2016-07-25 15:29:38

5

我已經寫了幾個程序發送擊鍵到背景窗口,我通常實現PostMessage/SendMessage。我記錄了我的所有發現here

但是,您基本上會使用低級別的c調用來將消息放入Windows消息隊列中,以允許應用程序獲取按鍵。

PostMessage

SendMessage

請讓我知道如果你有任何問題,我庫是用C#編寫,我很樂意分享。這種方法還允許在後臺窗口:)鼠標使用

所有代碼被簽入到GitHub上:https://github.com/EasyAsABC123/Keyboard

相關問題