Проблема с минимизацией и восстановлением
Подскажите кто сможет, ситуация следующая.
Мне необходимо, чтобы на одном компьютере запускалось
только одно приложение.
Я при помощи мьютексов устанавливаю, работает ли
приложение уже на компьютере, и вот если работает
в свернутом виде в панеле задач, то после запуска этого
приложения из панели задач возникают проблемы с его
минимизацией.
Например.
У меня имеется 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");
То есть второе приложение закрывается, так как работает первое
и первое восстанавливает свои размеры, но если попытаться первое приложение
минимизировать, то ничего не получается, окно не хочет сворачиваться
в панель задач.
Подскажите в чем может быть дело?
Цитата: santey
Здравствуйте.
Подскажите кто сможет, ситуация следующая.
Мне необходимо, чтобы на одном компьютере запускалось
только одно приложение.
Я при помощи мьютексов устанавливаю, работает ли
приложение уже на компьютере, и вот если работает
в свернутом виде в панеле задач, то после запуска этого
приложения из панели задач возникают проблемы с его
минимизацией.
Например.
У меня имеется 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");
То есть второе приложение закрывается, так как работает первое
и первое восстанавливает свои размеры, но если попытаться первое приложение
минимизировать, то ничего не получается, окно не хочет сворачиваться
в панель задач.
Подскажите в чем может быть дело?
Подскажите кто сможет, ситуация следующая.
Мне необходимо, чтобы на одном компьютере запускалось
только одно приложение.
Я при помощи мьютексов устанавливаю, работает ли
приложение уже на компьютере, и вот если работает
в свернутом виде в панеле задач, то после запуска этого
приложения из панели задач возникают проблемы с его
минимизацией.
Например.
У меня имеется 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");
То есть второе приложение закрывается, так как работает первое
и первое восстанавливает свои размеры, но если попытаться первое приложение
минимизировать, то ничего не получается, окно не хочет сворачиваться
в панель задач.
Подскажите в чем может быть дело?
Используй плз средства форматирования кода в сообщении пример здесь.
По вопросу. Вместо
Код:
Perform(WM_SYSCOMMAND,SC_MINIMIZE,0);
используй
Код:
this->WindowState = wsMinimized;