Autor Wątek: Globalny Hotkey - problem  (Przeczytany 2064 razy)

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

Offline amras

  • Narybek
  • *
Globalny Hotkey - problem
« dnia: 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ł.


Offline suawek

  • Senior Developer
  • Młodzież
  • *
Odp: Globalny Hotkey - problem
« Odpowiedź #1 dnia: 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.

Offline amras

  • Narybek
  • *
Odp: Globalny Hotkey - problem
« Odpowiedź #2 dnia: 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? :)

Offline suawek

  • Senior Developer
  • Młodzież
  • *
Odp: Globalny Hotkey - problem
« Odpowiedź #3 dnia: 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.

Offline amras

  • Narybek
  • *
Odp: Globalny Hotkey - problem
« Odpowiedź #4 dnia: 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 :(


Offline sWirus

Odp: Globalny Hotkey - problem
« Odpowiedź #5 dnia: 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.
Oblałem test Turinga... damn ;/

Offline mucha

  • Senior Developer
  • Młodzież
  • *
Odp: Globalny Hotkey - problem
« Odpowiedź #6 dnia: 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.