Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Проблема с минимизацией и восстановлением


Автор: santey 24.5.2007, 23:54
Здравствуйте.

Подскажите кто сможет, ситуация следующая.
Мне необходимо, чтобы на одном компьютере запускалось
только одно приложение.
Я при помощи мьютексов устанавливаю, работает ли
приложение уже на компьютере, и вот если работает
в свернутом виде в панеле задач, то после запуска этого
приложения из панели задач возникают проблемы с его 
минимизацией.

Например.

У меня имеется 1 запущенное приложение, я его минимизирую
в полосу задач нажатием кнопки на Esc, после чего приложение
минимизируется функцией 
Perform(WM_SYSCOMMAND,SC_MINIMIZE,0);
пробовал и вот так
Application->Minimize();
пробовал и через дескриптор.

Далее запускаю 2 такое же приложение, причем мне не нужно,
что бы оно запускалось, а нужно, чтобы 1 приложение восстановилось из полосы
задач, а второе закрылось, я использую из второго приложения следующие строки кода.

HANDLE h=OpenMutex(SYNCHRONIZE,true,"MyForm");   //открываю мьютекс

if(h)   //если приложение уже работает
   {
        HANDLE hwnd=FindWindow("TFormMain","Приложение");   //нахожу дескриптор 1 приложения
        ShowWindow(hwnd,SW_SHOWNORMAL); //здесь пробовал также SW_RESTORE, показываю 1 приложение  
        SetForegroundWindow(hwnd);   //если было запущены другие программы, то 1 приложение показываю поверх всего
        Application->Terminate();   //закрываю 2 приложение
   }
else   //если приложение не работает, то создаю мьютекс
   CreateMutex(NULL,true,"MyForm");

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

Подскажите в чем может быть дело?


Автор: ama_kid 25.5.2007, 09:26
Вместо вот этого
Цитата(santey @  24.5.2007,  23:54 Найти цитируемый пост)
ShowWindow(hwnd,SW_SHOWNORMAL);
попробуй
Код
PostMessage(hwnd,WM_SYSCOMMAND,SC_RESTORE,0);


Автор: Anikmar 25.5.2007, 09:41
А проверка эта точно один раз при запуске срабатывает? Вы случайно не в обработчик события ее поместили?

Автор: santey 25.5.2007, 23:40
http://delcb.com/forum/viewtopic.php?p=358#358

вот здесь очень грамотное решение данной проблемы.

Автор: Klin 26.5.2007, 00:01
Цитата

P.S. Единственный форум где так грамотно все объяснили.


Единственный форум, где так грамотно все переделали

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)