Windowsで非常に多くのメッセージボックスの再帰を非常にすばやく開いたときに手動で強制終了する方法


0

まず、プログラミングソリューションを要求するのではなく、このプログラムがどのように機能するかを示すためにこのコードを公開するだけです。

以下のプログラムを試しました(Virtual Boxで):

#include <iostream>
#include <string.h>
#include <windows.h>

using namespace std;

int main(int argc, char **argv){

    //program will create a command string that will be executed by the system console to call itself in another process (create another process): cmd = start program_name.exe
    string cmd = string("start ") + string(*argv);

    //execute cmd: a temporary console will be opened, then execute cmd, finally the console will be closed
    system(cmd.c_str());

    //display a message box (In fact, display many message boxes) which annoying user
    MessageBowW(0, L"Message box content", L"Message box title", MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST);

    //if the user pressed OK button in a message box, the message box will display again (by recursion)
    return main(argc, argv);
}

コンパイルされた実行可能ファイルはこちら

繰り返し自分自身を呼び出すことにより、このプログラムは多くの非常に邪魔なメッセージボックスを開き、システムを遅くします。また、このプログラムは、ユーザーが操作を行うことを防ぎます。

私はシステムを再起動する以上のことはできません。

私の質問は、誤ってこのプログラムを開いた場合(ダブルクリックで直接開く)、Windowsを再起動せずにすべてのプロセスを停止する方法ですか?何か案が?


タスクマネージャーが機能せずにプログラムが終了しますか?その場合は、ログオフする必要があります。
カラン

ただし、ログオフすると、保存されていないデータが失われる可能性があります
-DMaster

はい。ただし、複数のインスタンスを開いてすべてのリソースを占有する積極的なプロセスがある場合、システムがほぼ応答しなくなるため、すぐに何もできなくなります。可能であれば、アプリをすぐに閉じて、保存を求められたら[はい]と答えてからログオフできます。または、タスクマネージャーを開いてプロセスを強制終了しますが、フォーカスをオーバーラップまたはスチールする新しいウィンドウを生成し続ける場合、それは困難な場合があります。
カラン

Windowsは安全な制御のための十分なツールを提供していないようで、ユーザーは降伏しなければならない場合があります。この事故を元に戻すのに役立つ便利なツールはどこにありますか?
DMaster

あなたが説明したのは基本的にフォーク爆弾であり、Linuxでさえulimit -u使用しないとリソースをすぐに使い果たす可能性があります。記録のために、Firefoxを実行し、保存されていないファイルでWordとメモ帳を開いて、ログオフすることができました。その後、Windowsはプログラムのすべてのインスタンスを強制終了することを示し、すべてが終了するとすぐにログオフをキャンセルし、問題なく作業を続行できるようにしました。
カラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.