vc中如何啟用其他程式選單項和工具條按鈕

2021-05-25 06:39:44 字數 1547 閱讀 8708

選單(標準選單#32768)

視窗主選單可用getmenu獲得 然後用enablemenuitem啟用選單項 上下文選單獲取比較麻煩 可以給目標視窗裝載鉤子 截獲它的wm_initmenupopup

工具條(標準工具條*******window32)

傳送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);

如何向系統選單中動態新增選單項

1 什麼是系統選單?所謂系統選單就是指你在應用程式標題欄上滑鼠右鍵操作時彈出的選單,如下圖所示 2 如何在系統選單中動態新增選單項 修改系統選單 cmenu system menu system menu pfrm getsystemmenu false 正常檢視 n tf12 全螢幕檢視 f tf...

VC 實現選單項及工具欄按鈕同步禁用與啟用

也許太簡單了,搜了n久,問了n多人,都沒有找到解決異常的辦法。vc 6.0 2010 中已經指明update command ui就是用來設定選單及命令按鈕的狀態的。完全沒有必要這樣 會產生異常 cmenu menu getmenu 經驗證vc6.0中應該是 cmenu menu afxgetmai...

在對話方塊程式中操作選單項

在做基於對話方塊的程式時,有時我們要在這個對話方塊中載入選單,於是可能要在對話方塊程式 中修改選單薦的狀態或操作選單項的其它操作,可是當我們用 操作選單項時 getmenu getsubmenu 0 enablemenuitem id isp displaymemory,mf bycommand m...