C++ 禁用右键单击按钮[C+;+;]

C++ 禁用右键单击按钮[C+;+;],c++,C++,有没有办法禁用右键单击按钮?我尝试使用鼠标钩子,当你运行程序时,它只是简单地禁用右击按钮 #include <iostream> #include <vector> #include <algorithm> #include <cstdlib> #include <conio.h> #define _WIN32_WINNT 0x0500 #define WM_RBUTTONDOWN 0x0204 #include <window

有没有办法禁用右键单击按钮?我尝试使用鼠标钩子,当你运行程序时,它只是简单地禁用右击按钮

#include <iostream>
#include <vector>
#include <algorithm>

#include <cstdlib>
#include <conio.h>
#define _WIN32_WINNT 0x0500
#define WM_RBUTTONDOWN 0x0204
#include <windows.h>

/* Disable mouse using low-level mouse hook */
HHOOK miHook;

    //Starting Hook Procedure
    LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode == HC_ACTION) {
        MSLLHOOKSTRUCT &msll = *(reinterpret_cast<MSLLHOOKSTRUCT*>(lParam));

        if (wParam == WM_RBUTTONDOWN) {
                cout << "OOO";
            if (WM_RBUTTONDOWN) {
                return -1; // Make this click be ignored
            }
        }
    }
    return CallNextHookEx(miHook, nCode, wParam, lParam);
}

int main() {
    system("pause");
}
#包括
#包括
#包括
#包括
#包括
#定义_WIN32_WINNT 0x0500
#定义WM_RBUTTONDOWN 0x0204
#包括
/*使用低级鼠标挂钩禁用鼠标*/
HHOOK-miHook;
//起钩程序
LRESULT回调LowLevelMouseProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM){
如果(nCode==HC\U动作){
MSLLHOOKSTRUCT&msll=*(重新解释强制转换(lParam));
如果(wParam==WM_RBUTTONDOWN){

cout是的,您可以通过安装低级鼠标挂钩来禁用鼠标事件。如果
nCode
大于或等于零,则您的
LowLevelMouseProc
回调应返回非零值。此外,您不仅应阻止
WM_rbuttonown
窗口消息,还应阻止
WM_RBUTTONUP
,否则目标应用程序可能在其中工作没错

这段代码很奇怪:

if (wParam == WM_RBUTTONDOWN) {
                cout << "OOO";
            if (WM_RBUTTONDOWN) {
                return -1; // Make this click be ignored
            }
另外,回调是通过处理windows消息在线程上下文中运行的,因此代码必须具有消息队列,它不能是简单的控制台应用程序

这个钩子是在安装它的线程的上下文中调用的。 调用是通过向安装 因此,安装挂钩的螺纹必须具有 消息循环


但是,系统范围的钩子可能非常危险。一个小错误很容易使整个系统不稳定。通过在
SetWindowsHookEx
调用中指定其消息线程id,仅为目标应用程序安装钩子。您的另一个选项是通过替换其消息处理例程和筛选来对目标窗口进行子类化鼠标事件消息。

人们到底为什么坚持要从用户手中夺走功能?你可以在应用程序中选择忽略右键单击而不添加功能。但是,不,你有一个更好的主意-你想删除功能。
if((WM_RBUTTONDOWN == wParam)||(WM_RBUTTONDOWN == wParam))
  return(-1);