Переключить Повышение точности указателя
В основном мы создаем апплет панели управления. Нам нужно переключить "Повышение точности указателя" в свойствах мыши.
Для этого нам нужно позвонить SystemParametersInfo
с SPI_GETMOUSE
, В качестве третьего параметра он имеет массив из 3 элементов. Я новичок в PInvoke и перепробовал много подписей, но пока не повезло. Вот что я попробовал на подпись:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, [MarshalAs(UnmanagedType.LPArray)] ref long[] vparam, SPIF fWinIni);
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref long[] vparam, SPIF fWinIni);
Ничто из вышеперечисленного не сработало для меня, и вот исключение, которое я получаю:System.AccessViolationException
: Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.
При поиске я придумал, что есть в VB.
Решение: Благодаря ответу GWLlosa и этому я нашел решение:
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
public static extern bool SystemParametersInfoGet(uint action, uint param, IntPtr vparam, SPIF fWinIni);
public const UInt32 SPI_GETMOUSE = 0x0003;
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
public static extern bool SystemParametersInfoSet(uint action, uint param, IntPtr vparam, SPIF fWinIni);
public const UInt32 SPI_SETMOUSE = 0x0004;
public static bool ToggleEnhancePointerPrecision(bool b)
{
int[] mouseParams = new int[3];
// Get the current values.
SystemParametersInfoGet(SPI_GETMOUSE, 0, GCHandle.Alloc(mouseParams, GCHandleType.Pinned).AddrOfPinnedObject(), 0);
// Modify the acceleration value as directed.
mouseParams[2] = b ? 1 : 0;
// Update the system setting.
return SystemParametersInfoSet(SPI_SETMOUSE, 0, GCHandle.Alloc(mouseParams, GCHandleType.Pinned).AddrOfPinnedObject(), SPIF.SPIF_SENDCHANGE);
}
Также эта документация оказалась полезной.
1 ответ
Ты пытался:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(SPI uiAction, uint uiParam, IntPtr pvParam, SPIF fWinIni);
Бесстыдно сняли с:
http://www.pinvoke.net/default.aspx/user32/SystemParametersInfo.html