Я хочу позвонить в SystemParametersInfo от C#. Первым аргументом этой функции является одно из большого количества возможных значений как SPI_GETACCESSTIMEOUT, которые перечислены в документации, но, кажется, не определяются нигде.
Я могу пойти, находят фактические значения этих вещей в сети и составляют перечисление с правильными магическими числами в нем - который работает, но это не правильная вещь. Я хочу смочь включать что-то, что делает все это для меня. Они должны быть определены где-нибудь!
Что я делаю для создания этой работы правильно?
OJ указывает на страницу SPI, которая является большой, если я хочу скопировать все это в мой исходный код. Но я хочу, чтобы компилятор сделал это.
Я должен просто смочь сказать:
[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);
Вместо этого я должен добавить:
public const uint SPI_GETACCESSTIMEOUT = 0x003C;
... и вся остальная часть его также. Я ищу некоторую команду, которая импортирует все те определения из того, везде, где они живут в dll.
Это именно то, о чем pinvoke.net :)
Для полного описания и примера кода см. страницу SystemParametersInfo. Имейте в виду, что вы должны использовать pinvoke для борьбы с этим API, насколько мне известно.
Аплодисменты!
EDIT: В случае, если это не сразу очевидно, информацию о SPI_GETACCESSTIMEOUT можно найти на странице SPI (ссылка на которую приведена со страницы SystemParametersInfo). Есть также другой образец здесь.