
第一步,建立基于对话框的工程。
第二步,添加menu资源,添加菜单项。
第三步, 在menu资源界面进入ClassWizard,此仿罩姿时会闷孙d出一个对话框,选中“select an exiting class”,然后在select class对话框中选中主对话备绝框类。然后点OK。
第四步, 打开主对话框的属性,general下有menu选项,选中刚才添加的mune资源的ID.
第五步,为菜单项(在窗口类里)添加响应的函数。
lpszMenuNamePointer to a null-terminated character string that specifies the resource name of the class menu, as the name appears in the resource file. If you use an integer to identify the menu, use the MAKEINTRESOURCE macro. If this member is NULL, windows belonging to this class have no default menu.
================
也就是说,你需要用派闹MAKEINTRESOURCE宏来转换IDR_TYPER,返友而尘世罩不是直接强制转换(LPSTR)。
这样改:
MAKEINTRESOURCE(IDR_TYPER)
=========================
菜单(标准菜单#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)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)