SendMessage를 사용하여 다른 프로그램의 메뉴를 활성화하는 데 문제가 있습니다. 사용자가 메뉴를 클릭 할 때 ++ 스파이를 통해 볼 때 다음이 발생합니다SendMessage가 비 클라이언트 항목을 클릭합니다.
내가 WM_NCLBUTTONDOWN와 다음을 sendMessage 첨부를 사용하여 동일한하려고 할 때 반면000A0628 P WM_NCLBUTTONDOWN nHittest:HTMENU xPos:1706 yPos:395 [wParam:00000005 lParam:018B06AA time:27:23:56.156 point:(1706, 395)] 000A0628 S WM_SYSCOMMAND uCmdType:SC_MOUSEMENU xPos:1706 yPos:395 [wParam:0000F095 lParam:018B06AA] 000A0628 S WM_ENTERMENULOOP fIsTrackPopupMenu:False [wParam:00000000 lParam:00000000] 000A0628 R WM_ENTERMENULOOP lResult:00000000 000A0628 S WM_SETCURSOR hwnd:000A0628 nHittest:HTCAPTION wMouseMsg:0000 [wParam:000A0628 lParam:00000002] 000A0628 R WM_SETCURSOR fHaltProcessing:False [lResult:00000000] 000A0628 S WM_INITMENU hmenuInit:00200355 [wParam:00200355 lParam:00000000] 000C0672 S EM_GETSEL lpdwStart:0010EFA0 lpdwEnd:0010EFA4 [wParam:0010EFA0 lParam:0010EFA4] 000C0672 R EM_GETSEL wStart:26 wEnd:26 lpdwStart:0010EFA0 (684) lpdwEnd:0010EFA4 (276) [lResult:001A001A] 000C0672 S WM_GETTEXTLENGTH wParam:00000000 lParam:00000000 000C0672 R WM_GETTEXTLENGTH cch:26 [lResult:0000001A] 000C0672 S EM_CANUNDO wParam:00000000 lParam:00000000 000C0672 R EM_CANUNDO fCanUndo:True [lResult:00000001] 000A0628 R WM_INITMENU lResult:00000000 000A0628 S WM_MENUSELECT uItem:0 fuFlags:MF_POPUP | MF_HILITE | MF_MOUSESELECT hmenu:00200355 [wParam:80900000 lParam:00200355] 000A0628 R WM_MENUSELECT lResult:00000000 000A0628 S WM_INITMENUPOPUP hmenuPopup:00150595 uPos:0 fSystemMenu:False [wParam:00150595 lParam:00000000] 000A0628 R WM_INITMENUPOPUP lResult:00000000
대신 발생합니다
000A0628 P WM_NCLBUTTONDOWN nHittest:HTMENU xPos:1700 yPos:400 [wParam:00000005 lParam:019006A4 time:27:25:02.156 point:(1700, 400)] 000A0628 S WM_SYSCOMMAND uCmdType:SC_MOUSEMENU xPos:1700 yPos:400 [wParam:0000F095 lParam:019006A4] 000A0628 S WM_ENTERMENULOOP fIsTrackPopupMenu:False [wParam:00000000 lParam:00000000] 000A0628 R WM_ENTERMENULOOP lResult:00000000 000A0628 S WM_EXITMENULOOP fIsTrackPopupMenu:False [wParam:00000000 lParam:00000000] 000A0628 R WM_EXITMENULOOP lResult:00000000 000A0628 S WM_MENUSELECT uItem:0 fuFlags:FFFF (menu was closed) hmenu:00000000 [wParam:FFFF0000 lParam:00000000] 000A0628 R WM_MENUSELECT lResult:00000000 000A0628 S WM_EXITMENULOOP fIsTrackPopupMenu:False [wParam:00000000 lParam:00000000] 000A0628 R WM_EXITMENULOOP lResult:00000000 000A0628 R WM_SYSCOMMAND lResult:00000000
사람이 얻는 방법을 알고 있나요 이게 제대로 작동하나요?
건배
로스
, 나는 궁금하네요을 특히 sendMessage 첨부()를 사용할 수 있습니다 대체 솔루션이있을 수 있습니다. 달성하려는 내용 (즉, 다른 프로그램에서 메뉴를 활성화하려는 이유)을 알려주시겠습니까? – jdigital
"원숭이"테스터를 만들려고합니다. 이것의 일부로 원숭이가 똑똑하기 만하면 종료/종료 버튼/메뉴 옵션으로 식별되는 것을 클릭하지 않아도됩니다. 대화 상자가 실제로 팝업되기 전에 클릭하기가 너무 빠르기 때문에 괜찮습니다 대화 상자는 여전히 입력을 수신하고 대화 상자에 마우스가있는 곳에서 종료 버튼이 있으면 대상 프로그램을 종료합니다. 이것은 원하는 효과가 아니므로 대화 상자가 나타날 때를 감지하는 몇 가지 방법이 필요합니다. SendMessage 블록 및이 기능을 제공합니다. – Ross