Odbieranie MSG w C#

0

Witam, mam do przepisania pewien projekt C++ na C# i mam o to taki fragment w C++:

MSG message;
    while(GetMessage(&message, 0, 0, 0) != 0)
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

Myślałem że może importować dynamicznie te funkcje z user32.dll ale przed tym chciałbym się upewnić czy nie ma lepszego sposobu na taką funkcjonalność w C# ?

0

Tylko po co chcesz to robić? Raczej nie powinieneś, to jest standardowa pętla komunikatów z WinAPI.

1
mto9 napisał(a):

Przepisuje program który umożliwia nadawanie własnym skrótom danej funkcjonalności, program zakłada Hooka, a w taki sposób "wyłapuje" wciśnięte klawisze. Nie ja to pisałem, ja to mam tylko przepisać :D

Widzę dwa rozwiązania zależy od wymagań i na pewno nie powinieneś wywoływać tych funkcji(GetMessage, TranslateMessage, DispatchMessage).

  1. To po prostu zakładanie globalnych klawiszy skrótu(robiłem coś takiego i działa to normalnie): tu jest jakieś info: http://www.liensberger.it/web/blog/?p=207
  2. W głównej formie aplikacji możesz przeciążyć funkcję WndProc(jeżeli global hotkeys Ci nie wystarczą):
protected override void WndProc(ref Message m)
{
	base.WndProc(ref m);

	//tu kod w reakcji na jakieś komunikaty (m)
}
0

Myślałem że może importować dynamicznie te funkcje z user32.dll
Wtedy zabierzesz programowi już istniejącą pętlę zdarzeń, i na 99% zawiesisz okienko.

ale przed tym chciałbym się upewnić czy nie ma lepszego sposobu na taką funkcjonalność w C# ?
Windows Forms czy WPF?

Oczywiście można w C# pisać używając czystego WinAPI — więc tak, da się zaimportować funkcje i zrobić RegisterClass, CreateWindow a potem jechać standardową pętlą z GetMessage-DispatchMessage, ale jeśli pojawia się taka potrzeba, to znaczy że źle wybrałeś język programowania.

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