我需要一個隱藏窗體,顯示控制檯作爲用戶界面(不要問爲什麼,我不需要其他方法)。所有的方法都是在表單類中。無法隱藏表單。在窗體構造函數完成後出現窗口
因此,我使用控制檯輸出創建了Windows窗體項目。一切正常,但我不能隱藏窗體。
啓動形式:
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
這裏是形式的構造:
public Form1() {
InitializeComponent();
this.Visible = false;
//here i try to find one other window by caption
//using FindWindow() WinAPI method
this.Text = "Generated window title";
//find handle of this window:
int currentWindowHandle = (int)FindWindow(null, title);
//after this moment form is again visible
}
要隱藏表單我使用此代碼:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
value = false;
CreateHandle();
}
base.SetVisibleCore(value);
}
形式開始隱藏,但之後的構造完成,它再次可見。
我想它會發生什麼確切的時間弄清楚:
protected override void WndProc(ref Message m) {
Debug.WriteLine(m.Msg);
base.WndProc(ref m);
}
我得到這個作爲輸出:
//waited a while
...
24 x0018 = SHOWWINDOW
528 x0210 = PARENTNOTIFY
14 x000E = GETTEXTLENGTH
13 x000D = GETTEXT
70 x0046 = WINDOWPOSCHANGING
在此之前,我已經得到很多次消息13,14,70。當我得到最後70 msg後,出現base.WndProc(ref m);
窗口。
搜索的消息的解釋:
的ShowWindow = 0x0018處
當窗口即將被隱藏或顯示的WM_SHOWWINDOW消息被髮送到的窗口。
PARENTNOTIFY = 0x0210
時創建子窗口或毀壞,或當用戶點擊一個鼠標按鈕,而光標在子窗口的WM_PARENTNOTIFY消息被髮送到一個子窗口的父。當創建子窗口時,系統在創建窗口返回的CreateWindow或CreateWindowEx函數之前發送WM_PARENTNOTIFY。當子窗口被銷燬時,系統在任何處理之前發送消息以銷燬窗口。
當然,有些東西不讓我保持這個窗口隱藏?我不明白。我不會發送任何消息給這個應用程序。我只是運行它,看看。
你發現你的答案在同一時間,你問了一個問題:) –
這仍然會的Alt + Tab顯示很遺憾。 –