Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

Завершение работы.   Найти похожие ветки 

 
Влад   (2007-01-13 14:05) [0]

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

unit wall1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls, Registry, JPEG, ShellApi, Menus;

type
 TForm1 = class(TForm)
   PopupMenu1: TPopupMenu;
   N1: TMenuItem;
   N2: TMenuItem;
   N3: TMenuItem;
   Timer1: TTimer;
   procedure loadlist;//эту и некоторые другие процедуры я опущу, не нужны они здесь
   procedure WndProc(var Message: TMessage);
   procedure FormCreate(Sender: TObject);
   procedure N1Click(Sender: TObject);//..
   procedure N3Click(Sender: TObject);
   procedure N2Click(Sender: TObject);//..
   procedure Timer1Timer(Sender: TObject);//..
 private
   { Private declarations }
 public
    { Public declarations }
 end;

var
 Form1: TForm1;
 s:TStringlist;
 Ico_Message: integer=wm_User;
noIconData: TNotifyIconData;
HIcon1: hIcon;
FHandle: HWnd;

implementation

uses wallopt;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FHandle := AllocateHWnd(WndProc);
 HIcon1:=CopyIcon(Application.Icon.Handle);
with noIconData do begin
 cbSize:=Sizeof(TNotifyIconData);
 Wnd:=FHandle;
 uID:=0;
 UFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
 SzTip:="Wallchanger";
 HIcon:=HIcon1;
 uCallBackMessage:=Ico_Message;
end;
Shell_NotifyIcon(NIM_ADD,@noIconData);
Application.ShowMainForm:=false;
end;

procedure TForm1.WndProc(var Message: TMessage);
var pt:Tpoint;
begin
if Message.Msg = Ico_Message then begin
 if Message.lParam=WM_RBUTTONUP then begin
 getcursorpos(pt);
 Form1.popupmenu1.popup(pt.x,pt.y);
 end;
 if Message.lParam=WM_LBUTTONDBLCLK then Form1.N1Click(form1);
end;
end;

procedure TForm1.N3Click(Sender: TObject);//выход
begin
deallocatehwnd(Fhandle);
Shell_NotifyIcon(NIM_DELETE,@noIconData);
S.Free;
halt;
end;

end.


 
kaZaNoVa ©   (2007-01-13 14:09) [1]

halt(1);
ExitProcess(0);


 
Влад   (2007-01-13 14:29) [2]

Спасибо, попробую.


 
Влад   (2007-01-13 15:00) [3]

К сожалению, ничего не изменилось.


 
Garacio ©   (2007-01-13 15:04) [4]

Я и сам новичок, но мне этот код помог в таком-же вопросе:

program TurnOff;

uses Windows;

{$R *.res}

var
htkThread: THandle;
tmp : TTokenPrivileges;
dfg : PTokenPrivileges;
luid : Int64;
len : Cardinal;
begin
 OpenProcessToken(GetCurrentProcess(), TOKEN_WRITE, htkThread);
 tmp.PrivilegeCount := 1;
 LookupPrivilegeValue(nil , pchar("SeShutdownPrivilege"), luid);
 tmp.Privileges[0].Luid := Luid;
 tmp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 dfg := nil;
 len := 0;
 AdjustTokenPrivileges(htkThread, false, tmp, 0, dfg, len);
 ExitWindowsEx(EWX_POWEROFF, 0);
end.


 
Влад   (2007-01-13 17:01) [5]


> Garacio ©   (13.01.07 15:04) [4]

Этот код конечно полезный, но немножко не тот: он просто завершает работу винды.


 
Влад   (2007-01-13 19:10) [6]


> deallocatehwnd(Fhandle);

Сам разобрался. Вот эта строчка лишняя.



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
2-1168501791
Apachi
2007-01-11 10:49
2007.01.28
сохранение результатов работы командной строки


15-1168445011
Галинка
2007-01-10 19:03
2007.01.28
Сделать из зеленого красное


15-1167919316
1111
2007-01-04 17:01
2007.01.28
AutoCAD


15-1168267912
ocean
2007-01-08 17:51
2007.01.28
Ночной дозор Лукьяненко


15-1167841785
fs_more
2007-01-03 19:29
2007.01.28
совместный доступ к массиву из потоков