2010-03-11 16 views
6

Chcę nawiązać połączenie z SystemParametersInfo z C#. Pierwszy argument tej funkcji jest jednym z wielu możliwych wartości, takich jak SPI_GETACCESSTIMEOUT, które są wymienione w dokumentacji, ale nie wydają się być nigdzie zdefiniowane.Definicje parametrów SystemParametersInfo dla C#

Mogę znaleźć rzeczywiste wartości tych rzeczy w sieci i wymyślić enum z odpowiednimi magicznymi liczbami - to działa, ale to nie jest właściwe. Chcę móc włączyć coś, co robi to wszystko dla mnie. Muszą być gdzieś zdefiniowane!

Co mam zrobić, aby działało to poprawnie?


punkty OJ do SPI page co jest dobre, jeśli chcę, aby skopiować wszystko, co do mojego kodu źródłowego. Ale chcę, aby kompilator to zrobił.

I powinno po prostu być w stanie powiedzieć:

[DllImport("user32", CharSet = CharSet.Auto)] 
private static extern bool SystemParametersInfo(int uAction, bool uParam, int lpvParam, int fuWinIni); 
SystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, ref IsActive, 0); 

Zamiast tego trzeba dodać:

public const uint SPI_GETACCESSTIMEOUT = 0x003C; 

... i całą resztę nim również. Szukam jakiegoś polecenia, które zaimportuje wszystkie te definicje z dowolnego miejsca w bibliotece dll.

+0

Zasadniczo pytasz o zarządzaną wersję SystemParametersInfo. Krótka odpowiedź brzmi: nie ma (w momencie księgowania). Musisz użyć p/invoke, jak już wykazano. Tak już jest! –

Odpowiedz

2

To jest dokładnie to, co pinvoke.net wszystkim chodzi :)

Zobacz SystemParametersInfo page dla pełnego opisu i przykładowego kodu. Pamiętaj, że musisz używać pinvoke, aby poradzić sobie z tym API, o ile wiem.

Pozdrawiam!

EDIT: w przypadku, gdy nie jest oczywiste, informacje dla SPI_GETACCESSTIMEOUT można znaleźć na SPI page (który jest powiązany ze strony SystemParametersInfo). Istnieje również inna próbka here.