ウィンドウのタイトルバーを検索して、そいつを無理矢理最前面に表示させて、キーボード操作を送る方法。これを使えば全てのアプリケーションを、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になってるんだけど普通に使う分にはあまり変わってないな