
Microsoft Visual Studio Community 2022 (64 ビット) - Current Version 17.5.5のC#で
Windows Form アプリケーション(.Net Framework4.8)を作成して
そこで次のようにしてbutton1を押してコンソールに文字を出力したかったのですが、
コンソールは出るのですが文字が出力されないです。
これはなぜなのでしょうか?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CallConsoleWindow
{
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
AllocConsole();
Console.WriteLine("test");
Console.ReadLine();
}
}
}
No.6ベストアンサー
- 回答日時:
あと考えられるとすると、コンソールのエンコーディングは、ShiftJISなので、WriteLen()がUnicode出力になっていると、NULLを検出するので、ストリングがないという判断かもしれません
日本語で、テストという文字列と、boolで、true
Console.WriteLine(”テスト”);
Console.WriteLine(true);
で書き込めるがテストしていただけますか?
これで、出力されるとなると、VSのビルドオプションの設定の変更の影響のようにも思えます
ご返信ありがとうございます。
それを試してみたのですが、やはり表示されませんでした。
ただそれからいろいろ試してみたのですが、
「出力の種類」を「コンソールアプリケーション」にしたら表示されました。
ちなみにその状態で一応MessageBox.Show()も使用してみたのですが
これも表示されました。
https://s.kota2.net/1683878055.jpg
https://s.kota2.net/1683878031.jpg
普段は「出力の種類」は「Windows アプリケーション」になっているですが、
この設定のまま使っても良いのでしょうか?
No.8
- 回答日時:
色々と確認作業、また、スクショなど撮って頂きありがとうございました
質問者さんの環境には、Insiderにも入っていないようですし、あとは、自分の環境が、Windows Proや、WSL2ぐらいで、こちらが特殊な環境かもしれません
今、一度、コンソールが起動に書き込みができるアプリ(設定がWindowsアプリケーションの場合)をタスクマネージャーで確認したところ
子プロセスとして、C:\Windows\System32\conhost.exeがコンソールアプリとして、起動していました
System32下に存在するので、セキュリティの変更などは出来ませんでしたが、このファイルを実行する場合に、質問者さんの環境と、自分の環境で、何かしらの違いが発生してるのだと思います
出力の種類を「コンソールアプリケーション」にした場合、タスクマネージャーで確認しましたが、自分の環境では、別のプロセスとして、WindowsConsole.exeが立ち上がってるので、問題があるかどうかは、分かりかねますが1行ごとに出力を確認したいという、目的が達成できるのであれば、良いと思います
ご返信ありがとうございます。
こちらでもタスクマネージャーで見たところ
C:\Windows\System32\conhost.exeが
ユーザー名で4つ
SYSTEMで2つ
ありました。
https://s.kota2.net/1683901881.png
Visual Studioで他のプログラムは実行していないのですが、
なんでこんなに多くあるのかが謎です(汗)
まあとりあえず目的は達成できそうなのでこれで良しとします。
回答にご尽力いただきありがとうございました。
No.7
- 回答日時:
色々弄ってみましたが、consoleに変更しなければいけないような部分は、見当たりませんでした
そうなると、環境の違いが関係しそうな部分は
自分:WSL2を入れてる
質問者さん:Insdier Previewではないですか?
WSL2を入れてますが、新しく作ったユーザーではWSL2はdisable状態で、新規に作ったWinFormアプリで問題なく、コンソールに表示されました
で、気になったのが、質問者さんの環境って、Windows Insider Programに参加されてますよね?
もし、そうだとすると、それしか考えられないんですよね
Insiderを停止して、元に戻して試すか、他にIndsider に参加してないPCがあれば、新規にWindowsFormのアプリを作ったときに、問題がないかでしょうか?
ご返信ありがとうございます。
「Windows Insider Program」ってこのことでしょうか?
https://s.kota2.net/1683894841.jpg
「使用を開始する」とあるので、まだ参加してないと思うのですが
どうなんでしょうか?
No.6でも書きましたが、一応「出力の種類」をコンソールアプリケーションに変更したら
できましたので、Windowsフォームアプリで使用する際、これで問題がないようでしたら
この設定で使っていきたいと思っています。
ただデフォルトの設定ではないので気持ち悪い感じはしますが(汗)
No.5
- 回答日時:
確認ありがとうございます。
ReadLine()はEnterキーが入力されるまで、入力を待つので何かキーを入力すると、表示されます。
Admin権限は、PCのアカウントの設定で管理者かどうかというものですが、管理者でないユーザーアカウントを作成し、新規にプロジェクトを作成し、作ってみましたが、問題なく出来るので、質問者さんの環境が壊れてる可能性か、他のケースが考えられます
その一つとして、色々な設定を見ても問題ないので、Formアプリが起動している際のコンソール出力が、どこかにリダイレクトされているような設定になってるように思えます
つまり、VSで作成したプログラムをほかのプログラムで起動して実行して、確認してる等は、ないでしょうか?
https://learn.microsoft.com/ja-jp/dotnet/api/sys …
そうでなければ、一度、Visual Studio 2022のリペアを試してみてはいかがでしょうか?
https://learn.microsoft.com/ja-jp/visualstudio/i …
リペアをしたのちに、新規作成をしたソリューションを再度、リビルドをしていただき、ビルド出力にエラーがないことを確認していただき、
========== すべて再構築: 1 正常終了、0 失敗、0 スキップ ==========
とWriteLine()が、表示されていることを確認していただけますでしょうか?
これで、解決できない場合には、申し訳ないですが、お手上げですね。VSを再インストールしても、問題が起きるように思えます。
ご返信ありがとうございます。
Admin権限の件ですが、たぶんAdmin権限になっているようです。
https://s.kota2.net/1683858345.jpg
>VSで作成したプログラムをほかのプログラムで起動して実行して、確認してる等は、ないでしょうか?
これって要は
new Process().Start();を使って呼び出して試しているということですよね?
いや添付画像で分かる通りNo.2のよっしーラボさんが提示されたコードをそのまま実行しているだけです。
ただもしこの件が解決しないようならnew Process().Start();で呼び出してなんとか使用できないか考えています。
Visual Studio 2022のリペアをして、ソリューションを新規作成して
リビルドして実行してみたのですが、やはり表示されませんでした。
https://s.kota2.net/1683858358.png
Console.WriteLineではなくて、Console.Beep();を追加してみたら
ちゃんと音が鳴っていたので、どうやらWriteLineだけが機能してないみたいなんですよね・・・
https://s.kota2.net/1683859026.jpg
Console.Title = "タイトルの変更";でタイトルの変更もできています。
https://s.kota2.net/1683859451.jpg
ちなみにConsole.CursorLeftでカーソルの移動をしようとしたのですが、これはエラーが出ます。
https://s.kota2.net/1683859610.jpg
うーん、、なにが原因なんだろう・・・
No.4
- 回答日時:
確認ありがとうございます
・念のため、コンソールのバックグラウンドと、フォアグランドカラーの設定をして、かつ、WriteLine()したあとに、ReadLine()で止めても、表示は出ないでしょうか?
・あとは、新規でフォームアプリを作って、自分が提示した方法で、同じようにボタンだけのコントロールを新規作成し、同じ問題が起きるか?起きないか?の確認ぐらいでしょうか
・もし、それでも表示されないのであれば、あとは、今まで動作していた、コンソールへの書き込みプログラムが正常に動作しているか?ですね
・念のため、PCの再起動をかけるのもありです
・また、AllocConsole()の戻り値が0以外になっているかどうか、確認する。
・その他として、プログラムを実行中コンソールが出てる状態で、左上のアイコンを右クリックすると、プロパティが選択できるので、そこから、フォント種を変更してみる
・あとは、もし、admin権限のないユーザーでログインして、作業をしているのであれば、admin権限のあるユーザーで、ログインし実行しても同じかどうかでしょうか?
自分の環境には、WSL2を入れていますが、あまりインパクトはないと思いますが、念のため
正直、他には思いつかないですね
ご返信ありがとうございます。
・>WriteLine()したあとに、ReadLine()で止めても、
これを試してみて発見があったのですが、
Console.ReadLine();を追加して実行します。
そしてbuttonを押すとそのままではWindowsフォームがアクティブですが
コンソールウインドウをクリックしてアクティブにして
キーを入力するとそのキーの文字が表示されます。
これはConsole.ReadLine();ない場合だと、
コンソールウインドウをアクティブにしてキーを入力しても
何も表示されないというか反応がなかったので、違いが出ました。
ここから何か分かることはあるでしょうか?
https://s.kota2.net/1683769557.jpg
・No.2のよっしーラボさんの提示された通りに実行してみましたが
やはり文字は表示されませんでした。
https://s.kota2.net/1683769262.jpg
https://s.kota2.net/1683769275.jpg
・今でもコンソールアプリケーションプロジェクトから作成したプログラムで
Console.WriteLineをすれば文字が表示されたので問題ないと思います。
・PCの再起動でも駄目でした。以前から試していたのですが一度も書き込めたことがないです。
・AllocConsole()の戻り値はTrueでした。
・コンソールのプロパティです
https://s.kota2.net/1683770004.jpg
https://s.kota2.net/1683770027.jpg
https://s.kota2.net/1683770039.jpg
https://s.kota2.net/1683770052.jpg
https://s.kota2.net/1683770063.jpg
・admin権限とかはよく分からないで、とりあえず調べておきます。
No.3
- 回答日時:
分かったかも・・・
Textカラーがコンソールのバックグラウンドと同じ色になってませんか?
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.White;
など、設定してみてはいかがでしょうか?
https://learn.microsoft.com/ja-jp/dotnet/api/sys …
https://learn.microsoft.com/ja-jp/dotnet/api/sys …
ご返信ありがとうございます。
それを追加してみたのですが、
public Form1()
{
InitializeComponent();
AllocConsole();
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.White;
Console.WriteLine("test");
}
変わらなかったです。。
一応、ConsoleColor.YellowやConsoleColor.Greenなども設定してみたのですが駄目でした。
まあでもやはりプログラムの処理が来ているか調べるのに
WriteLineが最も分かりやすいメソッドですよね。
コンソールウインドウが表示されてマウスカーソルが点滅しているの時の
点灯しているシーンの画像です。
https://s.kota2.net/1683710740.jpg
No.2
- 回答日時:
出来ていますね。
Windows11 Pro 22H2 22621.1635
VS Cummunity 2022(64bit) Version17.5.5
C#ツール 4.5.2-3.23171.7
.NET Framwork Version 4.8.09032
手順:
1)新規プロジェクトで、「C# Windowsフォームアプリ」→「Windows フォームアプリ」を選択し作成
2)Form.csに、「表示」→「ツールボックス」から「Button」を追加
3)ボタンのサイズを少しおきくし、ボタンを右クリック
4)「プロパティ」→「イベント」を選択し、下記コードの、「Button1_cClick」を「Click」イベントのリストボックスから選択
5)実行
結果:
フォームが立ち上がるとコンソールも立ち上がり、ボタンを押す毎に、コンソールに"test"が表示
補足:
・AllocConsole()をButton1_Clickに移動しても同じ。
・ReadLine()は文字入力待ちになるのでこのサンプルでは、入れてませんが、入れるとEnterキーを押すと、再度、Buttonがアクティブになり、押せるようになります。
Program.cs
=============================
using System;
using System.Windows.Forms;
namespace WinFormsApp1
{
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
public Form1()
{
InitializeComponent();
AllocConsole();
}
private void Button1_Click(object sender, EventArgs e)
{
Console.WriteLine("test");
}
}
}
=============================

