0

SetParent私の WinForm ダイアログは、 (p/invoke)への呼び出しを介してサード パーティ ウィンドウ (SolidWorks) に接続されています。私のダイアログはアドインとしてサード パーティ プロセスにあります。

Ctrlユーザーがダイアログ/ウィジェットをクリックしてフォーカスを与えたときに、 +を押しTabて親アプリケーションのビューを切り替えると、ダイアログはキー ストローク シーケンスを受け取りますProcessCmdKey。コマンドは親ウィンドウに渡されないため、何もしません。

このキー シーケンスを親 HWND に渡すにはどうすればよいですか?

転送する必要があるのはCtrl+だけではなく、 + 、などを含むすべてのキーです。TabAltF4F1

4

1 に答える 1

0

FindWindow親ウィンドウのハンドルを取得するために使用します。(lpClassNameにnullを渡します)(詳細:http ://www.pinvoke.net/default.aspx/user32.FindWindow )

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

SendMessageW(詳細:http ://www.pinvoke.net/default.aspx/user32.SendMessage )を使用して、キャプチャされたメッセージを転送します。

// Works for unicode. One can also 
// use CharSet = CharSet.Unicode instead of [MarshalAs(UnmanagedType.LPWStr)] 
[DllImport("user32.dll", EntryPoint = "SendMessageW")]
static extern IntPtr SendMessageW(IntPtr hWnd, 
                                  UInt32 Msg, 
                                  IntPtr wParam, 
[MarshalAs(UnmanagedType.LPWStr)] string lParam);
于 2012-09-06T06:41:37.333 に答える