Autor Wątek: WindowMessageFilter Hotkeys  (Przeczytany 456 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Offline VuYeK

  • Junior Developer
  • Narybek
  • *
WindowMessageFilter Hotkeys
« dnia: Luty 16, 2017, 10:46:06 am »
Cześć,
Mam nadzieje że ktoś tu jeszcze żyje ;d.      Otóż musze zakodzić sobie pare wtyczek do WTW i napotkałem pewien problem.      Potrzebuje jakieś pomocy bo nie bardzo wiem co jest nie tak.      Otóż chce zrobić jakiś global hotkey który cośtam powoduję.      I robie następująco:

w pliku .     h mam:
static WTW_PTR onHotKey(WTW_PARAM wParam, WTW_PARAM lParam, void *ptr);

w .     cpp:
To w onLoad:
		WTW_PTR ptr = 0;
ptr = wtw->fnCall(WTW_GET_MAIN_HWND_EX, 0, NULL);
RegisterHotKey((HWND) ptr, 0, MOD_SHIFT | MOD_CONTROL, 'X');
MSG msg = { 0 };

wtwWMF wmf;
//initStruct(wmf);
wmf.filterId = L"HotKeys";
wmf.cbData = this;
wmf.wndProc = onHotKey;
wmf.hWindow = (HWND) ptr;

if (!wtw->fnCall(WTW_WMF_INSTALL, reinterpret_cast<WTW_PARAM>(&wmf), NULL)) {
__LOG_C(wtw, L"[wtwRadioHUB] Nie udało się załadować WMF", 0);
}
else {
__LOG(wtw, L"ASD", L"WindowMessageFilter installed", 1);
}

A tu metoda:
WTW_PTR PluginController::onHotKey(WTW_PARAM wParam, WTW_PARAM lParam, void *ptr)
{
wtwWndProcParam * proc = (wtwWndProcParam *)wParam;
switch (proc->message)
{
case WM_HOTKEY:
::MessageBox(NULL, L"Przycisk X kliknięty", L"asd", MB_OK);
proc->filterResult = WMF_RESULT_EAT_IT;
break;
}
return 0;
}

Co robię źle :C ? Niestety nie działa, na debugu nawet nie wchodzi do tej metody nigdy.    Z góry dzięki za pomoc :D

Dodam że w konsoli drukuje "WindowMessageFilter installed"
« Ostatnia zmiana: Luty 16, 2017, 11:13:54 am wysłana przez VuYeK »

Offline VuYeK

  • Junior Developer
  • Narybek
  • *
Odp: WindowMessageFilter Hotkeys
« Odpowiedź #1 dnia: Luty 16, 2017, 22:34:12 pm »
Częściowo udało mi się uporać z problemem
(jakby ktoś kiedyś chciał - źle pobierałem hwnd okna)
HINSTANCE hMainWindow;
wtw->fnCall(WTW_GET_MAIN_HWND_EX, reinterpret_cast<WTW_PARAM>(&hMainWindow), NULL);
I później to przekazane dalej. 

Aktualnie na debugu wchodzi ładnie do metody i działa poprawnie np dla WM_CLOSE, ale nie wyłapuje WM_HOTKEY, pytanie - dlaczego? Wydaje mi się że skróty są dobrze zarejestrowane bo jak zarejestruje sam "X" to nie działa w wyszukiwarce w oknie.   Proszę o jakieś wskazówki ;d