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 ++에서 창 목록을 새로 고치고 '창 찾기'도구를 클릭하고 십자선을 창으로 드래그하십시오. 찾았 으면 그것을 마우스 오른쪽 버튼으로 클릭하고'Messages'를 선택하십시오. 이 창에서 spy ++는 모든 메시지가 전송되어 창에 게시됨을 나타냅니다. 'Messages' 메뉴 (Ctrl + O)에서'Logging options'을 선택하여 메시지를 필터링 할 수 있습니다. –
고마워요! 그것은 작동합니다! –