私はMedia Subtitlerと呼ばれるプログラム内のメニュー項目をクリックしようとしています。C#WinAPIメニュー項目をクリックする
まず、GetMenu関数を使用しようとしましたが、IntPtr.Zeroが返されました。 次に、私のメニューの最初の文字を使ってALTキーを使ってみましたが(Fはファイルを表します)、何もしませんでした。 次に、単純なMOUSEDOWNとMOUSEUPメッセージを使用してみましたが、何もしませんでした(その範囲のすべてをクリックするループを作成しようとしましたが、その領域にはクリックがありませんでした)。
明らかに私が知っているのは、正しいウィンドウで作業しているということです。
私は間違っていますか?
誰かが試してみたいと思えば、無料でMedia Subtitlerをダウンロードすることができます。
また、ここで私がテストしてきたコードは次のとおりです。任意のヘルプ
Process p = Process.Start(@"C:\Program Files\DivXLand\Media Subtitler\MediaSub.exe");
p.WaitForInputIdle(1500);
Thread.Sleep(3000);
SetForegroundWindow(p.MainWindowHandle);
ShowWindow(p.MainWindowHandle, SW_MAXIMIZE);
IntPtr handle = p.MainWindowHandle;
SendMessage(handle, WM_NCHITTEST, 0, MakeLParam(18, 29));
//for (int i = 0; i < 200; i++)
//{
// for (int x = 0; x < 200; x++)
// {
// SendMessage(p.MainWindowHandle, WM_LBUTTONDOWN, 0, MakeLParam(i, x));
// SendMessage(p.MainWindowHandle, WM_LBUTTONUP, 0, MakeLParam(i, x));
// }
//}
//IntPtr menuItems = GetMenu(p.MainWindowHandle);
return;
//SendMessage(p.MainWindowHandle, WM_COMMAND, 6, 0);
SendMessage(p.MainWindowHandle, WM_KEYDOWN, VK_MENU, 0);
SendMessage(p.MainWindowHandle, WM_KEYUP, VK_MENU, 0);
SendMessage(p.MainWindowHandle, WM_KEYDOWN, VK_F, 0);
SendMessage(p.MainWindowHandle, WM_KEYUP, VK_F, 0);
ありがとう!
返信いただきありがとうございます。 spy ++でプログラムを見たときに、メニューハンドラが見えませんでした。どのように見つけましたか?メニューハンドラを取得するためのコードも記述できますか?ありがとう。 –
メニューハンドラを取得する必要はありません(ただし、spy ++のウィンドウのプロパティで利用可能です)。私はウィンドウのメッセージを監視しました。 spy ++でウィンドウリストを更新し、 'Find Window'ツールをクリックして十字線をあなたのウィンドウにドラッグします。見つけたら、右クリックして 'Messages'を選択してください。このウィンドウでは、spy ++はすべてのメッセージが送信されてウィンドウに表示されることを示します。 'Messages'メニュー(Ctrl + O)から' Logging options'を選択することでメッセージをフィルタリングできます。 –
ありがとう!できます! –