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个还没找到答案,感谢你的帮助,给我提供了另一种思路。谢谢 展开
比如有个vb6.0的程序,怎么取获取指针?
具体方法如何实现?
现已经可以用spy++找到窗口句柄,后面如何做。
窗口可以用::EnableWindow((HWND)0x000407f0,1);
菜单项如何激活?请高手解答!
另问个问题,如何获取其他程序状态栏中某项的字符串?
非常感谢你热心的解答,第1问题已经解决,我用SPY++获取消息找到对应ID。然后用
EnableMenuItem(::GetMenu(hAct),0x2a,MF_BYCOMMAND||MF_ENABLED);
完成。
第2个还没找到答案,感谢你的帮助,给我提供了另一种思路。谢谢 展开
展开全部
菜单(标准菜单#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);
窗口主菜单可用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);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询