Adsense_top

2010年1月10日日曜日

C# 外部アプリケーションにキーストロークを送り操作する。

外部のアプリケーションにキーストロークを送りたかったのですが、「SendKeys」では、アクティブなウインドウが対象なので、WIN32 APIを使って書いてみました。


以下のコードでは、Internet Explorer を全画面表示にしています。


まずはP/Invoke定義部

[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(String lpClassName,
String lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern bool PostMessage(int hWnd, Int32 Msg,
int wParam, int lParam);

private const Int32 WM_KEYDOWN = 0x0100;

キーストロークを送る部分です。

// IEのウィンドウハンドル取得
IntPtr hWnd =
FindWindow(null, "Yahoo! JAPAN - Windows Internet Explorer");
// ハンドル取得失敗時
if (hWnd == IntPtr.Zero)
{
Console.WriteLine("ハンドルが取得できません");
return;
}

// メッセージPOST
bool result =
  PostMessage(hWnd, WM_KEYDOWN, (int)(Keys.F11),0);

以上で、IEが全画面表示になります。今回は簡単にするために、IEで YAHOO を表示していると仮定してしています。
実際に使用するには、ウインドウハンドルの取得部分に工夫が必要だと思います。


0 件のコメント:

コメントを投稿