В Rad Studio 12 C ++ (Delphi /C ++ Builder), используя vcl.
Я сталкиваюсь с проблемой в моем приложении, где кнопка Minimize не работает после восстановления главного окна из подноса системы Mutex, чтобы вывести ранее запускаемый экземпляр на передний план. HANDLE hMutex;
hMutex = OpenMutexA(MUTEX_ALL_ACCESS, 0, "Home-work-2025-0x1");
if(!hMutex) hMutex = CreateMutexA(0,0, "Home-work-2025-0x1");
else{
HWND hFirst = ::FindWindow(NULL, L"Home Work");
if(hFirst){
if(IsIconic(hFirst)){
ShowWindow(hFirst, SW_RESTORE);
SetForegroundWindow(hFirst);
}else SetForegroundWindow(hFirst);
}
else return(-2);
return(2);
}
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
ReleaseMutex(hMutex);
< /code>
Само окно восстанавливается правильно, но кажется, что его состояние не полностью обновлено.
Вот что я пробовал до сих пор, и оно не работает: < /p>
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hFirst, &wp);
wp.showCmd = SW_RESTORE;
SetWindowPlacement(hFirst, &wp);
LONG style = GetWindowLong(hFirst, GWL_STYLE);
if (!(style & WS_MINIMIZEBOX) || !(style & WS_SYSMENU)) {
style |= WS_MINIMIZEBOX | WS_SYSMENU;
SetWindowLong(hFirst, GWL_STYLE, style);
}
RedrawWindow(hFirst, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
UpdateWindow(hFirst);
SendMessage(hFirst, WM_ACTIVATE, WA_ACTIVE, 0);
SetWindowPos(hFirst, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
SetActiveWindow(hFirst);
MSG msg;
while (PeekMessage(&msg, hFirst, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
PostMessage(hFirst, WM_SYSCOMMAND,SC_RESTORE, 0);
Важный , с искалеченной кнопкой Min и восстановленным окном, просто нажав на опцию «Show/Hide» в моем контекстном меню Trayicon, с обычным кодом:
if(Form1->WindowState == wsMinimized){
Form1->WindowState = wsNormal;
Form1->Show();
}else if(Form1->WindowState == wsNormal){
Form1->WindowState = wsMinimized;
}
< /code>
, кажется, «исправить» проблему, и кнопка Minimize снова начинает работать.void __fastcall TForm1::FormPaint(TObject *Sender)
{
Form1->Show();
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... lts-in-the
Использование мутекс для восстановления приложения, скрытого в системном лотке, приводит к минимизации окна, становясь н ⇐ C++
Программы на C++. Форум разработчиков
1743508463
Anonymous
В Rad Studio 12 C ++ (Delphi /C ++ Builder), используя vcl.
Я сталкиваюсь с проблемой в моем приложении, где кнопка Minimize не работает после восстановления главного окна из подноса системы Mutex, чтобы вывести ранее запускаемый экземпляр на передний план. HANDLE hMutex;
hMutex = OpenMutexA(MUTEX_ALL_ACCESS, 0, "Home-work-2025-0x1");
if(!hMutex) hMutex = CreateMutexA(0,0, "Home-work-2025-0x1");
else{
HWND hFirst = ::FindWindow(NULL, L"Home Work");
if(hFirst){
if(IsIconic(hFirst)){
ShowWindow(hFirst, SW_RESTORE);
SetForegroundWindow(hFirst);
}else SetForegroundWindow(hFirst);
}
else return(-2);
return(2);
}
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
ReleaseMutex(hMutex);
< /code>
Само окно восстанавливается правильно, но кажется, что его состояние не полностью обновлено.
Вот что я пробовал до сих пор, и оно не работает: < /p>
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hFirst, &wp);
wp.showCmd = SW_RESTORE;
SetWindowPlacement(hFirst, &wp);
LONG style = GetWindowLong(hFirst, GWL_STYLE);
if (!(style & WS_MINIMIZEBOX) || !(style & WS_SYSMENU)) {
style |= WS_MINIMIZEBOX | WS_SYSMENU;
SetWindowLong(hFirst, GWL_STYLE, style);
}
RedrawWindow(hFirst, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
UpdateWindow(hFirst);
SendMessage(hFirst, WM_ACTIVATE, WA_ACTIVE, 0);
SetWindowPos(hFirst, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
SetActiveWindow(hFirst);
MSG msg;
while (PeekMessage(&msg, hFirst, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
PostMessage(hFirst, WM_SYSCOMMAND,SC_RESTORE, 0);
[b] Важный [/b], с искалеченной кнопкой Min и восстановленным окном, просто нажав на опцию «Show/Hide» в моем контекстном меню Trayicon, с обычным кодом:
if(Form1->WindowState == wsMinimized){
Form1->WindowState = wsNormal;
Form1->Show();
}else if(Form1->WindowState == wsNormal){
Form1->WindowState = wsMinimized;
}
< /code>
, кажется, «исправить» проблему, и кнопка Minimize снова начинает работать.void __fastcall TForm1::FormPaint(TObject *Sender)
{
Form1->Show();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79548233/using-a-mutex-to-restore-an-application-hidden-in-the-system-tray-results-in-the[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия