2009-04-03 8 views
1

で見つけました。キーボードストロークをプログラム的に再現するC#プログラムを作成しました。私の考えは、これらのキーボードストロークを、フォーカスが設定されたテキストボックスにすることができる別のアプリケーションに渡すことでした。ユーザが選択するウィンドウのhwndをC#

私のプログラムでは、キーボードストロークをリダイレクトする必要があるウィンドウをユーザーが選択したいと思っています。そのためには、私は待つことができる方法を知りたいです。ユーザーがキーボードストロークを送信する必要があるウィンドウを選択させてから、ユーザーが確認するためにアプリケーションで[OK]をクリックすると、自分のアプリケーションが、それを取得して制御します。

どうすればいいですか?

答えて

2
using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 
using System.Text; 

public class MainClass 

    // Declare external functions. 
    [DllImport("user32.dll")] 
    private static extern IntPtr GetForegroundWindow(); 

    [DllImport("user32.dll")] 
    private static extern int GetWindowText(IntPtr hWnd, 
              StringBuilder text, 
              int count); 

    public static void Main() { 
     int chars = 256; 
     StringBuilder buff = new StringBuilder(chars); 

     // Obtain the handle of the active window. 
     IntPtr handle = GetForegroundWindow(); 

     // Update the controls. 
     if (GetWindowText(handle, buff, chars) > 0) 
     { 
      Console.WriteLine(buff.ToString()); 
      Console.WriteLine(handle.ToString()); 
     } 
    } 
} 
+0

これには2つの疑問があります。 - 1)ユーザーがアクティブなウィンドウを選択するのはどのように待つのですか?常にメインウィンドウになるようにコンソールを戻しませんか? 2)GetWindowTextはWin32 APIコールですか?もしそうなら、それはどのように.NETクラスであるstringbuilderを受け入れることができるのですか? –

+0

これは、user32.dllを使用してフォアグラウンドウィンドウを取得する例です。残りの部分は簡単です - ユーザーにメッセージを表示し、バックグラウンドワーカーを起動して、どのアプリケーションが上にあるかを監視し、変更されている場合はそれを使って何をしたいかを監視します。 –

+0

ありがとうございました。私はその考えに取り組んでいます。 –