Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизЗавершение работы. Найти похожие ветки
← →
Влад (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.05 c