我正在尝试禁用或隐藏其他应用程序中的按钮
我收到按钮的按钮,但是当我拨打SendMessage
[DllImport("user32.dll", SetLastError = true)]
public static extern bool SendMessage(IntPtr hWnd, uint Msg, int wParam,
bool lParam);
bool x = SendMessage(hndl, TB_HIDEBUTTON, 0, false);
没有任何反应,x总是返回false。我也试过TB_DELETEBUTTON
答案 0 :(得分:3)
你发错了讯息。获取按钮的句柄,然后拨打EnableWindow(hndl, FALSE);
(或者如果要隐藏它,请尝试ShowWindow(hndl, SW_HIDE);
)。
答案 1 :(得分:0)
TB_HIDEBUTTON是一个窗口消息,用于隐藏工具栏中的按钮。 如果你想这样做,你的代码有问题,你必须提供按钮标识作为SendMessage的第三个参数,转到link text以供参考。
答案 2 :(得分:0)
以下是 Internet Explorer 11 的示例(从注入 iexplore 的 dll 调用):
HWND Suchleiste = FindWindowEx(GetActiveWindow(), NULL, NULL, "Navigationsleiste"); // WorkerW
Suchleiste = FindWindowEx(Suchleiste, NULL, "ReBarWindow32", NULL);
AddressbarRight = FindWindowEx(Suchleiste, NULL, "ControlBandClass", NULL);
AddressbarRight = FindWindowEx(AddressbarRight, NULL, "ToolbarWindow32", NULL);
TBBUTTON tButton;
SendMessage(AddressbarRight, TB_GETBUTTON, 0, (LPARAM)&tButton); // 0 == Home button
SendMessage(AddressbarRight, TB_HIDEBUTTON, tButton.idCommand, (LPARAM)MAKELONG(TRUE, 0)); // idCommand == 1
//SendMessage(AddressbarRight, TB_ENABLEBUTTON, tButton.idCommand, (LPARAM)MAKELONG(FALSE, 0)); // makes it inactive
每个人都说要使用“DestroyWindow”或“EnableWindow”之类的。如果我正确解释“inspect”和“spyxx_amd64”输出,这些按钮不是窗口。
事件:
https://docs.microsoft.com/en-us/windows/win32/controls/toolbar-control-reference
功能:
https://docs.microsoft.com/en-us/windows/win32/api/commctrl
ImageList_ 函数不能正常工作。就像我所说的“ImageList_Remove”:
HIMAGELIST mlist=(HIMAGELIST)::SendMessage(AddressbarRight, TB_GETIMAGELIST, 0, 0);
ImageList_Remove(mlist, 0);
但是当我将鼠标悬停在按钮上时它仍然可见,但看起来已经坏了。但事件:
SendMessage(AddressbarRight, TB_DELETEBUTTON, 0, 0);
完全删除图标。永远。此外,如果您使用事件,则不需要链接到“comctl32”。
删除按钮时要小心!索引减少,因此您删除索引 0,索引 1 取其索引(变为 0)。所以删除几个按钮的时候,往回走,从最高的索引开始。