Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прога не дает завершиться винде. Как побороть? События при перезагрузке? 
:(
    Опции темы
tippmann
Дата 2.4.2004, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 29.3.2004
Где: Ивантеевка

Репутация: нет
Всего: нет



Гы. Я всех обманул...
Прога один раз закрылась в свернутом виде, и я подумал что все ОК (или меня проглючило).
Вот щас опять долбаю... Все таки - хто получает сообщение на закрытие проги, если у проги форма спрятана? И как отловить его, сообщение это?
Вот чего щас есть:
Код
//****************************************************
procedure TForm1.WMQueryEndSession
           (Var Message: TWMQueryEndSession);
begin
inherited;
 showmessage('WMQueryEndSession'); //вот это сообщение ни разу не видел
 Message.Result:= integer(true);
 CleanUp;
end;
//****************************************************
procedure TForm1.CleanUp;
begin
 Application.Restore;
 Application.BringToFront;
 //ShowWindow(Application.Handle, SW_NORMAL);
 RxTrayIcon1.Free;
 AppClosing := true;
 PostQuitMessage(0);
 ExitProcess(0);
end;
//****************************************************
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 showmessage('FormCloseQuery'); //выскакивает когда форма видна
 CanClose := true;
 cleanup;
end;

Т.е. процедура CleanUp (в которой выход и сделан) не выполняется, бо ее запустить неоткуда.
Процедура TForm1.WMQueryEndSession ваабще ни разу не выполнилась... Толи сообщение это не приходит, толи приходит не туда...

Это сообщение отредактировал(а) tippmann - 2.4.2004, 13:07
PM MAIL WWW ICQ   Вверх
dm9
Дата 2.4.2004, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Может, попробовать использовать finalization??

Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

var
  f : text;

{$R *.dfm}

initialization

finalization

  AssignFile (f, 'd:\111.txt');
  ReWrite (f);
  CloseFile (f);

end.

Добавлено @ 18:33
Нет, ну можно, конечно, поизвращаться.. smile.gif
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

procedure d; far;
var
  f : text;
begin
  AssignFile (f, 'd:\test1.txt');
  ReWrite (f);
  CloseFile (f);
end;

{$R *.dfm}

initialization

  ExitProc := @d;

end.


Но это бред...
PM MAIL ICQ   Вверх
dm9
Дата 2.4.2004, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Хм, прошу прощения.
Это дело не работает. Также не работает и AddTerminateProc,
если сначала вызвать
ShowWindow(Application.Handle, SW_HIDE); и
Form1.Hide;

Странно... Мне тоже уже стало интересно smile.gif
PM MAIL ICQ   Вверх
tippmann
Дата 2.4.2004, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 29.3.2004
Где: Ивантеевка

Репутация: нет
Всего: нет



Вот и я про что...
Но проги то работают тем не менее, от сторонних производителей smile.gif
Написать чтоль письмецо в фирму сделавшую регет biggrin.gif
PM MAIL WWW ICQ   Вверх
dm9
Дата 2.4.2004, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



О! Эксперименты показали, что от Ctrl+Alt+Del не спастись, если прога без видимой формы и скрыта из таскбара. Но при перезагрузке (по крайней мере, при лог-оффе, перегружаться не хочу) срабатывает AddTerminateProc. Вот прога для эксперимертов.

Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

var
  f : text;

procedure d; far;
begin
  AssignFile (f, 'd:\testtesttesttesttesttesttesttesttesttest1.txt');
  ReWrite (f);
  CloseFile (f);
end;

function gh : Boolean;
begin
  AssignFile (f, 'd:\testtesttesttesttesttesttesttesttesttest3.txt');
  ReWrite (f);
  CloseFile (f);
  Result := true;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//  ShowMessage ('!');
//  canclose := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  Hide;
end;

initialization

  ExitProc := @d;
  AddTerminateProc (gh);

finalization

  AssignFile (f, 'd:\testtesttesttesttesttesttesttesttesttest2.txt');
  ReWrite (f);
  CloseFile (f);

end.


smile.gif
PM MAIL ICQ   Вверх
pascal
Дата 3.4.2004, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 16.7.2003
Где: Россия - Уфа

Репутация: 1
Всего: 1



чё, всё ещё не решили задачу?

если нет, кинте мне исходничек на мыло MJ собака NE KTO.RU (пробелы удалить, собаку заменить)
PM MAIL WWW ICQ   Вверх
tippmann
Дата 4.4.2004, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 29.3.2004
Где: Ивантеевка

Репутация: нет
Всего: нет



Сдается мне что я понял в чем беда - я прогу сворачивал...
А внимательно присмотевшись ко всем остальным понял, что они прячутся, а не сворачиваются (т.е. форма висит, но ее не видно).
Попробовать немного некогда...
О результате обязатеньно отпишу.
PM MAIL WWW ICQ   Вверх
PILOT
Дата 4.4.2004, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



Кстати, я иногда вот так вот делаю...

Код

procedure Shut_Down_PC;
var
 hToken: THandle;
 Luid: TLargeInteger;
 tkp: TTokenPrivileges;
 ReturnLength: Cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES,hToken) then
begin
    LookUpPrivilegeValue(nil,'SeShutdownPrivilege',Luid);
    tkp.Privileges[0].Luid:=Luid;
    tkp.PrivilegeCount:=1;
    tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
    if AdjustTokenPrivileges(hToken,False,tkp,0,nil,ReturnLength) then
    begin
       if not ExitWindowsEx(EWX_FORCE or EWX_POWEROFF,0) then
       begin
          ShowMessage('Компьютер не будет перезагружен'+#13+#10+
          'из-за отсутствия прав!');
       end;
    end;
end;
end;


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

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
pascal
Дата 5.4.2004, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 16.7.2003
Где: Россия - Уфа

Репутация: 1
Всего: 1



Цитата
Сдается мне что я понял в чем беда - я прогу сворачивал...

Не думаю что в этом дело...

Некоторые персоны переписывая обработчик зыбывают его завершить

пример:
Код
procedure TTrayIcon.WndProc(var Message: TMessage);
begin
 if Message.Msg=WM_TRAYICON then
   ...
 else if Message.Msg=WM_TIMER then
   ...
 else if Message.Msg=WM_ACTIVATEAPP then
 begin
   ...
 end
 else with Message do Result := DefWindowProc(FHandle, Msg, WParam, LParam);
end;

Вот некоторые забывают о последней строчке...
Казалось бы и без неё всё отлично работает, но будут подобные глюки...

Это сообщение отредактировал(а) pascal - 5.4.2004, 02:30
PM MAIL WWW ICQ   Вверх
tippmann
Дата 6.4.2004, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 29.3.2004
Где: Ивантеевка

Репутация: нет
Всего: нет



Не народ, я был прав.
Перестал минимизировать форму - все стало работать как надо.
Просто стал перехватывать сообщение о минимизации SC_MINIMIZE и вместо минимизации делать Application.MainForm.Hide

PILOTIK
Ну это уж совсем радикальный способ smile.gif

В общем тему можно считать закрытой.

ЗЫ: вот тут еще про кое что написано, но мне не помогло... Видать не догнал я толком чего сделать надо...
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.