Pokazywanie identyfikatorów komunikatów

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źć?

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Szczecin
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.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:10 minut
0

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
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.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
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?
MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Warszawa
  • Postów:1454
1

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


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB
0

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

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

MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Warszawa
  • Postów:1454
0

Zrobisz, WinAPI jest napisane w C właśnie.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Poznań
  • Postów:8769
1

Temat wydawał mi się dziwnie znajomy :)

Wprawdzie nie mam teraz tej książki przy sobie, ale od czego jest internet :D Bardzo podobny wątek był poruszony w książce Charlesa Petzolda "Programming Windows". Teraz to może mało popularna pozycja, ale w "moich czasach" od niej się zaczynało ;)

Znalazłem w necie link do niej w postaci PDF - http://vulms.vu.edu.pk/Courses/CS410/Downloads/Charles%20Petzold%20-%20Programming%20Windows%20-%205th%20Ed.pdf , nie wiem jak to się ma do praw autorskich, ale skoro nie ja to uploadowałem, to pewnie wielkiej zbrodni nie popełniam dzieląc się tym adresem (a w razie czego wystarczy w google wpisać "Petzold windows pdf" ).

Od strony 87 masz listingi programu sysmets (jest tam kilka jego wariacji). Myślę, że jak się z tym zapoznasz, to nie będziesz miał problemu ze zrobieniem dokładnie tego, czego chcesz.

A swoją drogą - książka jest mega wartościowa i warto, żebyś się z nią zapoznał.


edytowany 1x, ostatnio: cerrato
MasterBLB
+1000 co do Petzolda. Na swój egzemplarz polowałem z miesiąc ^^
cerrato
A które wydanie masz? Moja wersja (chyba wydanie 2) nazywa się "Programming Windows 95" :D A kupowałem kiedy była pozycją aktualną, czyli...o fuck, jakieś 20 lat temu... No i znowu się poczułem stary :(
MasterBLB
Wrócę z roboty to zerknę które wydanie mam.
0

Dzięki.
Książkę odpaliłem. Te kody źródłowe będą działaś na nowych windowsach?
I co ciekawe już na samym początku mowa o win98 - dobrze pamiętam, że na win95 nie byłoby szans?

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Poznań
  • Postów:8769
0

Zasadniczo Windows API się nie zmieniło. Znaczy - z każdą wersją dochodzą nowe rzeczy, ale przy tym jest zachowana wsteczna kompatybilność.

Przeskok był z systemów 16-bitowych na 32-bit, a potem to już właściwie wszystko działa tak samo ;) Jest to oczywiście pewne uproszczenie, ale jak pisałem wcześniej - kompatybilność MUSI zostać zachowana. Tak więc apka, która była napisana dla Win95, w 99% przypadków powinna chodzić bezproblemowo z nowszymi Windowsami.

o win98 - dobrze pamiętam, że na win95 nie byłoby szans

Były by szanse. od 95 wszystkie nowsze Windowsy są 32-bitowe, więc kompatybilne z API opisanym w tej książce. Oczywiście - w oparciu o nią nie uzyskasz pełnego zakresu efektów, które są dostępne w nowszych Windowsach (chociażby pokazywanie progressu na przycisku aplikacji w pasku zadań), ale to wszystko (być może z jakimiś niewielkimi wyjątkami) co się w niej znajduje jest aktualne i działające.


edytowany 1x, ostatnio: cerrato
0
cerrato napisał(a):

[...] Tak więc apka, która była napisana dla Win95, w 99% przypadków powinna chodzić bezproblemowo z nowszymi Windowsami.

Wliczając w to W10?

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Poznań
  • Postów:8769
1

Co do zasady - tak.

Mogą się pojawić czasami problemy, jeśli np. używa DX albo jakichś "nietypowych" rozwiązań. Ale takie "standardowe" aplikacje - typu "stwórz okno, dodaj przyciski i menu, odbieraj zdarzenia z klawiatury i myszy i odpowiednio na nie reaguj" powinny dać radę.
Powtarzam - nie wykorzystasz w ten sposób pełni możliwości, jakie dają "nowe" Windowsy, ale aplikacja powinna działać.

Nie sugeruj się tym "windows 98" (albo 95) w książce - bo to, że były one pisane w tamtych czasach, nie oznacza wcale, że są nieaktualne. Cały system komunikatów, uchwyty okien, konteksty urządzeń, wskaźniki na struktury danych itp. działają tak samo, jak dawniej. Owszem - z czasem sa dodawane nowe elementy, ale nikt nie zmienia albo usuwa starych, bo to by było samobójstwo. Idea jest taka, że aplikacje pisane dla starszych Windowsów powinny działać na nowych. Przy czym podkreślam - od Win95 wzwyż. Bo od tego systemu mamy 32 bity i wielozadaniowość z wywłaszczaniem.


edytowany 2x, ostatnio: cerrato
0

Dzięki!

MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Warszawa
  • Postów:1454
2

Masz tu przykład obsługi ruchu myszy w WinAPI - na prawo, u góry masz odnośniki do innych części dokumentu, w tym requirement gdzie jest czarno na białym napisane, jaka wersja systemu jest wspierana, oraz co trzeba dodać do projektu aby z danej funkcjonalności skorzystać.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)