В этой ситуации я делал не для того, чтобы отключить заставку, а чтобы она не запускалась. Для этого я периодически (по таймеру) посылаю нажатие клавиши «Влево-вверх» в ОС.
C #:
[DllImport("user32")]
private static extern void keybd_event(byte bVirtualKey, byte bScanCode, int dwFlags, int dwExtraInfo);
private const byte VK_LSHIFT = 0xA0;
private const int KEYEVENTF_KEYUP = 0x0002;
// When the timer elapses, send Left Shift Up
private void timer1_Tick(object sender, EventArgs e)
{
keybd_event(VK_LSHIFT, 0x45, KEYEVENTF_KEYUP, 0);
}
vb.net:
Private Const VK_LSHIFT As Byte = 160
Private Const KEYEVENTF_KEYUP As Integer = 2
Private Declare Sub keybd_event Lib "user32" (ByVal bVirtualKey As Byte, ByVal bScanCode As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
' When the timer elapses, send Left Shift Up
Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs)
keybd_event(VK_LSHIFT, 69, KEYEVENTF_KEYUP, 0)
End Sub
(я не разработчик vb, я только что прогнал код c # через автоматический конвертер c # -> vb.net)
Я полагаю, что нажатие левой клавиши сдвига с наименьшей вероятностью может помешать работе приложения. Худшее, что может случиться, - это то, что, если в тот же момент, когда срабатывает таймер, у вас сдвиг влево, это приведет к завершению сдвига.
Конечно, вы можете использовать любую другую клавишу, чтобы не активировать заставку.