2010-03-11 8 views
6

Ich möchte einen Aufruf von SystemParametersInfo von C#. Das erste Argument für diese Funktion ist eine aus einer großen Sammlung möglicher Werte wie SPI_GETACCESSTIMEOUT, die in der Dokumentation aufgeführt sind, aber nirgendwo definiert zu sein scheinen.SystemParametersInfo Parameterdefinitionen für C#

Ich kann die tatsächlichen Werte dieser Dinge im Internet finden und ein enum mit den richtigen magischen Zahlen darin finden - das funktioniert, aber es ist nicht das Richtige. Ich möchte in der Lage sein, etwas einzubeziehen, das alles für mich tut. Sie müssen irgendwo definiert werden!

Was kann ich tun, damit das funktioniert?


OJ verweist auf die SPI page das ist toll, wenn ich das alles in meinem Quellcode kopieren möchten. Aber ich möchte der Compiler das tun.

Ich sollte nur in der Lage sein, zu sagen:

[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); 

Stattdessen muss ich hinzufügen:

davon
public const uint SPI_GETACCESSTIMEOUT = 0x003C; 

... und der ganze Rest auch. Ich suche nach einem Befehl, der all diese Definitionen von wo auch immer sie in der DLL leben importieren wird.

+0

Was Sie im Wesentlichen fordern, ist eine verwaltete Version von SystemParametersInfo. Die kurze Antwort ist, es gibt keine (zum Zeitpunkt der Buchung). Sie müssen p/invoke wie bereits gezeigt verwenden. So ist es halt! –

Antwort

2

Das ist genau das, was pinvoke.net dreht sich alles um

:)

Siehe SystemParametersInfo page für eine vollständige Beschreibung und Beispielcode. Denken Sie daran, dass Sie pinvoke verwenden müssen, um mit dieser API umzugehen, soweit mir bekannt ist.

Prost!

EDIT: Falls es ist nicht sofort ersichtlich, können die Informationen für SPI_GETACCESSTIMEOUT auf den SPI page gefunden werden (das von dem Systemparameter Seite verlinkt ist). Es gibt auch eine andere Probe here.