Я пытаюсь перенести правую кнопку мыши, чтобы действовать как кнопка средней мыши в C ++ в Windows. < /p>
Что я сделал < /h3>
Я написал код, используя необработанный ввод (см. Ниже). происходит в то же время, поэтому я получаю как с правой кнопкой, так и с средним щелчком. как переигрывание Autohotkey. < /li>
< /ul>
Что я хочу < /h3>
Когда я нажимаю правую кнопку мыши, я хочу полностью блокировать исходную кнопку правой стороны. Как будто я физически нажал среднюю кнопку. /> Поведение должно быть мгновенным и естественным, без заметной задержки, точно так же, как если я физически нажимал среднюю кнопку.#include
#include
// SendInput to simulate middle click
void SendMiddleClick(bool down) {
INPUT input = { 0 };
input.type = INPUT_MOUSE;
input.mi.dwFlags = down ? MOUSEEVENTF_MIDDLEDOWN : MOUSEEVENTF_MIDDLEUP;
SendInput(1, &input, sizeof(INPUT));
}
// Window procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
if (msg == WM_INPUT) {
UINT dwSize = 0;
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
if (dwSize > 0) {
BYTE* lpb = new BYTE[dwSize];
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) == dwSize) {
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE) {
auto flags = raw->data.mouse.usButtonFlags;
if (flags & RI_MOUSE_RIGHT_BUTTON_DOWN) SendMiddleClick(true);
if (flags & RI_MOUSE_RIGHT_BUTTON_UP) SendMiddleClick(false);
}
}
delete[] lpb;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int main() {
WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = TEXT("RawInputDemo");
RegisterClass(&wc);
HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("Raw Input Window"),
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
300, 200, NULL, NULL, wc.hInstance, NULL);
RAWINPUTDEVICE rid;
rid.usUsagePage = 0x01;
rid.usUsage = 0x02;
rid.dwFlags = RIDEV_INPUTSINK;
rid.hwndTarget = hwnd;
RegisterRawInputDevices(&rid, 1, sizeof(rid));
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... without-de
Как заблокировать правую кнопку мыши и без промедления конвертировать в кнопку средней мыши (например, Autohotkey)? ⇐ C++
Программы на C++. Форум разработчиков
1758511965
Anonymous
Я пытаюсь перенести правую кнопку мыши, чтобы действовать как кнопка средней мыши в C ++ в Windows. < /p>
Что я сделал < /h3>
Я написал код, используя необработанный ввод (см. Ниже). происходит в то же время, поэтому я получаю как с правой кнопкой, так и с средним щелчком. как переигрывание Autohotkey. < /li>
< /ul>
Что я хочу < /h3>
Когда я нажимаю правую кнопку мыши, я хочу полностью блокировать исходную кнопку правой стороны. Как будто я физически нажал среднюю кнопку. /> Поведение должно быть мгновенным и естественным, без заметной задержки, точно так же, как если я физически нажимал среднюю кнопку.#include
#include
// SendInput to simulate middle click
void SendMiddleClick(bool down) {
INPUT input = { 0 };
input.type = INPUT_MOUSE;
input.mi.dwFlags = down ? MOUSEEVENTF_MIDDLEDOWN : MOUSEEVENTF_MIDDLEUP;
SendInput(1, &input, sizeof(INPUT));
}
// Window procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
if (msg == WM_INPUT) {
UINT dwSize = 0;
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
if (dwSize > 0) {
BYTE* lpb = new BYTE[dwSize];
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) == dwSize) {
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE) {
auto flags = raw->data.mouse.usButtonFlags;
if (flags & RI_MOUSE_RIGHT_BUTTON_DOWN) SendMiddleClick(true);
if (flags & RI_MOUSE_RIGHT_BUTTON_UP) SendMiddleClick(false);
}
}
delete[] lpb;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int main() {
WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = TEXT("RawInputDemo");
RegisterClass(&wc);
HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("Raw Input Window"),
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
300, 200, NULL, NULL, wc.hInstance, NULL);
RAWINPUTDEVICE rid;
rid.usUsagePage = 0x01;
rid.usUsage = 0x02;
rid.dwFlags = RIDEV_INPUTSINK;
rid.hwndTarget = hwnd;
RegisterRawInputDevices(&rid, 1, sizeof(rid));
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79771205/how-to-block-right-mouse-button-and-convert-it-to-middle-mouse-button-without-de[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия