Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Setsuna
9 / 9 / 0
Регистрация: 15.06.2010
Сообщений: 126
1

ShowWindow не получается восстановить видимость окна после скрытия

08.09.2013, 15:36. Просмотров 2147. Ответов 4
Метки нет (Все метки)

Поиск дал несколько точно таких же тем на форуме, но ни в одной из них ответа так и не было.

Скрываю блокнот
C#
1
ShowWindow(hWnd, 0)
блокнот успешно исчезает из панели задач, но у меня ни как не получается его обратно восстановить. Делаю так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
[System.Runtime.InteropServices.DllImport("user32.dll")]
        static extern bool ShowWindow(int hWnd, int nCmdShow);
 
int hWnd = 0;
            System.Diagnostics.Process[] processRunning = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process pr in processRunning)
            {
                if (pr.ProcessName == "notepad")
                {
                    hWnd = pr.MainWindowHandle.ToInt32();
                    ShowWindow(hWnd, 1);
                }
            }
Но блокнот все равно не появляется. Что делать?

Добавлено через 5 минут
Все возможные команды пробовал. Не помогло(

Добавлено через 17 минут
Нашел проблему, почему то когда уже скрыл приложение, и еще раз его потом ищешь, он находит приложениде, но хенл его отдает 0. Если сохранять хендл при скрытии окна и потом восстанавливать окно по этому хендлу, то тогда все норм.

Для примера
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int hWnd;
void hide()
{
 System.Diagnostics.Process[] processRunning = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process pr in processRunning)
            {
                if (pr.ProcessName == "notepad")
                {
                    hWnd = pr.MainWindowHandle.ToInt32();
                    ShowWindow(hWnd, 0);
                }
            }
}
void show()
{
 ShowWindow(hWnd, 1);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2013, 15:36
Ответы с готовыми решениями:

Не получается убрать белую рамку и вид окна в дизайнере не соответсвует реальному виду окна после запуска программы
Делал свой простенький Splash Screen с прогресс баром. В 2012-ой студии под Windows 8 все было ок....

Как написать скрипт для скрытия модального окна при клике вне окна(на боди) ?
У меня модальное окно вообще даже не открывается при нажатии на кнопку,потому что у меня так...

Не получается восстановить комп после вирусов
Добрый день! Поймал несколько вирусов. Антивирусник вроде их нашел и убрал. Но комп работает...

Сворачивается приложение после скрытия формы
Столкнулся с проблемой, что когда скрываю Form2 используя процедуру Hide(); то Form1 прячется за...

Отобразить после скрытия несколько edit
Здравствуйте уважаемые знатоки,не могли ли вы помочь как сделать так,чтобы,когда пользователь...

4
aleks_pilipenko
)))
606 / 329 / 55
Регистрация: 31.12.2009
Сообщений: 2,285
Записей в блоге: 3
09.09.2013, 09:21 2
Я вот так сделал, в приложении WindowsForms:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[System.Runtime.InteropServices.DllImport("user32.dll")]
        static extern bool ShowWindow(int hWnd, int nCmdShow);
 
int hWnd = 0;
            
        private void button2_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process[] processRunning = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process pr in processRunning)
            {
                if (pr.ProcessName == "notepad")
                {
                    hWnd = pr.MainWindowHandle.ToInt32();
                    ShowWindow(hWnd, 0);
                }
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            ShowWindow(hWnd, 1);
        }
Я так понимаю, что hWnd сохраняется прежним в момент нажатия button3 и поэтому блокнот открывается..

Добавлено через 14 минут
пока эксперименировал, блокнот тоже перестал появляться, открыл диспетчер, оказалось, что там куча нотепадовских процессов... Поубивал их через цикл:
C#
1
2
3
4
5
6
7
8
 System.Diagnostics.Process[] processRunning = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process pr in processRunning)
            {
                if (pr.ProcessName == "notepad")
                {
                    pr.Kill();
                }
            }
и снова все заработало...
0
Qwertiy
823 / 631 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
09.09.2013, 13:07 3
Цитата Сообщение от Setsuna Посмотреть сообщение
pr.MainWindowHandle.ToInt32();
Не надо так делать. Почему бы нормально не использовать IntPtr?
0
Setsuna
9 / 9 / 0
Регистрация: 15.06.2010
Сообщений: 126
11.09.2013, 20:24  [ТС] 4
Цитата Сообщение от Qwertiy Посмотреть сообщение
Не надо так делать. Почему бы нормально не использовать IntPtr?
Не заметил разницы IntPtr с int. Но чем лучше IntPtr в данном случае?
0
Qwertiy
823 / 631 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
11.09.2013, 22:30 5
Цитата Сообщение от Setsuna Посмотреть сообщение
Не заметил разницы IntPtr с int. Но чем лучше IntPtr в данном случае?
IntPtr не отрежит половину числа на 64-битных системах
Вообще, не знаю, может ли хендл окна быть больше 4 (или 2) млрд, но свойство Handle в .NET'е имеет тип IntPtr.
0
11.09.2013, 22:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 22:30

Открытие главной формы после скрытия
Такая ситуация. Есть главная форма(Form1). На ней button1. С его помощью открывается name.exe. При...

Обрезанная видимость окна программы
Добрый день уважаемые форумчане. У меня вопрос, как можно сделать обрезанную видимость рабочего...

Видимость/невидимость главного окна
Главное окно по нажатию на горячую клавишу должно делаться видимым/невидимым... написал: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru