ウィンドウのタイトルバーを検索して、そいつを無理矢理最前面に表示させて、キーボード操作を送る方法。これを使えば全てのアプリケーションを、UIをAPIとして自動操縦する事が出来る。

SendKeysで送れるキーコードはSendKeys クラス (System.Windows.Forms)を参照

例。

Skype COM APIに通話を切るAPIが無いっぽいので

まずタイトルバーに「Skype」を含むウィンドウを見つけて、SendKeysでキーボード入力の「ESC」を発生させて無理矢理通話を切る。

using System.Runtime.InteropServices; // for DllImport

[DllImport(“user32.dll”)]

externstaticIntPtrGetWindow(IntPtrhWnd,uintuCmd);

[DllImport(“user32.dll”)]

externstaticIntPtrGetForegroundWindow();

[DllImport(“user32.dll”)]

externstaticintGetWindowText(IntPtrhWnd,StringBuilderlpStr,intnMaxCount);

[DllImport(“user32.dll”)]

externstaticboolIsWindowVisible(IntPtrhWnd);

[DllImport(“user32.dll”)]

externstaticboolSetForegroundWindow(IntPtrhWnd);

publicvoidcallStop()

{

StringBuildersb=newStringBuilder(100);

IntPtrhwnd=GetForegroundWindow();//最前面のウィンドウハンドルを取得

while(hwnd!=IntPtr.Zero)

{

if(IsWindowVisible(hwnd))

{

GetWindowText(hwnd,sb,sb.Capacity);//タイトルバー文字列を取得

if(sb.ToString().IndexOf(“Skype”)>=0)

{

SetForegroundWindow(hwnd);//アクティブにする

Thread.Sleep(1000);//ちょっと待って

SendKeys.SendWait(“{ESC}”);//通話を切る

break;

}

}

hwnd=GetWindow(hwnd,2);//次のウィンドウハンドル

}

}

ウィンドウが正面に来るまでちょっと待つのが肝。

VisualStudio2008買って使ってみてるんだけど、設定をVS2005から読み込んでくれてるので違和感無く使えてる。C#3.0になってるんだけど普通に使う分にはあまり変わってないな