ご返信ありがとうございます。
そうですか、やはりできてないのは環境がまずいんでしょうか・・・
ちなみに
public Form1()
{
InitializeComponent();
AllocConsole();
Console.WriteLine("test");
}
フォームロード時にWriteLineをもってきも、コンソールウインドウは表示されるのですが
やはり文字はでてきません。
一応、関係してるかもしれない画像を添付しました。
よろしければ参照して下さい。
https://s.kota2.net/1683706867.jpg
https://s.kota2.net/1683706875.jpg
https://s.kota2.net/1683706927.jpg
https://s.kota2.net/1683706935.jpg
エディション Windows 11 Home
バージョン 22H2
OS ビルド 22621.1702
エクスペリエンス Windows Feature Experience Pack 1000.22641.1000.0
Microsoft Visual Studio Community 2022
Version 17.5.5
VisualStudio.17.Release/17.5.5+33627.172
Microsoft .NET Framework
Version 4.8.09032
インストールされているバージョン:Community
Visual C++ 2022 00482-90000-00000-AA913
Microsoft Visual C++ 2022
C# ツール 4.5.2-3.23171.7+d17f741546fad2786cbd6394d08619544e53a36d
No.1
- 回答日時:
これで、コンソールが出て、Test文字列が出ないのは、変ですね。
AllocConsole()をForm1()内に移動してませんか?
もし、そうだとしたら、button1_Clickが、ボタンのイベントと関連付けられてない可能性が高いですけど。
ご回答ありがとうございます。
button1_Clickのイベントはちゃんと発生していて
試しにMessageBox.Show("test");で表示されました。
https://ux.getuploader.com/dialogues_txt/downloa …
このサイトを参考にしました。
https://www.wareko.jp/blog/output-text-string-to …
ちなみによっしーラボさんの環境では表示されるのでしょうか?
また他に気になる箇所はありますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
大量のデータを読み込んで表示する速度を改善したい
C言語・C++・C#
-
関数ポインタの高速化のメリット
C言語・C++・C#
-
プログラミング 2つの整数を読み込んで、等しければ 「二つの値は同じです」と表示し、そうでなければ,
C言語・C++・C#
-
-
4
C言語でファクト関数を使わずに階乗を計算する方法はありますか?できれば教えてください
C言語・C++・C#
-
5
いまc言語の標準ライブラリ文字列を勉強しているのですがいまいちわかりません。 strcmpとmemc
C言語・C++・C#
-
6
c言語の問題の説明、各所ごとに
C言語・C++・C#
-
7
【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法
C言語・C++・C#
-
8
スタックフレームの消滅
C言語・C++・C#
-
9
変数のスコープ
C言語・C++・C#
-
10
C言語について。
C言語・C++・C#
-
11
プログラムについて。
C言語・C++・C#
-
12
C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、
C言語・C++・C#
-
13
VisualStudioでC++クラスを追加するとき、ファイルを所定のフォルダ下につくりたい
C言語・C++・C#
-
14
Cのdoubleの浮動小数点表示について
C言語・C++・C#
-
15
c言語
C言語・C++・C#
-
16
Cのオブジェクトファイルの逆アセンブル
C言語・C++・C#
-
17
プログラミング 2つの整数を読み込んで、等しければ 「二つの値は同じです」と表示し、そうでなければ,
C言語・C++・C#
-
18
int16_t の _t は何?
C言語・C++・C#
-
19
プログラミング 素数か素数ではないか判断するプログラミングで、写真のようなプログラミングを打ったとき
C言語・C++・C#
-
20
アセンブラ指令
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
エクセルマクロで出力行の増や...
-
OBS配信すると、マイクが途切れ...
-
ACCESS クエリ→フォーム...
-
テキストファイルから特定の文...
-
VBAでテキスト出力時のスペース...
-
ListViewの複数選択について
-
エクセルVBAでテキストファイル...
-
エクセルVBAにて アルファ...
-
アクセスでエクセルに出力する...
-
コンセントの電力は入力と出力...
-
【PowerPoint VBAの高速化】
-
MMDでavi出力が出来ない
-
RS232cデーターをエクセルに落とす
-
VBAで有効数字の設定
-
フォートランで出力をタブ区切...
-
printfとputcharの違いは
-
ACCESSからExcelへエクスポート...
-
Mac版 Excel VBA PDF出力フォル...
-
充電器の表記についての質問で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
OBS配信すると、マイクが途切れ...
-
C言語について。
-
Notion APIとGASで自動実行したい
-
コンセントの電力は入力と出力...
-
MMDでavi出力が出来ない
-
VBAのExecメソッドで画面を非表...
-
COBOLのMOVEで桁数が異なる場合
-
アクセスでエクセルに出力する...
-
VBAでテキスト出力時のスペース...
-
テキストファイルから特定の文...
-
エクセルマクロで出力行の増や...
-
cout と cerrの違い
-
ACCESS クエリ→フォーム...
-
VBAで有効数字の設定
-
エクセルVBAにて アルファ...
-
Anker社の充電器について。 Ank...
-
CRC16計算について
-
ListViewの複数選択について
-
エクセルで英字と数字を組み合...
おすすめ情報