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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# 「using Windows」でエラーが出る 3 2022/12/23 19:53
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- 英語 『G19 Gen5 MOS - Modular Optic System for Gen5』 の 『 1 2023/03/05 13:37
- 英語 下記の英文の日本語訳をお願いします。 1 2023/03/02 10:01
- 英語 下記の英文を日本語に訳して、その意味を教えてください。 1 2023/03/09 14:13
- 英語 From the data mentioned that extracted from the cu 1 2023/01/25 19:55
- 英語 Modular Optic System (MOS)とは、一体どの様な物の事なのかを教えてください。 1 2023/03/03 09:52
- ボランティア ウクライナ人からどういうこと? 6 2022/03/28 07:37
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
CloseとDisposeの違い
Visual Basic(VBA)
-
C#でbyte配列から画像を表示させたい
C言語・C++・C#
-
C#で自分のウインド・ハンドルを取得するにはどうすればよいのでしょうか
C言語・C++・C#
-
-
4
プロセスのアタッチ・デタッチとはなんですか?
Visual Basic(VBA)
-
5
C#でGUI・CUIの判断する仕方を教えて下さい
C言語・C++・C#
-
6
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
7
String^の^自体が何を意味しているのか、わかりません。
C言語・C++・C#
-
8
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
9
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
10
コマンドプロンプト標準出力とファイル出力両方
その他(プログラミング・Web制作)
-
11
[VB.net] DataGridViewの列ヘッダー複数行表示に伴う不具合?について
Visual Basic(VBA)
-
12
visual studio2019でデバッグができません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
AIに回答させるって
-
KEYENCEのシーケンスプログラム...
-
cout と cerrの違い
-
プログラムについての質問です...
-
printfとputcharの違いは
-
VBAのExecメソッドで画面を非表...
-
ListViewの複数選択について
-
バッチファイル フォルダサイ...
-
printfの書式%.*s
-
C# 標準出力のencodingをutf8に...
-
Windows Formアプリからコンソ...
-
ブランキング期間
-
AviUtl 出力の失敗
-
汎用人型決戦兵器「人造人間エ...
-
ACCESS クエリ→フォーム...
-
標準出力の上書き
-
C言語の標準関数の引数の順番に...
-
CRC16計算について
-
最近の画像生成AIについて。 長...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
コンセントの電力は入力と出力...
-
MMDでavi出力が出来ない
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
cout と cerrの違い
-
COBOLのMOVEで桁数が異なる場合
-
ACCESS クエリ→フォーム...
-
アクセスでエクセルに出力する...
-
VBAのExecメソッドで画面を非表...
-
テキストファイルから特定の文...
-
Windows11対応の3入力1出力 USB...
-
VBAで有効数字の設定
-
スマホのバッテリー消費につい...
-
Excel VBAで値を変えながら、pd...
-
NTTのホームゲートウェイとOCN...
-
定格冷房能力(出力)とは 定格...
-
プログラムについての質問です...
-
PS5をMacBookProに出力したいの...
おすすめ情報