Pokazywanie identyfikatorów komunikatów

0

Witam,
chciałbym napisać w C pierwszy program dla Windows, który miałby działać następująco:

  • pokaż okno;
  • do momentu zamknięcia okna wypisuj w nim (na bieżąco, jeden pod drugim) komunikaty (ich identyfikatory) trafiające do okna.

Spodziewam, się, że jak np. przesunę okienko, nacisnę jakiś klawisz lub przycisk myszy, to te różne nazwy komunikatów będą się dopisywać.
Czy jest to jakieś (nie wiadomo jakie) wyzwanie, bo przykładu nie udało mi się znaleźć?

0

Zadanie wygląda na całkiem proste, ale nie nader trywialne. Pochwal się wynikiem jak skończysz.

0
kq napisał(a):

Zadanie wygląda na całkiem proste, ale nie nader trywialne. Pochwal się wynikiem jak skończysz.

Czemu spodziewasz się, że nie jest trywialne?
Może i nie jest, bo nie udało mi się znaleźć gotowca.
I nie ukrywam, że jestem zdziwiony, bo to powinno być bardziej niż banalne.

1
Darek napisał(a):

Czy jest to jakieś (nie wiadomo jakie) wyzwanie, bo przykładu nie udało mi się znaleźć?

Sama chęć napisania tego programu w czystym Windows API jest wyzwaniem. ;)

Mam już za sobą pisanie czegoś podobnego, tyle że nie dla okna, a dla komponentu formatowalnej etykiety i nie w C/C++, a w Pascalu. Takiego programiku potrzebowałem do podglądania obsługi komunikatów i danych przez nie niesionych – kiedy kontrolka wykrywa ruch kursora, kiedy wciskania i puszczania klawiszy, podgląd współrzędnych kursora i kolejności odbieranych komunikatów itd.

IMO jeśli chodzi o identyfikatory komunikatów, to raczej nie znajdziesz w bibliotece standardowej gotowego mechanizmu do konwersji liczbowego ID na ciąg znaków. Tak więc będziesz musiał sobie napisać funkcję, która to wykona – zwykły switch wystarczy. Do ekstrahowania danych z lParam i wParam są gotowe funkcje.

Komunikaty standardowo łapiesz w głównej pętli i robisz z nimi co chcesz – filtrowanie na podstawie uchwytu, konwersja ID na nazwę, wypakowanie danych, wrzucenie ich ”gdzieś” (np. do listbox czy logu) itd. Nie powinieneś mieć z tym większych problemów.

Darek napisał(a):

Czemu spodziewasz się, że nie jest trywialne?
Może i nie jest, bo nie udało mi się znaleźć gotowca.

To że nie znalazłeś gotowca, wcale nie oznacza, że zadanie jest skomplikowane. To akurat nie jest.

0
MarekR22 napisał(a):

Nie sprawdzałem, ale czy nie chodzi coś o coś takiego:
https://docs.microsoft.com/en-us/windows/desktop/winauto/accessible-event-watcher
lub https://docs.microsoft.com/en-us/windows/desktop/winauto/inspect-objects

Dzięki, nie znałem i nie wiedziałem jak wygooglać.
Generalnie to tak, rzecz w tym, że:

  1. nie do końca rozumiem, które komunikaty to pokazuje (poklikałem, jeszcze nie przeczytałem);
  2. mnie interesuje klawiatura, mysz i operacje na oknie (przesuwanie, zmiana rozmiaru, minimalizowanie itd...) - te narzędzie jakoś nie wszystko to pokazują i jeszcze nie rozumiem dlaczego.
1

Robiłem coś takiego. Było dosyć proste.

Mała podpowiedź: stwórz program konsolowy. Otwórz okno. Komunikaty wyświetlaj w konsoli printfem, coby nie ingerować w samo okno.

0

Dzięki!
Mam jeszcze (zanim zacznę) pytanie:

  • czy (mając aktywne to utworzone okno) powinienem bez dodatkowych funkcji dostawać komunikaty o ruchach myszy/klawiatury i okna? Np. sam ruch myszy jest zdarzeniem? Czy dopiero np. wciśnięcie LPM?
1

To, co chcesz wygóglać Darku zowie się "WinAPI mousetracking" oraz w szerszym zakresie "WinAPI mouse handling"

0

Aj, jeszcze ostatnie w tym wątku, bo bym zapomniał!

Czy ja to zrobię w C? (nie c++ czy c#) w WinApi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1