これはおそらく、これまで C++ で遭遇した中で最も奇妙なことの 1 つです。
while(counter != stop_value)
{
//Part A starting
ip.ki.wVk = VK_RETURN;
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));
ip.ki.wVk = VK_RETURN;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
//Part A ending
if (s == 2) counter++;
else counter--;
cout << counter; //for debugging
Sleep(i);
}
「パートA」の部分をコメントアウトすると、正常に機能します。i
ユーザーの入力に応じて、プログラムは数秒間スリープします。ただし、リターンキーをトリガーする簡単な方法を追加するとすぐに、代わりにコンピューター全体がスリープ状態になります (別名、画面がi
数秒間完全に黒くなります)。グーグルで試してみましたが、これについて何も見つかりません。
そして、これはコードのほんの一部です。INPUT クラスとすべてを追加しました。s
はユーザー定義変数でもあり、(この場合) 2 から 3 の間で変化する可能性があります。2 に等しい場合、カウンターの値は 0 に設定され、最大値 (ユーザー変数) に達するまで増加します。 -定義され、 に設定されstop-value
ます)。この方法を使用している間、sleep
機能は正常に動作し、プログラムだけがi
数秒間「一時停止」します。ただし、ユーザーが 3 に設定するとすぐにs
、最大値 (ユーザー定義) から、常にゼロに等しい停止値に達するまで減少し始めます。これが発生すると、代わりに画面がブラックアウトします。
私は何年もの間デバッグを試みましたが、解決策を見つけることができないようです...コードはこれよりもはるかに複雑であり、より多くのスペースを使用する必要があるため(これは望ましくありません) to)、代わりに使用できる変数の入力をいくつか示します。
- 作業入力:
counter = 0; stop_value = 21; s = 2; i = 1000;
- 画面のブラックアウトにつながる入力:
counter = 20; stop_value = 0; s = 3; i = 1000;
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ ms686298(v=vs.85).aspx