iglezz
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Disclaimer: в WinAPI откровенно слаб, могу ошибаться в терминах и остальном :) Для сокращения: TLB = TrueLaunchBar DWK = Disable Windows Keys plugin Скитания по интернету в поисках инфы по теме и созерцание дизассемблированного кода плагина в IDA навели на такие мысли: Глобальный hotkey делается функцией RegisterHotKey(handle окна, id, модификатор, клавиша) а удаляется, соответственно, UnregisterHotKey(handle окна, id). Хоткеи Win+# зарегистрированы модулем, реализующим таскбар с кнопкой пуск и прочим, с именем класса "Shell_TrayWnd". Чтобы освободить нужные нам хоткеи мы должны работать в потоке этого модуля, отсюда и требование панели TLB с кнопкой DWK быть на панели задач, а не отдельным плавающим окошком. Его handle найти легко id сложнее и это я пытаюсь понять (пока безуспешно) Вот так выглядит псевдокод интересного нам участка: Код: int __fastcall sub_180002A20(__int64 a1) { __int64 v1; // rdi HWND v2; // rax HWND v3; // rsi _DWORD *v4; // rdi int *v5; // rbx v1 = a1; v2 = FindWindowW(L"Shell_TrayWnd", 0i64); // находим хэндл v3 = v2; if ( v2 ) { v4 = (_DWORD *)(v1 + 640); // какая-то магия :) v5 = (int *)&unk_1800950C8; // какая-то магия :) do { // Профит !! if ( *v4 ) LODWORD(v2) = UnregisterHotKey(v3, *v5); else LODWORD(v2) = RegisterHotKey(v3, *v5, *(v5 - 2), *(v5 - 1)); v5 += 3; ++v4; } while ( (__int64)v5 < (__int64)&qword_1800951A0 ); } return (int)v2; } | | Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 00:38 11-11-2019 | Исправлено: iglezz, 00:43 11-11-2019 |
|