向菜单发什么消息可以实现鼠标单击它的效果?(在线等,答对立刻给分)

goodname008 2003-07-05 02:12:34
问大家一个问题,当我得到一个菜单的句柄后,向它发什么消息可以实现用鼠标单击它的效果?
...全文
66 点赞 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
goodname008 2003-07-09
谢谢大家了,James0001(See-Plus-Plus) 的方法是正确的。
原来第三个参数应该是菜单的ID而不是菜单的句柄。
现在终于明白了!!! 再次谢谢大家!!! :)
结贴,放分。
回复
ClassicWuHao 2003-07-07
由于时间有限,我做了一个向系统菜单发送单击消息的试验代码如下:
===============================================================================
Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Private Declare Function GetMenuItemID Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Const WM_SYSCOMMAND As Long = &H112

Private Sub Command1_Click()
Dim hMenu As Long, Rc As Long
Dim SubMenuID As Long

hMenu = GetSystemMenu(Me.hwnd, 0&)
SubMenuID = GetMenuItemID(hMenu, 4&)
Debug.Print "SubMenuID"; SubMenuID
Rc = SendMessage(Me.hwnd, WM_SYSCOMMAND, SubMenuID, ByVal 0&)
Debug.Print "Rc"; Rc '注意返回0(有点怪)
End Sub
==================================================================================希望对你有帮助!!!!
回复
James0001 2003-07-07
那个菜单有几级?
试试这个:
SendMessage Handle, WM_COMMAND, GetMenuItemID(GetSubMenu(GetMenu(Handle), 0), 1), ByVal 0&
或这个:
SendMessage Handle, WM_COMMAND, GetMenuItemID(GetSubMenu(GetSubMenu(GetMenu(Handle), 0), 1), 0), ByVal 0&
回复
goodname008 2003-07-06
to: James0001(See-Plus-Plus)
帮我看看我的做法有问题吗?我试了不行啊,handle 就是那个窗口的句柄。

SendMessage Handle, WM_COMMAND, GetSubMenu(GetSubMenu(GetMenu(Handle), 0), 1), ByVal 0&
回复
sippey 2003-07-06
gz
回复
James0001 2003-07-06
你是怎样得到那个菜单句柄的?
如果你知道含有那个菜单的窗口的话,可以用 WM_COMMAND :
SendMessage( 窗口句柄, WM_COMMAND, 菜单句柄, ByVal 0& )
回复
goodname008 2003-07-05
是啊,我得到的是另外一个程序的菜单的句柄,我现在想实现用鼠标单击该菜单的效果。
应该用 SendMessage 发消息,但我不知道后面具体的参数怎么写?

大家帮帮忙!!!!!
回复
lylmsdn 2003-07-05
如果是用VB的菜单的话直接调用那个过程了,如果API写的话就不行了。
回复
goodname008 2003-07-05
UP

我快哭了,大家帮帮我啊!!!
回复
goodname008 2003-07-05
大家是不是没明白啊!
我要实现的是通过我的VB程序单击另外一个程序中的菜单!!!
现在我已经知道了那个菜单的句柄,用SendMessage怎么向这个句柄发消息才能实现用鼠标单击这个菜单的效果??????????

比如我通过VB先启动了超级解霸,然后又获得了“文件”菜单下的“打开单个文件”菜单的句柄,现在我想通过SendMessage向它发个类似[单击]的消息实现和用鼠标单击该菜单一样的效果。

不知道说清楚没有。

回复
绝缘 2003-07-05
不可以的,知道了句柄不行,而要知道它在程序中的ID才行,因为程序的处理是这样的:
Wndproc proc hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
.if uMsg==WM_COMMAND
.if wParam==1 ;这是按键的ID
....
.endif
.endif
Wndproc endp
回复
ClassicWuHao 2003-07-05
应该是wm_command,MSDN里说得很清楚了,The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated
回复
goodname008 2003-07-05
我查MSDN了,不行啊!!!!!!!!
补充一下,我得到的菜单句柄是另外一个程序的菜单!
大家有没有源码贴一下啊??
回复
goodname008 2003-07-05
大家帮帮忙吧,有没有源代码啊?
回复
liu_swallow 2003-07-05
就是Wm_lbuttondown ,用Msdn 查一下
回复
goodname008 2003-07-05
WM_MOUSECLICK 没找到这个消息的常量!!!
WM_LBUTTONDOWN 我试了,不行啊!!!

大家还有没有别的办法,帮帮我吧,很急的!!!!!!!!!!!
大家如果有时间最后能帮着调试一下,如果成功就把代码贴上来,谢谢!!!!!!
回复
goodname008 2003-07-05
WM_MOUSECLICK ?
API viewer里没有这个常量的值啊?您试了吗?有没有代码?
回复
jun_01 2003-07-05
如果不对,别怪我,呵呵
回复
gofree2 2003-07-05
发送wm_lbuttondown消息~
回复
jun_01 2003-07-05
wm_mouseclick吧
回复
发帖
API
创建于2007-09-28

1461

社区成员

VB API
申请成为版主
帖子事件
创建了帖子
2003-07-05 02:12
社区公告
暂无公告