K2T.eu :: Forum

Specjalne => API/SDK => Wątek zaczęty przez: amras w Październik 17, 2010, 11:04:06 am

Tytuł: Globalny Hotkey - problem
Wiadomość wysłana przez: amras w Październik 17, 2010, 11:04:06 am
W związku z brakiem funkcji BossKey w komunikatorze, chciałem doimplementować w/w funkcję w postaci wtyczki. Wstępnie udało mi się "poprosić" wszystkie okna o zniknięcie, pracuję nad ikoną w tray'u. Napotkałem jednak problem z założeniem globalnego hotkey. Z tego co wiem, metody są dwie;

GetAsyncKeyState() - jednak to powinno wykonywać się w pętli której wtyczka nie posiada (no chyba że chcę przywiesić komunikator),

RegisterHotKey() - tutaj bez problemu działa rejestracja (używam hwnd okna głównego wtw) - jednak nie dostaję od okna informacji kiedy hotkey zostanie wciśnięty

wydaje mi się, że RegisterHotKey() będzie lepszym wyjściem, ale nie mam pomysłu jak poprosić okno, żeby po zebraniu mojego skrótu klawiaturowego przekazało je do wtyczki... z góry dziękuję za jakikolwiek pomysł.

Tytuł: Odp: Globalny Hotkey - problem
Wiadomość wysłana przez: suawek w Październik 17, 2010, 18:49:11 pm
Albo tworzysz własne okno, któremu przekazujesz hotkey, albo używasz:
z wtwWindowMessageFilter:
  WTW_WMF_INSTALL = 'WMF/Install';  { wp - wtwWMF*, zwraca 0 przy bledzie parametrow, 1 jesli ok }
do przechwycenia komunikatu WM_HOTKEY.
Tytuł: Odp: Globalny Hotkey - problem
Wiadomość wysłana przez: amras w Październik 19, 2010, 22:01:15 pm
Głupie pytanie... ale jak tego użyć? W necie na "Window Message Filter" wyskakuje mniej więcej tyle, żeby dało się zrozumieć jak to działa, ale już nie tyle żeby użyć... chyba że nie umiem szukać.

Pomocy? :)
Tytuł: Odp: Globalny Hotkey - problem
Wiadomość wysłana przez: suawek w Październik 20, 2010, 11:03:24 am
W internecie dużo nie znajdziesz, bo to jest część SDK WTW. :P
Masz strukture:
  wtwWMF = record
      structSize : longint;
      hWindow : HWND;
      filterId : PWideChar; { id naszego filtra }
      wndProc : WTWFUNCTION;
      cbData : pointer;
    end;

Uzupełniasz ją i podajesz do WTW_WMF_INSTALL. hWindow to uchwyt jakiegoś okna WTW, może być np główne, którego uchwyt pobierzesz przez WTW_GET_MAIN_HWND.
Do wndProc będziesz dostawał komunikaty, które dostaje to okno.
Tytuł: Odp: Globalny Hotkey - problem
Wiadomość wysłana przez: amras w Październik 21, 2010, 10:43:25 am
wndProc : WTWFUNCTION;
cbData : pointer;

Nie wiem jak wypełnić te zmienne. Próbowałem chyba wszystkiego, nawet nie da się skompilować ._. Mam niejasne wrażenie że zadanie mnie przerasta. Właśnie dlatego przydałyby się okomentowane przykłady na zastosowanie sdk wtw...

Pięknie proszę o pomoc. Znowu :(

Tytuł: Odp: Globalny Hotkey - problem
Wiadomość wysłana przez: sWirus w Październik 21, 2010, 15:55:35 pm
cbData to pointer który zostanie zwrócony do funkcji wndProc (ostatni jej argument).

wndProc to funkcja typu WTWFUNCTION. W tym wypadku będą do niej wysyłane jak sądzę wiadomości z okna hWindow.
W tej chwili nie pamiętam jak dokładnie jej nagłówek wygląda ale idzie to znaleźć w API.
Tytuł: Odp: Globalny Hotkey - problem
Wiadomość wysłana przez: mucha w Październik 21, 2010, 16:42:00 pm
Właśnie dlatego przydałyby się okomentowane przykłady na zastosowanie sdk wtw...
Twoje problemy są związane z nieznajomością C++ (czy tego w czym tam to piszesz), a nie z brakiem przykładów. Patrz po nagłówkach, ściągnij SDK tlen'a bo jest bardzo podobne. Naprawdę myślisz, że ktoś zrobi przykłady dla każdej funkcji czy stałej?
WTWFUNCTION jest zdefiniowane jako:
WTW_PTR (*WTWFUNCTION)    (WTW_PARAM, WTW_PARAM, void*);
czyli robisz sobie funkcję
WTW_PTR myFunc(WTW_PARAM wP, WTW_PARAM lP, void* cbData) { return 0; }
i jako wndProc podajesz jej adres.