PInvoke

Za pomocą mechanizmu PInvoke włącz do kodu zarządzanego w C# funkcję Komunikat() z biblioteki DLL tworzonej na poprzednich zajęciach i uruchom ją.

  • utwórz projekt aplikacji .Net w C# (np. aplikacja konsolowa)
  • dodaj przestrzeń nazw: System.Runtime.InteropServices
  • użyj atrybutu DLLImportAtributte do włączenia funkcji Komunikat do jako statyczną metodę jednej z klas w C# i przetestuj działanie tej funkcji

Dodaj do projektu z zadania 1 następujące funkcjonalności:

Zaimplementuj aplikację okienkową w .NET, która zawiera kontrolkę edycyjną oraz przycisk. Po wciśnięciu przycisku tekst z kontrolki edycyjnej jest wysyłany do wszystkich działających procesów „Notepad.exe” (a konkretnie do ich kontrolek edycyjnych). Uwaga: powinna być uruchomiona przynajmniej jedna aplikacja Notepad.exe, nie musi posiadać focusa.

  • uruchom aplikację Notepad.exe i zlokalizuj kontrolkę edycyjną związaną z tym programem za pomocą programu Spy++. Uwaga: aplikacja Spy++ wymaga uprawnień administracyjnych.
  • za pomocą metody GetProcessesByName uzyskaj listę wszystkich procesów aplikacji Notepad
  • za pomocą funkcji FindWindowEx zdobądź uchwyt do kontrolki edycyjnej procesu notatnika.
  • po kliknięciu przycisku wyślij komunikat WM_SETTEXT z zawartością pola edycyjnego z twojej aplikacji do kontrolki edycyjnej w aplikacji Notepad.exe
  • aby przesłać tekst w komunikacjie można umieścić go w niezarządzanej pamięci za pomocą metody Marshal.StringToHGlobalUni()
  • dodaj przycisk uruchamiający kolejną instancję aplikacji Notatnik za pomocą metody Process.Start()
  • komunikat WM_SETTEXT wstawia podany tekst do okna
  • dodaj nową kontrolkę edycyjną oraz przycisk. Po wciśnięciu przycisku wysyłany jest komunikat WM_CLOSE do wszystkich okien, których nazwa pasuje do tekstu wpisanego w kontrolce edycyjnej

Napisz aplikację Windows Form, która wyświetla w kontrolce ListBox, wszystkie komunikaty napływające do okna głównego aplikacji. * dociąż metodę WndProc(), która umieszcza informacje na temat napływających komunikatów w kontrolce ListBox

  • dodaj przycisk pozwalający wyczyścić zawartość kontrolki ListBox
  • dodaj CheckBox, którego zaznaczenie powoduje włączenie/wyłączenie zapisywania komunikatów w kontrolce ListBox

Napisz aplikację Windows Form, która rejestruje w systemie komunikat „KomunikatWinApi” i pozwala wysłać go do wszystkich innych aplikacji.

  • zarejestruj komunikat KomunikatWinApi za pomocą funkcji RegisterWindowMessage
  • dodaj przycisk powodujący wysłanie zarejestrowanego komunikatu
  • dodaj kontrolkę ListBox, w której będą umieszczane informacje o komunikatach wysłanych z innych aplikacji
  • uruchom kilka instancji aplikacji i przetestuj mechanizm rozsyłania wiadomości