禁用或隐藏其他应用程序中的按钮

时间:2010-11-27 01:59:14

标签: c# api

我正在尝试禁用或隐藏其他应用程序中的按钮

我收到按钮的按钮,但是当我拨打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

3 个答案:

答案 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)。所以删除几个按钮的时候,往回走,从最高的索引开始。