この状況で以前に行ったことは、スクリーンセーバーを無効にするのではなく、スクリーンセーバーが起動しないようにすることです。これを行うには、定期的に (タイマーで) 「左シフトアップ」キーストロークを OS に送信します。
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# -> vb.net コンバーターを介して c# コードを実行しただけです)
Left Shift Up キーストロークは、アプリケーションに干渉する可能性が最も低いと考えています。起こりうる最悪の事態は、タイマーが起動するのとまったく同じタイミングで左シフトを押した場合、シフトが終了することです。
もちろん、他のキーを使用してスクリーン セーバーがアクティブにならないようにすることもできます。