C#フォームアプリケーションではなくC#コンソールを使用して、画面上に大きな白い長方形を作成することは可能ですか?
可能であれば、画面全体をカバーする必要があります。 System.Drawingを使用する必要があり、いくつかの手順を試してみましたが、実際には画面に何も印刷されません。
System.Drawing
とSystem.Runtime.InteropServices
が必要です。プロジェクト参照を追加する必要がある場合があります。
using System.Runtime.InteropServices;
using System.Drawing;
P/Invokeを使用してクラスにメソッドを追加します
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc);
画面全体のGraphics
オブジェクトを取得し、長方形を描画します:
IntPtr desktopPtr = GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(desktopPtr);
SolidBrush b = new SolidBrush(Color.White);
g.FillRectangle(b, new Rectangle(0, 0, 1920, 1080));
g.Dispose();
ReleaseDC(IntPtr.Zero, desktopPtr);
この方法の問題は、画面がまったく更新された場合、長方形が上書きされ、ほとんどの実用的なアプリケーションに役に立たなくなることです。
前と同じように、プロジェクト参照が必要です。今回はSystem.Windows.Forms
に。またSystem.Drawing
も必要になります:
using System.Drawing;
using System.Windows.Forms;
新しいフォームを作成し、境界線を削除し、画面を埋めて、タスクバーの上に配置します。
Form f = new Form();
f.BackColor = Color.White;
f.FormBorderStyle = FormBorderStyle.None;
f.Bounds = Screen.PrimaryScreen.Bounds;
f.TopMost = true;
Application.EnableVisualStyles();
Application.Run(f);
これに関して考えられる問題は、ユーザーがウィンドウからAlt + Tabキーを押すだけで済むことです。より複雑なグラフィックスを行いたい場合は、 this のような描画コードを書く必要があります。フォームの背景を透明にするには、TransparentKey
をBackolor
と同じに設定します。
これらの両方を.NET 4.5とWindows 7でテストしたばかりなので、以前のバージョンでは異なる場合があります。詳細情報 here および here 。
はい、画面に描画することは可能ですが、一番上のボーダーレスフォームを使用する方が簡単かもしれません。
必要に応じてコンソールアプリケーションからこれを行うこともできます。ただし、必要なアセンブリを参照することを条件にすると、アプリケーションの存続期間中、コンソールウィンドウが画面に残ることになります。
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
あるいは、Window
のインスタンスを作成し、その上でShow
を呼び出すことができると思います。
別の質問に対するこの回答 は、GDI +呼び出しを使用して画面に直接描画する方法を説明しています。
私が質問を理解する方法、それはどんな意味のある方法でも本当に可能ではありません。プラットフォームでuser32.dllとgdi32.dllを呼び出し、メッセージループなどを使用して従来のWindows UIアプリケーションを実装できると思いますが、Formsを使用する方がはるかに簡単です。それができない理由は何ですか?