powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
25 сообщений из 55, страница 1 из 3
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40108965
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!



У меня в приложении приходится отключать кнопку "Свернуть" - если программа запускается с полными правами (командой "Запуск от имени Администратора"). Иначе после минимизации - при клике на кнопку приложения на панели задач она не разворачивается. Если программу запускать с обычными правами - всё работает нормально.

Минимизировала ситуацию - в виде простой программки на 2 формы. В первой форме вообще ничего интересного, кроме вызова Form2.ShowModal, во второй код, приведённый ниже. Так вот - если запускать программу обычным способом - всё нормально сворачивается и разворачивается. Если же запускать от имени Администратора - после сворачивания приложения его уже невозможно нормально развернуть. В чём может быть дело?

Может, ещё какая-то команда/событие есть, передаваемая форме операционной системой, которую надо обрабатывать для восстановления?



Код: pascal
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.
unit Unit1;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;
var
   Form1: TForm1;

implementation
uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2.ShowModal;
end;

end.





Код: pascal
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.
unit Unit2;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
  TForm2 = class(TForm)
  private
    procedure WMSYSCOMMAND(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;
    procedure WMACTIVATEAPP(var Msg: TWMACTIVATEAPP);
  public
  end;
var
  Form2: TForm2;

implementation
{$R *.dfm}

procedure TForm2.WMSYSCOMMAND(var Msg: TWMSYSCOMMAND);
begin
   if (Application.MainForm.Handle>0) and (Msg.CmdType=SC_MINIMIZE) then
      ShowWindow(Application.MainForm.Handle, SW_MINIMIZE)
   else
      inherited;
end;

procedure TForm2.WMACTIVATEAPP(var Msg: TWMACTIVATEAPP);
begin
   if Application.MainForm.Handle>0 then begin
      if IsIconic(Application.MainForm.Handle) then
         ShowWindow(Application.MainForm.Handle, SW_RESTORE);
   end;
   inherited;
end;

end.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40108977
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если выкинуть этот код, то что не работает?
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40108991
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87

Код: pascal
1.
2.
3.
4.
5.
6.
7.
unit Unit2;
  TForm2 = class(TForm)
  private
    procedure WMSYSCOMMAND(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;
    procedure WMACTIVATEAPP(var Msg: TWMACTIVATEAPP);
  public
  end;


А если у процедуры WMACTIVATEAPP добавить message WM_ACTIVATEAPP?
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109013
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger
А если выкинуть этот код, то что не работает?


white_nigger,

При сворачивании в форме 2 - надо чтобы и форма 1 автоматом сворачивалась. Если выкинуть код - при сворачивании в форме 2 будет сворачиваться только она, а надо чтобы сворачивалось всё приложение. И разворачивалось тоже.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109014
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45
Наталья87

Код: pascal
1.
2.
3.
4.
5.
6.
7.
unit Unit2;
  TForm2 = class(TForm)
  private
    procedure WMSYSCOMMAND(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;
    procedure WMACTIVATEAPP(var Msg: TWMACTIVATEAPP);
  public
  end;


А если у процедуры WMACTIVATEAPP добавить message WM_ACTIVATEAPP?



Довольно очевидно - но увы, не помогло. Всё равно не разворачивается.

А вообще у формы много событий хороших и разных. Как вообще отловить список всех событий, которые поступают на форму? Можно было бы тогда их в лог записывать и по секундомеру отловить нужное ...
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109025
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Как вообще отловить список всех событий, которые поступают на форму?

Application.OnMessage, но вам не нужны сообщения, достаточно обрабатывать обычный
OnMinimize.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109044
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Наталья87Как вообще отловить список всех событий, которые поступают на форму?

Application.OnMessage, но вам не нужны сообщения, достаточно обрабатывать обычный
OnMinimize.

Никак не получается. Непонятно вообще, какое событие Проводник отправляет окну при нажатии кнопки на Панели задач
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109061
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задолбало всё, сделала обработку событий главной формы
45056, 45057
- если они приходят не ранее, чем через 2 секунды после минимизации формы- и при этом окно главной формы HIDDEN - будем форму восстанавливать. Костыль работает, но конечно, так некрасиво, хотелось бы сделать по-нормальному ...
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109064
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Непонятно вообще, какое событие Проводник отправляет окну при нажатии кнопки на
Панели задач

Смотря какой кнопки. И смотря какому окну. Прочитайте как работает TApplication.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109073
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Костыль работает, но конечно, так некрасиво, хотелось бы сделать по-нормальному ...

С вашей-то привычкой к проктостоматологии?.. Не осилите же простую мысль, что
сообщения о разворачивании приходят окну приложения, а вовсе не главной форме
(хотя на каждом гугловском заборе написаны примеры кода и как сворачивать
приложение и как его разворачивать). И даже ещё более простую мысль, что
системные функции возвращают ошибки и их следует проверять.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109074
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87Костыль работает, но конечно, так некрасиво, хотелось бы сделать по-нормальному ...

С вашей-то привычкой к проктостоматологии?.. Не осилите же простую мысль, что
сообщения о разворачивании приходят окну приложения, а вовсе не главной форме
(хотя на каждом гугловском заборе написаны примеры кода и как сворачивать
приложение и как его разворачивать). И даже ещё более простую мысль, что
системные функции возвращают ошибки и их следует проверять.


Да, вы правы - всё таки так не работает. Теперь думаю, как заставить обрабатывать текущую верхнюю форму сообщения поток событий. Application.OnMessage ведь можно задать только для одной формы, а не для каждой, а приложение ведь работает таким образом, что формы открываются, закрываются и т. д.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109084
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, может, всё-таки прекратите маяться дурью и изучите как работает Windows?..

Потому что Дельфийские приложения работают именно так, как вы и хотите, по умолчанию. То есть это Вы сделали в своём приложении что-то сумасшедшее, из-за чего оно не работает так как должно.

Опубликуйте воспроизводимый пример простейшего приложения, которое не сворачивается в таскбар и не разворачивается из него.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109088
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

А, может, всё-таки прекратите маяться дурью и изучите как работает Windows?..


Не понимаю, башка не рубит совсем и не понятно, где конкретно читать.

Но зато кажется, понимаю теперь, что в моём случае (как оно описано выше) - после минимизации приложения - при нажатии на кнопку в панели задач никакие сообщения приложению не отправляются.

Проверяю Application.OnMessage, записываю в файл - приходят только сообщения
Msg.message=0 Msg.wParam=0 Msg.lParam=0

больше никаких событий не возникает в приложении вообще кроме нулевых. Сколько ни щелкай на зависшее приложение в панели задач ...

P. S. По кодам 45056, 45057 это был мой косяк - приложение действительно восстанавливалось - но не благодаря обработке этих кодов - а просто потому что таймер у меня был кинут на Form2, который восстанавливал RESTORE приложение через 2 секунды и это не от кликов зависело ...
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109089
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Но зато кажется, понимаю теперь, что в моём случае (как оно описано выше) -
после минимизации приложения - при нажатии на кнопку в панели задач никакие
сообщения приложению не отправляются.

Уберите свой код минимизации. Дельфийские приложения сами по себе нормально
минимизируются, достаточно им не мешать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109090
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87Но зато кажется, понимаю теперь, что в моём случае (как оно описано выше) -
после минимизации приложения - при нажатии на кнопку в панели задач никакие
сообщения приложению не отправляются.

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


По умолчанию если ничего не делать - минимизируется только текущая форма, но не все формы приложения. Например, у меня есть Form1, модальная Form2 - стандартное поведение Delphi - минимизировать только Form2, а Form1 останется висеть и толку с такой "минимизации" (это издевательство над пользователем и лучше уж тогда вовсе минимизацию отключить)?

Мне нужно - чтобы при нажатии "Свернуть" сворачивались ВСЕ ФОРМЫ приложения. И при
нажатии на кнопку в Панели задач - восстанавливались обратно. Казалось бы простое, стандартное действие. На Delphi 7 с этим все время были грабли - похоже что и XE8 в этом плане ничем не лучше ...
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109091
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Казалось бы простое, стандартное действие.

Именно поэтому я и говорю прочитать о работе GUI Windows. Это НЕ простое и НЕ
стандартное действие. И тем не менее дельфийские приложения делают именно это
при минимизации главной формы. Казалось бы, что может быть проще заглянуть в
исходники VCL и посмотреть как это сделано?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109093
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87Казалось бы простое, стандартное действие.

Именно поэтому я и говорю прочитать о работе GUI Windows. Это НЕ простое и НЕ
стандартное действие. И тем не менее дельфийские приложения делают именно это
при минимизации главной формы. Казалось бы, что может быть проще заглянуть в
исходники VCL и посмотреть как это сделано?..


Как устроены

procedure TApplication.Minimize;
procedure TApplication.Restore;

в Vcl.Forms не проблема. Проблема даже не в том - как восстановить все окна после минимизации. Нет, проблема в другом - а именно как программа должна понять, что пора вызывать Application.Restore - в какой именно момент.

Сообщения-то приложению не приходят при нажатии на кнопку в панели задач (не в трее) ЕСЛИ ПРОГРАММА БЫЛА ЗАПУЩЕНА ЧЕРЕЗ "Запуск от имени Администратора" - потому и не понятно в какой именно момент вызывать Application.Restore. Остается в итоге на данном этапе - определять, что UAC включен и при этом программа запущена с правами администратора - и в этом случае не показывать кнопку "Свернуть", а пользователям пояснить, чтобы не запускали от имени Администратора.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109094
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Нет, проблема в другом - а именно как программа должна понять, что пора вызывать
Application.Restore - в какой именно момент.

А какая именно проблема-то? Что сложного в том чтобы посмотреть когда
восстанавливается свёрнутая главная форма? Всё же именно так и работает:
сворачиваете главную форму - сворачиваются все. Щёлкаете по кнопке в панели
задач - восстанавливается главная форма и все остальные.

Я реально не понимаю Что Вам мешает инициировать сворачивание главной формы
самостоятельно? Для начала - по особой кнопке - чтобы Ваш дурной обработчик
OnMinimize не мешался. И если оно будет работать - конкретно спрашивать как
сделать чтобы Ваш обработчик OnMinimize не мешался.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109104
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Что сложного в том чтобы посмотреть когда восстанавливается свёрнутая главная форма? Всё же именно так и работает: сворачиваете главную форму - сворачиваются все.

В старых дельфах было не так. Во второй-пятой точно надо было править это руками. Когда это стало нормальным - не помню.

P.S. Точнее - с главной формой точно не помню. Помню, что когда сворачивалась модальная форма - она одна, как дура, и сворачивалась, а остальное приложение оставалось недоступным красоваться на экране.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109106
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Что сложного в том чтобы посмотреть когда восстанавливается свёрнутая главная форма? Всё же именно так и работает: сворачиваете главную форму - сворачиваются все.


Непонятно - где именно смотреть.


авторP.S. Точнее - с главной формой точно не помню. Помню, что когда сворачивалась модальная форма - она одна, как дура, и сворачивалась, а остальное приложение оставалось недоступным красоваться на экране.

Кажется, Вы меня поняли. Но неужели на XE8 (2015 год все же) такое поведение нормально? Столько лет прошло после Delphi 7 а воз и ныне там? Надо на XE10 как-нибудь попробовать. А если не получится разобраться - тогда лучше просто юзерам запретить сворачивать форму - уж лучше без такой функции, чем "как дура, одна модальная форма сворачивается" или все приложение висит ...
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109107
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Dimitry Sibiryakov
Что сложного в том чтобы посмотреть когда восстанавливается свёрнутая главная форма? Всё же именно так и работает: сворачиваете главную форму - сворачиваются все.

В старых дельфах было не так. Во второй-пятой точно надо было править это руками. Когда это стало нормальным - не помню.

P.S. Точнее - с главной формой точно не помню. Помню, что когда сворачивалась модальная форма - она одна, как дура, и сворачивалась, а остальное приложение оставалось недоступным красоваться на экране.


Короче, виновата все-таки XE-8. Очень в это не хотелось верить - после Delphi 7 прошло 15 лет - несколько Windows-ов успело выйти, а такая фигня осталась.

Но как ни крути, на XE10 все работает как часы и даже если от имени Админа запускать. Так что или переходить на XE10 или городить костыли и рыться в VCL, пытаясь там что-то найти. В общем, убираю для юзеров кнопку "Свернуть" (если программа запущена от имени Админа) - чтобы возможно, потом (в светлом будущем с XE-10) ее вернуть.

Костыли городить не буду, есть чем другим заняться. Явно не для того на XE-8 с D7 переходила не ради того, чтобы городить костыли. Тему можно закрывать.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109110
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПомню, что когда сворачивалась модальная форма - она одна, как дура, и
сворачивалась, а остальное приложение оставалось недоступным красоваться на экране.

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

PS: А аффтарше всё это говорили ещё год назад в абсолютно аналогичном по степени бредовости топике. Но она и тогда стояла на своём и пыталась прогнуть под себя окружающею реальность.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109111
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Непонятно - где именно смотреть.

В исходниках VCL. Папка Sources. Конкретно - Forms.pas.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109114
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Наталья87Казалось бы простое, стандартное действие.

Именно поэтому я и говорю прочитать о работе GUI Windows. Это НЕ простое и НЕ
стандартное действие. И тем не менее дельфийские приложения делают именно это
при минимизации главной формы. Казалось бы, что может быть проще заглянуть в
исходники VCL и посмотреть как это сделано?..Она хочет, чтобы при сворачивании модальной формы свернулось бы и главное окно, а при восстановлении - чтобы развернулось и всё стало хорошо))
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109115
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Остается в итоге на данном этапе - определять, что UAC включен и при этом программа запущена с правами администратора - и в этом случае не показывать кнопку "Свернуть", а пользователям пояснить, чтобы не запускали от имени Администратора.
Логично!
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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