Мне нужна скрытая форма с отображаемой консолью в качестве пользовательского интерфейса (не спрашивайте, почему, мне не нужен другой способ). Все методы находятся в классе формы.Не могу скрыть форму. Окно появляется после завершения конструктора формы
Итак, я создал проект форм 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 сообщений, появится окно base.WndProc(ref m);
.
Искал объяснение сообщений:
ShowWindow = 0x0018
Сообщение WM_SHOWWINDOW посылается окну, когда окно собирается быть скрыты или показаны.
PARENTNOTIFY = 0x0210
сообщение WM_PARENTNOTIFY отправляется родителю дочернего окна, когда дочернее окно создается или уничтожается, или когда пользователь нажимает кнопку мыши, когда курсор находится над дочерним окном. Когда дочернее окно создается, система отправляет WM_PARENTNOTIFY непосредственно перед функцией CreateWindow или CreateWindowEx, которая создает окно. Когда дочернее окно уничтожается, система отправляет сообщение до того, как всякая обработка уничтожит окно.
Определенно, что-то не позволяет мне скрывать это окно? Я не понимаю. Я не отправляю никаких сообщений в это приложение. Я просто запускаю его и смотрю.
Вы нашли ответ на свой вопрос в то же время вы задали вопрос :) –
Это будет по-прежнему показывать в Alt + Tab, к сожалению. –