ckw でプロンプトが消えないとき

Windowsコマンドプロンプトを使用する場合,ckw は便利なツールです.特に,ファイルのドロップが禁止されてしまった Vista では重宝します.Shift を押しながら右クリックして,さらにコンテキストメニューから「パスとしてコピー」を選択するなんて,説明するだけでも面倒ですから….

ただし,以前から起動時に裏方のコンソールが消えてくれなくて凹むことが何度かあり,新しいマシンに乗り換えたところ,ほぼ確実にコンソールが二重化するようになってしまいました.

幸いにもソースコードが入手できる状態だったので,「Windows API とか無理」などと考えつつ,いろいろ試してみたところ,自分の環境では問題が解決しました.

元になるソースコードは以下の場所から入手できました(本家は閉鎖しているものの,幸いなことに,ソースコードと改造版を公開してくれている方がいて助かりました.)

修正箇所は,main.cpp のコンソールを消す部分(関数 create_console() の中で __hide_alloc_console() を呼び出した後)です.

while((gConWnd = GetConsoleWindow()) == NULL) {
  Sleep(10);
}
// このループを追加
while(!IsWindowVisible(gConWnd)) {
  Sleep(10);
}
while(IsWindowVisible(gConWnd)) {
  ShowWindow(gConWnd, SW_HIDE);
  Sleep(10);
}

これで解決したことから,コンソールが表示される前に 3 つ目のループに突入していたのが原因のようです.以下の情報が参考になりました.