社区
硬件/系统
帖子详情
如何獲取鼠標指針下的菜單句柄?(我認為是高難度--就象獲取鼠標器下的窗口句柄一樣(WindowFromPoint))
无敌魔仙
2003-02-14 08:27:14
比如當Word2000的文件菜單被彈出來后,可否根据鼠標器的位置,獲取不同的菜單選項的句柄,譬如當鼠標器在 "打開" 上是我就獲取 "打開" 菜單選項的句柄,而在 "關閉" 上時就獲取 "關閉" 選項的句柄,就象獲取鼠標器下的窗口句柄一樣(WindowFromPoint)
...全文
52
9
打赏
收藏
如何獲取鼠標指針下的菜單句柄?(我認為是高難度--就象獲取鼠標器下的窗口句柄一樣(WindowFromPoint))
比如當Word2000的文件菜單被彈出來后,可否根据鼠標器的位置,獲取不同的菜單選項的句柄,譬如當鼠標器在 "打開" 上是我就獲取 "打開" 菜單選項的句柄,而在 "關閉" 上時就獲取 "關閉" 選項的句柄,就象獲取鼠標器下的窗口句柄一樣(WindowFromPoint)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
toolscreator
2003-02-15
打赏
举报
回复
跨进程使用,有些API操作是不会有结果的.发消息也是.
yins
2003-02-15
打赏
举报
回复
GetMenu(,会不会要主窗口的HANDLE才行?
leehq
2003-02-15
打赏
举报
回复
如果你这些代码是在菜单弹出后还是弹出前执行的?
无敌魔仙
2003-02-15
打赏
举报
回复
了找到光標所在點的菜單選項的句柄,我用了如下代碼:
開始找到光標所在點的窗口,並列出其菜單資源.
HINSTANCE hInstMain;
HWND hTopHwnd;
BOOL bHaveFoundMainHwnd=FALSE;
while(!bHaveFoundMainHwnd)
{
if(GetParent(hwndUnderCursor)!=NULL)
{
hwndUnderCursor=GetParent(hwndUnderCursor);
hTopHwnd=GetParent(hwndUnderCursor);
}
else
{
bHaveFoundMainHwnd=TRUE;
}
}
if(hTopHwnd==NULL)
hTopHwnd=hwndUnderCursor;
hInstMain = (HINSTANCE) GetWindowLong (hTopHwnd, GWL_HINSTANCE);
if(hInstMain)
{
EnumResourceNames(hInstMain,RT_MENU,(ENUMRESNAMEPROC)EnumMenuNameProc,0);
}
列出菜單資源的回調函數
BOOL CALLBACK EnumMenuNameProc(HINSTANCE hModule,LPCTSTR lpszType,LPTSTR lpszName,LONG lParam)
{
HMENU hMenu;
HRSRC hHrsc;
hHrsc=FindResource(hModule,lpszName,RT_MENU);
hMenu=(HMENU)LoadResource(hModule,hHrsc);
if(hMenu!=NULL)
{
UINT iMenuItem=0;
POINT ptCursor;
HWND hwndUnderCursor;
GetCursorPos(&ptCursor);
hwndUnderCursor=WindowFromPoint(ptCursor);
HWND hTopHwnd;
BOOL bHaveFoundMainHwnd=FALSE;
while(!bHaveFoundMainHwnd)
{
if(GetParent(hwndUnderCursor)!=NULL)
{
hwndUnderCursor=GetParent(hwndUnderCursor);
hTopHwnd=GetParent(hwndUnderCursor);
}
else
{
bHaveFoundMainHwnd=TRUE;
}
}
if(hTopHwnd==NULL)
hTopHwnd=hwndUnderCursor;
iMenuItem=MenuItemFromPoint(hTopHwnd,hMenu,ptCursor);
if(iMenuItem!=-1)
{
MessageBox(NULL,"OK","OK",MB_OK);
}
}
return TRUE;
}
但是我發現結果卻是任何東西都沒有返回,iMenuItem為-1,為何
leehq
2003-02-15
打赏
举报
回复
GetCursorPos获得的是屏幕坐标!
htnz
2003-02-15
打赏
举报
回复
GetCursorPos(&ptCursor);好象是相对位置;
HDC * DC=::GETDC();
mengxianbao1521
2003-02-14
打赏
举报
回复
self
leehq
2003-02-14
打赏
举报
回复
用MenuItemFromPoint函数!
当然你必须在菜单弹出后捕捉鼠标事件,推荐使用hook技术!
无敌魔仙
2003-02-14
打赏
举报
回复
我用如下代碼:
POINT ptCursor;
HWND hwndUnderCursor;
HMENU hMenu;
UINT iMenuItem;
GetCursorPos(&ptCursor);
hwndUnderCursor=WindowFromPoint(ptCursor);
hMenu=GetMenu(hwndUnderCursor);
iMenuItem=MenuItemFromPoint(hwndUnderCursor,hMenu,ptCursor);
最后發現是在GetMenu時出了問題,明明對象窗口有menu,我卻得不到菜單句柄,為何呢?
API之网络函数---整理网络函数及功能
GetMessagePos 取得消息队列中上一条消息处理完毕时的
鼠
标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定
窗口
的消息队列 PostThreadMessage 将一条...
*号查看器v0.11
它先使用
Window
From
Point
函数获得
鼠
标释放时,
鼠
标光标所在位置的
窗口
句柄
。如果
鼠
标是在本程序的
窗口
内释放,将弹出一个关于消息框。否则,就将获得的
窗口
句柄
进行判断,如果是一个密码框,就给它发送WM_...
Window
s游戏编程系列之1:GUI
窗口
界面编程及游戏入门实战
我将带领大家来系统学习
Window
s的
窗口
编程,包括消息、
窗口
、GDI绘图、游戏开发等。 本课程比较基础,非常适合初学者入门,读者可以边学习边实践。 具体的章节目录和课程内容如下所示: ---------------------------...
【Python GUI
窗口
句柄
定位】——使用
鼠
标指针定位
窗口
句柄
并获得对应的程序属性值,针对流氓软件绰绰有余
GUI
窗口
使用
鼠
标指针进行定位程序,获得程序的
窗口
句柄
、
窗口
类名、
窗口
标题、线程ID、进程ID、进程名称、进程路径、CPU用量、线程数、
窗口
定位及
鼠
标坐标,并附加五项可操作控件,强制置顶、取消置顶、显示顶部、...
win32 获取
窗口
句柄
的方法
win32 获取
窗口
句柄
的方法 第一种方法是根据
窗口
句柄
值获取
窗口
句柄
使用spy++获取指定
窗口
的
窗口
句柄
值,因为
句柄
值是16进制数,所以前面加0x,然后进行强制转换为HWND类型。 HWND hWnd=(HWND)0x00280726; ...
硬件/系统
2,640
社区成员
17,239
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章