2012-04-23 12 views
0

私は基本的にIE9にSendKeyのタブを変更しようとしています。私は3つのタブを持っているので、Ctrl + 1、Ctrl + 2、Ctrl + 3、Ctrl + Tのキーを送信して新しいタブを開く必要があります。SendMessage/PostMessageを使用してIE9のタブを開く/変更する

私は新しいプロセスを開くことにより、Internet Explorerのインスタンスを取得輸入DLLおよび定数

[DllImport("user32.dll")] 
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, 
IntPtr wParam, IntPtr lParam); 
[DllImport("user32.dll")] 
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, 
IntPtr wParam, IntPtr lParam); 
const int WM_KEYDOWN = 0x100; 
const int WM_KEYUP = 0x101; 

を追加することによって開始します。

Process p = Process.Start("iexplorer.exe"); 

はIE9インスタンス

IntPtr handle = p.MainWindowHandle; //p.Handle (doesn't work either) 
//Change to Tab2 using PostMessage 

PostMessage(handle, WM_KEYDOWN, ((IntPtr)Keys.LControlKey), (IntPtr)0); 
PostMessage(handle, WM_KEYDOWN, ((IntPtr)Keys.D2), (IntPtr)0); 
PostMessage(handle, WM_KEYUP, ((IntPtr)Keys.D2), (IntPtr)0); 
PostMessage(handle, WM_KEYUP, ((IntPtr)Keys.LControlKey), (IntPtr)0); 

応答がありませんにのPostMessageにプロセスハンドルを使用してください。私はまた、SendMessageを無駄に使用しようとしました。

明らかに間違っているのですか?

+0

p.Handleは、プロセスハンドル、いないウィンドウハンドルになりますよう。 –

+0

また、IE9はタブごとに新しいプロセスを起動します。したがって、.MainWindowHandleはあなたのシナリオでは意味がありません。 –

答えて

0

どの程度SendKeys("^1");

here

+0

返信いただきありがとうございます。私はSendKeysに精通していますが、フォーカスが必要なので使用したくありません。 MainWindowHandleは、メインのウィンドウを含むキーストロークを送信しようとしているので、適切なハンドルです。 –

+0

コンテナウィンドウは、キーボード入力を処理するウィンドウではない可能性があります。私はそれが驚くだろう。 –

+0

私はポイントを必要とするので、これをobvously wrong answerとマークします。これを行うことができないか、人々はそれがどのように行われたかを共有したくない。 –

関連する問題