powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Повторный запуск программы
4 сообщений из 4, страница 1 из 1
Повторный запуск программы
    #32240010
Алекceй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При запуске приложения проверяю запущено ли оно.
Если оно запущено и минимизировано пытаюсь поднять его главное окно.
Нахожу его handle через FindWindow, далее вызываю
ShowWindow(hwnd, SW_RESTORE);
BringWindowToTop(hwnd);
Окно всплывает, но кнопка Minimize в нем НЕ РАБОТАЕТ и если щелкнуть
правой кнопкой мыши по задаче (от которой это окно) на панели задач, пункт
Restore в Popup-меню подсвечен, как будто команды Restore еще не было. При
выборе пункта Restore он хайдится и кнопка Minimize главного окна начинает
функционировать.
Я пробовал и SendMessage и ShowWindow, но ничего не помогает.
Чего-то не хватает для полного восстановления окна программно. Не подскажете ли, чего ?
...
Рейтинг: 0 / 0
Повторный запуск программы
    #32240029
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так:

Код: plaintext
ShowWindow(hwnd, SW_SHOWNORMAL);
...
Рейтинг: 0 / 0
Повторный запуск программы
    #32240131
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для какого окна ты делаешь ShowWindow(hwnd, SW_RESTORE) ?
Попробуй сделать для Aplication.
...
Рейтинг: 0 / 0
Повторный запуск программы
    #32240253
Фотография Andrew Campball
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VCLUnit.pas (RXLib)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
function ActivatePrevInstance(const MainFormClass, ATitle: string): Boolean;
var
  PrevWnd, PopupWnd, ParentWnd: HWnd;
{$IFDEF WIN32}
  IsDelphi: Longint;
{$ELSE}
  S: array[ 0 .. 255 ] of Char;
{$ENDIF}
begin
  Result := False;
  PrevWnd := FindPrevInstance(MainFormClass, ATitle);
  if PrevWnd <>  0  then begin
    ParentWnd := GetWindowParent(PrevWnd);
    while (ParentWnd <> GetDesktopWindow) and (ParentWnd <>  0 ) do begin
      PrevWnd := ParentWnd;
      ParentWnd := GetWindowParent(PrevWnd);
    end;
    if WindowClassName(PrevWnd) = 'TApplication' then begin
{$IFDEF WIN32}
      IsDelphi :=  0 ;
      EnumThreadWindows(GetWindowTask(PrevWnd), @WindowsEnum,
        LPARAM(@IsDelphi));
      if Boolean(IsDelphi) then Exit;
{$ELSE}
      GetModuleFileName(GetWindowTask(PrevWnd), S, SizeOf(S) -  1 );
      if AnsiUpperCase(ExtractFileName(StrPas(S))) = 'DELPHI.EXE' then Exit;
{$ENDIF}
      if IsIconic(PrevWnd) then begin { application is minimized }
        SendMessage(PrevWnd, WM_SYSCOMMAND, SC_RESTORE,  0 );
        Result := True;
        Exit;
      end
      else ShowWinNoAnimate(PrevWnd, SW_SHOWNOACTIVATE);
    end
    else ActivateWindow(PrevWnd);
    PopupWnd := GetLastActivePopup(PrevWnd);
    if (PrevWnd <> PopupWnd) and IsWindowVisible(PopupWnd) and
      IsWindowEnabled(PopupWnd) then
    begin
{$IFDEF WIN32}
      SetForegroundWindow(PopupWnd);
{$ELSE}
      BringWindowToTop(PopupWnd);
{$ENDIF}
    end
    else ActivateWindow(PopupWnd);
    Result := True;
  end;
end;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Повторный запуск программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]