2017-02-28 9 views
0

私はsendkeysを使用しようとしていますが、フォーカスのないプログラムに送信しようとしています。たとえば、私はSendKeyをNotepad - Untitledに使用したいのですが、それはフォーカスされていません。申し訳ありませんが不明な場合は、私は詳しく説明します。私の現在のコードはこれです:フォーカスがない状態で特定のプログラムにキーを送信する

 string txt = Regex.Replace(richTextBox3.Text, "[+^%~()]", "{$0}"); 

     System.Threading.Thread.Sleep(1000); 
     SendKeys.Send(txt + "{ENTER}"); 

私はSendMessage関数を使用している場合は、誰もが私が何をすべきかの一例を示すために、気でしょうか?私は私の問題のために非常に便利なオンラインで見つけた何かを見つけることができません。

+0

可能重複[C#で非アクティブアプリケーションにキーを送信/。NET(http://stackoverflow.com/questions/1584767/sending-keys-to-inactive-application-in-c-net) –

+1

UIオートメーションを使用する方が良いでしょう。 –

+0

@RaymondChen私はSendMessageを見てみましたが、私には分かりませんでした。可能であれば、マイクロソフトのページではなく、より多くのヘルプを入手できますか? –

答えて

1

previous SO answerから次のコードを見つけました。 PostMessage APIは、特定のWindowsハンドルにWindowsメッセージを送信します。次のコードは、F5キーが押されたことをシミュレートするフォーカスを与えずに、Internet Explorerのすべてのインスタンスでキーダウンイベントを発生させます。追加のキーコードのリストはhereです。

static class Program 
{ 
    const UInt32 WM_KEYDOWN = 0x0100; 
    const int VK_F5 = 0x74; 

    [DllImport("user32.dll")] 
    static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam); 

    [STAThread] 
    static void Main() 
    { 
     while(true) 
     { 
      Process [] processes = Process.GetProcessesByName("iexplore"); 

      foreach(Process proc in processes) 
       PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_F5, 0); 

      Thread.Sleep(5000); 
     } 
    } 
} 
関連する問題