vc中如何激活其他程序菜单项和工具条按钮

如何使用vc去激活另一程序的菜单项和对应的工具条按钮。比如有个vb6.0的程序,怎么取获取指针?具体方法如何实现?现已经可以用spy++找到窗口句柄,后面如何做。窗口可以... 如何使用vc去激活另一程序的菜单项和对应的工具条按钮。
比如有个vb6.0的程序,怎么取获取指针?
具体方法如何实现?
现已经可以用spy++找到窗口句柄,后面如何做。

窗口可以用::EnableWindow((HWND)0x000407f0,1);
菜单项如何激活?请高手解答!

另问个问题,如何获取其他程序状态栏中某项的字符串?
非常感谢你热心的解答,第1问题已经解决,我用SPY++获取消息找到对应ID。然后用
EnableMenuItem(::GetMenu(hAct),0x2a,MF_BYCOMMAND||MF_ENABLED);
完成。
第2个还没找到答案,感谢你的帮助,给我提供了另一种思路。谢谢
展开
 我来答
Dedicatus545__
2009-04-24 · TA获得超过239个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:167万
展开全部
菜单(标准菜单#32768)
窗口主菜单可用GetMenu获得 然后用EnableMenuItem激活菜单项 上下文菜单获取比较麻烦 可以给目标窗口装载钩子 截获它的WM_INITMENUPOPUP

工具条(标准工具条ToolbarWindow32)
发送TB_GETBUTTON消息获取工具条按钮信息包含按钮ID等 发送TB_ENABLEBUTTON激活工具条按钮 但是TB_GETBUTTON有一个参数是结构体 需要在目标窗口的进程内开辟空间 可参考下面的代码
HANDLE handle, buf;
HWND hwnd = (HWND)/* 工具条句柄 */;
DWORD pid;
TBBUTTON btn;

GetWindowThreadProcessId(hwnd, &pid);

handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
buf = VirtualAllocEx(handle, NULL, 1, MEM_COMMIT, PAGE_READWRITE);

SendMessage(hwnd, TB_GETBUTTON, 1, (LPARAM)buf);
ReadProcessMemory(handle, buf, &btn, sizeof(TBBUTTON), NULL);
SendMessage(hwnd, TB_ENABLEBUTTON, btn.idCommand, MAKELPARAM(TRUE, 0));
SendMessage(hwnd, TB_INDETERMINATE, btn.idCommand, MAKELPARAM(FALSE, 0));
VirtualFreeEx(handle, buf, 0, MEM_RELEASE);
CloseHandle(handle);

状态栏(标准状态栏msctls_statusbar32)
发送SB_GETTEXT消息来获取某部分的文本 同样需要到目标窗口的进程内开辟空间 不过有些状态栏是自绘的 可能没有文本 参考下面的代码
TCHAR szText[256];
HANDLE handle, buf;
HWND hwnd = (HWND)/* 状态栏句柄 */;
DWORD pid;

GetWindowThreadProcessId(hwnd, &pid);

handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
buf = VirtualAllocEx(handle, NULL, 1, MEM_COMMIT, PAGE_READWRITE);

SendMessage(hwnd, SB_GETTEXT, 1/* 需要获取文本的部分 */, (LPARAM)buf);
ReadProcessMemory(handle, buf, szText, sizeof(szText), NULL);
VirtualFreeEx(handle, buf, 0, MEM_RELEASE);
CloseHandle(handle);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式