飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6120|回复: 11

提交一个定时关机程序

[复制链接]

该用户从未签到

发表于 2006-6-22 11:02:14 | 显示全部楼层 |阅读模式
用DELPHI写了个,试着玩下。。。。。

TimerShutDownPrj.rar

194.25 KB, 下载次数: 55, 下载积分: 飘云币 -2 枚

评分

参与人数 1飘云币 +4 收起 理由
飘云 + 4 加飘云币一个,继续努力!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    难过
    3 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2006-6-22 11:07:17 | 显示全部楼层
    不错,建议把原创程序放到置顶的 “原创软件交流贴” 中,然后自己独占一个楼层,以后好更新~~
    以便我们以后收集
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-22 11:12:22 | 显示全部楼层
    支持一下~~ /:D

    放出源码,我给你加精... ;P

    [ 本帖最后由 黑夜彩虹 于 2006-6-22 11:14 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-6-22 11:22:48 | 显示全部楼层
    DELPHI 2006编译,比较粗糙。。。。。。。。

    unit TimerShutDown;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, XPMan, StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, ImgList,
      AppEvnts;

    type
      TForm1 = class(TForm)
        TrayIconTimer: TTrayIcon;
        TimerShutDown: TTimer;
        GroupBox1: TGroupBox;
        UpDown1: TUpDown;
        Edit1: TEdit;
        UpDown2: TUpDown;
        Edit2: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        ImageList1: TImageList;
        PopupMenu1: TPopupMenu;
        RestoreMenu: TMenuItem;
        N2: TMenuItem;
        ExitMenu: TMenuItem;
        AboutMenu: TMenuItem;
        ApplicationEvents1: TApplicationEvents;
        RadioGroup1: TRadioGroup;
        CheckBox1: TCheckBox;

        procedure TimerShutDownTimer(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
        procedure ApplicationEvents1Minimize(Sender: TObject);
        procedure AboutMenuClick(Sender: TObject);
        procedure ExitMenuClick(Sender: TObject);
        procedure RestoreMenuClick(Sender: TObject);
      private
        { Private declarations }
        Count: Integer;
        procedure AdjustToken;
      public
        { Public declarations }

      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.AboutMenuClick(Sender: TObject);
    begin
      ShowMessage('飘云阁定时关机1.0版');
    end;

    procedure TForm1.AdjustToken;
    var
      hdlProcessHandle: Cardinal;
      hdlTokenHandle: Cardinal;
      tmpLuid: Int64;
      tkp: TOKEN_PRIVILEGES;
      tkpNewButIgnored: TOKEN_PRIVILEGES;
      lBufferNeeded: Cardinal;
      Privilege: array[0..0] of _LUID_AND_ATTRIBUTES;
    begin
      hdlProcessHandle := GetCurrentProcess; //get current process pseudohandle
      OpenProcessToken(hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY), hdlTokenHandle);
      // Get the LUID for shutdown privilege.
      LookupPrivilegevalue('', 'SeShutdownPrivilege', tmpLuid);
      Privilege[0].Luid := tmpLuid;
      Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
      tkp.PrivilegeCount := 1; // One privilege to set
      tkp.Privileges[0] := Privilege[0];
      // Enable the shutdown privilege in the access token of this process.
      AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Sizeof(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded);
    end;

    procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
    begin
      TrayIconTimer.Visible := True;
    //   Application.ShowMainForm:=False;
      ShowWindow(Application.Handle, SW_HIDE);
    end;

    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      try
        Count := StrToInt(Edit1.Text) * 60 + StrToInt(edit2.Text);
        TrayIconTimer.Hint := '距离' + RadioGroup1.Items[RadioGroup1.itemIndex] + '还有' + IntToStr(count div 60) + '小时' + IntToStr(count mod 60) + '分钟';
        TimerShutDown.Enabled := True;
        Application.Minimize;
        TrayIconTimer.Animate:=CheckBox1.Checked;
        TrayIconTimer.AnimateInterval:=TimerShutDown.Interval div 2;
        BitBtn1.Enabled:=False;
      except
        ShowMessage('Please input integer!');
      end;
    end;

    procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
      TrayIconTimer.Visible := False;
      TimerShutDown.Enabled := False;
      Close;
    end;

    procedure TForm1.RestoreMenuClick(Sender: TObject);
    begin
      ShowWindow(Application.Handle, SW_SHOWNORMAL);
    end;

    procedure TForm1.TimerShutDownTimer(Sender: TObject);
    begin
      Dec(Count);
      TrayIconTimer.Hint := '距离' + RadioGroup1.Items[RadioGroup1.itemIndex] + '还有' + IntToStr(count div 60) + '小时' + IntToStr(count mod 60) + '分钟';
      if Count = 0 then
      begin
        AdjustToken;
        case RadioGroup1.ItemIndex of
          0:
            ExitWindowsEx(EWX_LOGOFF or EWX_FORCE, 0);

          1:
            ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0);

          2:
            ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN or EWX_FORCE, 0);

        end;
      end;
    end;

    procedure TForm1.ExitMenuClick(Sender: TObject);
    begin
      Form1.Close;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Count := 0;
    end;


    end.
    +++++++++++++++++++++++++++++
    为了奖历开源,加精,HOHO...


    [ 本帖最后由 黑夜彩虹 于 2006-6-22 14:04 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-6-22 22:23:45 | 显示全部楼层
    快哉! 兄弟好棒... 猫还不会.呵呵...

    [ 本帖最后由 野猫III 于 2006-6-22 22:25 编辑 ]
    2.GIF
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-21 09:52:58 | 显示全部楼层
    还是不错的   

    可是用  shutdown  命令同样可以达到效果
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-24 18:53:38 | 显示全部楼层
    在天极看过
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-8-2 12:41:20 | 显示全部楼层
    原帖由 ~逍遥~ 于 2006-7-21 09:52 发表
    还是不错的   

    可是用  shutdown  命令同样可以达到效果

    SHUTDOWN中销定或未登录状态时无法工作。。。。。。。。。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-3-1 16:08:18 | 显示全部楼层
    快哉! 兄弟好棒..先看看 了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-5-10 14:25:02 | 显示全部楼层
    看看了不错的东西
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表