問題タブ [windows-console]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - GetStdHandle への 2 回目の呼び出しは、「無効な」ハンドルを返します
コンソールのテキストの色を特定の色に設定し、1 行 (またはそれ以上) を印刷してから、配色を元の色に戻そうとしています。ここに私が持っているものがあります:
これは、最初の呼び出しで問題なく機能します。コンソールの新しい出力のテキストの色が変更され、以前の属性が返されます。ただし、これをもう一度呼び出して属性をリセットするGetStdHandle
と、前の呼び出しと同じハンドルが返されますが、これは無効になっています (閉じているため)。
もちろん、ハンドルを使用しようとすると、これによりエラーが発生します。静的変数を作成し、ゼロ (RealBasic の新しい数値変数のデフォルト値) に等しい場合conHandle
にのみ呼び出すと、正しく機能します。GetStdHandle
conHandle
私はいつも自分で掃除するように言われました。このハンドルは開けたままにしておくべきですか?
c++ - C++ SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c) 2 つの引数
使い方
"c" 引数が 1 つではなく、たとえば 2 3 のように 2 つある場合に機能しますか?
誰かが SetConsoleCursorPosition よりも優れた機能を知っているかもしれませんが、gotoxy() は Visual Studio では機能しません :(
c - コンソールのワインイベントの正しい使い方は何ですか?
この質問のソリューションを多数のマシンに「展開」しているときに、一部のシングル コア マシンでひどい結果が得られることに気付きました (たとえば、インテル アトムではソリューションが見事に失敗します)。
ここで起こっていることは次のとおりです。SetWinEventHook(...)
コンソールの変更に対するコールバックを取得するために呼び出します。コンテキスト外の通知のため、イベントの処理とコンソールでのさらなる変更との間に同期がありません。そのため、マルチコア マシンはうまく機能しますが (完全ではありません)、シングル コア マシンはこれを台無しにします。
これはmsdnによると同期する必要があるため、インコンテキスト通知をオンにしました。C# では、これは Infinite Improbability Drive を要求するようなものなので、C で単純な dll を作成しました。これは、汚い作業を行うことができ、c# から dll と通信できます。ここまでは順調ですね。
コールバックは、コンソールを所有するプロセスではなく、conhost.exe で発生します。コールバックでは、conhost.exe のコンテキストでコンソール出力バッファにアクセスする方法が見つからないため、これは問題を引き起こします。もっと正確に言えば、ハンドルを取得する方法が見つからないようです。利用可能なものは次のとおりです。コンソール ウィンドウへのハンドル、コンソール アプリケーションと conhost.exe の両方のプロセス ID、およびコンソール アプリケーションへのパイプ。
そして、これが私がソファーで試したことです:
- を使用する
GetStdHandle(...)
と、ハンドルが無効になります (conhost.exe のコンテキストでは意味があります)。 - を使用して
CreateFile("CONOUT$"...)
、ディト - パイプを使用してコンソール アプリケーションに出力バッファから読み取らせると、デッドロックが発生します。書き込み中の読み取りを防止するためのロック メカニズムを疑っていますが、それは理にかなっています。
- 出力バッファ ハンドルを複製し、パイプ経由で渡します。コンソールハンドルを外部プロセスに複製できないため、喜びはありません。
- conhost.exe プロセスを提供しているコンソール プロセスのコンソールにアタッチしてから、CreateFile を実行します。
AttachConsole(...)
わかりました、これは私のお気に入りのものでしたが、ブロック 3 と同様に機能しません。
誰かが次に何を試すかについて何か考えがありますか? 私の c/c++/winapi のスキルはせいぜい中級レベルなので、何かを見落としている可能性が非常に高いです。明らかな方法は、すべてを船外に投げ出して、出力バッファーをポーリングして変更を確認することですが、それは最後の手段と考えます。MS は、イン コンテキスト イベントまたはアウト オブ コンテキスト イベントのいずれかが実際に使用可能であることを確認するのに十分なほどスマートであったと想定しているため、何かが欠けているに違いありません。
command-line - Windowsバッチファイルが早期に終了するのをどのように止めますか?
次のようなWindowsバッチファイルがあります。
私が抱えている問題は、DoStuff.cmdがJavaプログラムを実行し、完了するとバッチを終了してコマンドプロンプトに戻ることです。2行目はヒットしません。
代わりに、新しいウィンドウでコマンドを実行するために次のことを試みました。
上記で何が起こるかというと、新しいコマンドウィンドウがcmdファイルの実行を生成し、待機中のコマンドプロンプトに戻り、ウィンドウが閉じることはなく、最初のコマンドウィンドウは待機状態になり、2番目のコマンドウィンドウはステップ1の終了後に何もしなくなります。
どういうわけかバッチ実行の制御なしで最初のコマンドを実行するにはどうすればよいですか?
よろしくお願いします
c# - Console.WriteLineマルチスレッド出力は.NET、x64では空です
MSDN for.NETThreadPoolにサンプルがあります。このコードを実行すると、出力が完全に不安定になり、コンソールに完全に空の出力が表示されることがあります。
呼び出しを追加するThread.Sleep()
と、ほんの数ミリ秒でも、出力は正常です。
AFAIKConsole.WriteLine()
はスレッドセーフであるため、出力は常にそこにある必要があります。しかし、少なくとも私のi7 2600 x64
コンパイル済みバージョンではそうではありません。明らかに、ブレークポイントを追加すればすべて問題ありませんが、それは私を怒らせます。
ConcurrentBagを追加して、内容が確実に含まれるようにしましたが、その要素を印刷することもできません。繰り返しますが、ブレークポイントを追加すると、すべて問題ありません。
}
c# - スケジューラーでカスタム時間にプロジェクトをアクティブにする方法
C# VS2010コンソール アプリケーションで作業します。私のソリューションには 3 つのプロジェクトが含まれています。このソリューション exe をウィンドウ スケジュールに設定しました。毎朝、スケジューラがソリューション プロジェクトを連続してアクティブにします。それらは完全に機能しますが、毎朝、午前 9 時に Project1、午前 10 時に Project2、午前 11 時に Project3 をアクティブにしたいのですが、異なる時間にそれらをアクティブにする方法それらはすべてソリューションにあります。カスタムタイムでプロジェクトをアクティブにする方法はありますか。
ご不明な点がございましたら、お問い合わせください。よろしくお願いいたします。
python - GUI ウィンドウを持たない Python .pyw スクリプトの実行を停止するには?
.pyw
スクリプトを実行するためにコンソールが必要ないように、Pythonでスクリプトを作成してファイルとして保存しました。実行中の実行を停止する方法を知りたいです。私が今していることは、IDLEを開いて閉じることであり、うまくいくようです。これを行うためのより良い方法があると確信しています。誰かがこれについて私にアドバイスできますか?
.net - Visual Basic を使用して Windows フォームに DOS コンソールを埋め込む
他の質問から、次のコードを達成できるデータを見つけることができました:
私の問題は、DOS コンソール ウィンドウを見つけることができないことです。
windows - PerlスクリプトでWindowsコンソールにパスワードを要求する方法は?
次のコードを試しました
実際にパスワードを要求し、回答をエコーしませんが、その後に続く<STDIN>をスキップします。これはTerm::ReadPassword :: Win32のバグだと思うので、Windowsでうまく機能する別のモジュールがあるのだろうか?
c# - コンソールの現在の行に書き込む方法は?
私はコンソールアプリケーションを書いていますが、行のシフトを使用して現在の行に書き込む方法を知る必要があります。これを次の例で説明しようと思います。カーソル位置とともに番号と内容をコンソール行に表示します。
- こんにちは!
- これは私のコマンドシェルです。
- 何か書いてください:_
コンソールテキスト「lalala」を書き込むためのメソッドを呼び出すと、次のことがわかります。
- こんにちは!
- これは私のコマンドシェルです。
- ラララ
- 何か書いてください:_
Console.WriteLineメソッドを使用すると、次のように表示されます。
- こんにちは!
- これは私のコマンドシェルです。
- 何か書いてください:lalala
- _
この機能を実現するのを手伝ってください。