Mamy system, w którym zazwyczaj są dwa procesy uruchomione w tym samym systemie. Jeden proces obsługuje GUI, a inne działa jak usługa (choć z przyczyn historycznych nie jest usługą, tylko exe bez widocznego okna).Czy można śledzić PostMessage między procesami?
Dwa procesy podejmują IPC głównie za pośrednictwem zarejestrowanych wiadomości asynchronicznie - tj. Używamy RegisterWindowMessage()
w obu procesach w celu zdefiniowania dużego zestawu komunikatów, które skutecznie tworzą interfejs API dla procesu serwera.
Napisałem "bezobsługową" aplikację monitorującą, która używa SetWindowsHookEx()
do monitorowania i wyświetlania kolejek komunikatów obu procesów oraz zapewnia pewien poziom dekodowania sposobu, w jaki API jest wykorzystywane i w jaki sposób powiadomienia są propagowane do Proces GUI (każde pojedyncze okno może subskrybować powiadomienia bezpośrednio z serwera).
Tak więc, istnieje duża liczba wiadomości w obu kierunkach, więc mam filtrowanie i podsumowania itp., Więc mogę skupić się na konkretnej aktywności. Wszystko to można zrobić bez wpływu na kod na żywo, co jest dobre.
Wszystko działa dobrze, ale teraz bardzo przydatna byłaby możliwość "oznaczenia" wiadomości pochodzącej z GUI, dzięki czemu mogę śledzić tę samą wiadomość, gdy jest przetwarzana przez serwer. Byłoby to niezwykle przydatne do debugowania i diagnozowania problemów systemowych, ale nie mogę znaleźć czystej drogi (właściwie nie mogę znaleźć!) Robienia tego bez dodawania takiego wsparcia do naszego zarejestrowanego interfejsu API wiadomości, który byłby dużo pracy i wiąże się z większym ryzykiem, niż jestem w tej chwili zadowolony. Dodatkowym utrudnieniem jest fakt, że serwer przetwarza wstępnie niektóre wiadomości, a następnie wykonuje je ponownie, aby komunikat początkowy mógł zostać "utracony".
Czy ktoś tutaj rozwiązał ten problem? Jeśli tak, czy możesz mi podać jakieś wskazówki? Jeśli nie, to czy istnieją jakieś udokumentowane lub nieudokumentowane sposoby dodania małego bloku danych do wiadomości systemu Windows i pobrania go później? Spojrzałem na SetMessageExtraInfo()
, ale wydaje się, że jest to kolejka zamiast per-message.
Jeśli żaden z Twoich zarejestrowanych wiadomości nie używa zarówno 'wParam', jak i' lParam', możesz tam przechowywać swoje tagi. –
Dzięki - ale 'wParam' i' lParam' są dobrze wykorzystane :-(W rzeczywistości API przekazuje dużo danych w wiadomościach za pośrednictwem 'struct' w FRP, zbyt wiele szczegółów do wyjaśnienia tutaj. chcesz zepsuć te "struct", co jest problemem –
To nie jest opcja, przestań tam patrzeć –