PInvoke
-
PInvoke.net wiki biblioteki PInvoke.NET zawierające pasujące sygnatury typów niezbędnych do przeprowadzenia marshallingu
-
-
Zadanie 1
Za pomocą mechanizmu PInvoke włącz do kodu zarządzanego w C# funkcję Komunikat()
z biblioteki DLL z poprzednich zajęć (biblioteka.zip)
Zadanie 2
Zaimplementuj aplikację, która korzystając z mechanizmów PInvoke woła funkcje systemowe WinAPI i
wyświetla następujące informacje:
Zadanie 3
Zaimplementuj aplikację okienkową w .NET (WindowsForms lun WPF), która pozwala przesłać zadany tekt do wszystkich działających aplikacji notatnik („Notepad.exe”):
okno aplikacji zawiera kontrolke edycyją oraz przycisk „wyślij”. Po wciśnięciu tego przycisku tekst z kontrolku edycyjnej jest wysyłany do wzystkich działających instancji aplikacji notanika,
metoda
GetProcessesByName pozwala uzyskać listę wszystkich procesów o zadanej nazwie (np.
Notepad
),
funkcja
FindWindowEx pozwal uzyskać uchwytokna lub kontrolki o podanej nazwie lub o podanej klasie okien (kontrolka edycyjna należy do klasy okien „Edit”),
wykorzystaj komunikat
WM_SETTEXT
do przesłania tekstu do notatnika. Przesłanie tekstu w komunikacie wymaga umieszczenia go w niezarządzanej pamięci za pomocą metody
Marshal.StringToHGlobalUni(),
dodaj do aplikacji przycisk uruchamiający kolejną instancję aplikacji Notatnik za pomocą metody
Process.Start(),
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.
Lokalizację kontrolki edycyjnej i nazwę klasy okien kontrolki w aplikacji Notepad.exe mozna zlokalizować za pomocą programu Spy++. Uwaga: aplikacja Spy++ wymaga uprawnień administracyjnych.
Zadanie 4
Napisz aplikację okienkową Windows Forms, 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.
Zadanie 4a
Napisz aplikację okienkową WPF, która wyświetla w kontrolce ListBox, wszystkie komunikaty (nazwy komunikatów lub ich numery) napływające do okna głównego aplikacji.
uzyskaj dostep do okna Win32, w którym osadzona jest zawartość aplikacji WPF za pomocą metody
FromVisual(). Metoda ta pozwala uzyskać obiekt klasy
HwndSource, która dostarcza uchwyt i dostep implementacji okna Win32 oraz implementuje własną procedurę okna.
dodaj własną implementację procedury okna w postacu delegata
HwndSourceHook rejestrowanego za pomocą metody
AddHook
-
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.
Zadanie 5
Napisz aplikację (Windows Forms lub WPF), która rejestruje w systemie komunikat „KomunikatWinApi” i pozwala wysłać go do wszystkich innych aplikacji.
-
dodaj przycisk powodujący wysłanie zarejestrowanego komunikatu do wszystkich okien głównych na pulpicie (uchwyt HWND_BROADCAST
)
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