功能:A小时后,计算机自动关机,关机前在磁盘C:\创建一个文本文件。
A表示可以写入注册表中的变量。
问题:程序报错 Integer转变成String。unit Unit1;interfaceuses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus,AppEvnts,shellapi,jpeg, ComCtrls,registry;type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    Image1: TImage;
    RadioButton2: TRadioButton;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Timer1: TTimer;
    Button1: TButton;
    Button2: TButton;
    Timer2: TTimer;
    Label4: TLabel;
    Edit4: TEdit;
    N6: TMenuItem;
    procedure N3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1 ;
  P,Ti1:Pchar;
  Flags:Longint;
  i:integer;
  TimeDelay:integer=14400;
  temptimedelay:integer=35;
  atom:integer;
  Reg: TRegistry;
  myfile:Textfile;
  strfile:string;implementationuses Unit2;{$R *.dfm}
// /函数//
{判断是哪类操作系统,以确定关机方式}
function GetOperatingSystem: string;
var  osVerInfo: TOSVersionInfo;
begin
  Result:='';
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(osVerInfo) then
    case osVerInfo.dwPlatformId of
      VER_PLATFORM_WIN32_NT:
        begin
          Result := 'Windows NT/2000/XP'
        end;
      VER_PLATFORM_WIN32_WINDOWS:
        begin
          Result := 'Windows 95/98/98SE/Me';
        end;
    end;
end;function Writetxt():string  ;    // 写入一个文本
begin
  strfile:='计算机正常在正常时间内关闭,关闭时间:'+ datetimetostr(now) ;
   begin
     if GetOperatingSystem = 'Windows NT/2000/XP' then
        assignfile(myfile,'C:\close.txt')
     else
        assignfile(myfile,'C:\WINDOWS\Desktop\close.txt');
        rewrite(myfile);
    try
        writeln(myfile,strfile);
    finally
        closefile(myfile);
    end;
  end;
end ;{获得计算机名}
function GetComputerName: string;
var
  buffer: array[0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
  Size: Cardinal;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  Windows.GetComputerName(@buffer, Size);
  Result := strpas(buffer);
end;{定时关机函数 ,各参数的意义如下:
Computer: 计算机名;Msg:显示的提示信息;
Time:时间延迟; Force:是否强制关机;
Reboot: 是否重启动}
function TimedShutDown(Computer: string; Msg: string;
  Time: Word; Force: Boolean; Reboot: Boolean): Boolean;
var
  rl: Cardinal;
  hToken: Cardinal;
  tkp: TOKEN_PRIVILEGES;
  //Reg: TRegistry;
begin
  {获得用户关机特权,仅对Windows NT/2000/XP}
  OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
  if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
  begin
    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    tkp.PrivilegeCount := 1;
    AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
  end ;
  Result := InitiateSystemShutdown(PChar(Computer), PChar(Msg), Time, Force, Reboot);
end;
///procedure TForm1.N3Click(Sender: TObject); // 菜单-退出
begin
close;
end;procedure TForm1.Timer1Timer(Sender: TObject); //Time控件关机事件
begin
timer1.Enabled:=False;
if  GetOperatingSystem='Windows NT/2000/XP' then
  begin
    {调用系统的关机提示窗口,只限于Windows NT/2000/XP。}
    TimedShutDown(getcomputername, '系统即将要关机!请保存好你的数据退出!如要取消自动关机,请再点击自动关机设置中的放弃!', TimeDelay, true, false);
    button2.Enabled :=true;
  end;
if  GetOperatingSystem='Windows 95/98/98SE/Me' then   //直接关机
    begin
    timer2.Enabled:=true
    end;
end;procedure TForm1.Button2Click(Sender: TObject); //取消关机按钮
begin
 if  GetOperatingSystem='Windows NT/2000/XP' then
    {对于Windows NT/2000/XP,取消关机}
    begin
      AbortSystemShutdown(pchar(getcomputername));
    end;
    {停止倒记时}
  if timer1.Enabled =true then
  begin
    timer1.Enabled :=false;
    button2.Enabled :=false;
  end;
   timer2.enabled:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
var
tempregvalue:string;
begin
tempregvalue:=timedelay;
Reg := TRegistry.Create;
timedelay :=strtoint(edit1.text) * 3600 + strtoint(edit2.text)* 60 + strtoint(edit3.text);
  try
    Reg.RootKey := HKEY_CURRENT_USER;
  if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Runonce', True) then
      Reg.WriteString('xzfCloseComputer',tempregvalue);
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
if  GetOperatingSystem='Windows NT/2000/XP' then
  begin
    {调用系统的关机提示窗口,只限于Windows NT/2000/XP。}
    TimedShutDown(getcomputername, '系统即将要关机!请保存好你的数据退出!如要取消自动关机,请再点击自动关机设置中的放弃', 5, true, false);
      button2.Enabled :=true;
      timer1.Enabled :=true;
  end;
if  GetOperatingSystem='Windows 95/98/98SE/Me' then
    begin
    timer1.Enabled :=true;//直接关机
    end;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin 
temptimedelay:=temptimedelay+1;
if temptimedelay=timedelay then  Writetxt() ;
form1.Caption :='现在离关机时间还有'+inttostr(timedelay)+'秒';
    if timedelay>0 then
      begin
      timedelay:=timedelay-1 ;
      Edit4.text:=inttostr(timedelay) ;
      end
    else
      begin
        timer1.Enabled :=false;
        {强制Windows 95/98/98SE/Me关机}
         Writetxt();
         ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE,0);
      end;
end;procedure TForm1.N5Click(Sender: TObject);
begin
form2.show;
end;procedure TForm1.FormCreate(Sender: TObject);
begin  
Reg:= TRegistry.Create;
  try
    Reg.RootKey:=HKEY_CURRENT_USER;
    if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Runonce',True) then
      begin
        timedelay:=strtoint(Reg.ReadString('xzfCloseComputer'));
      end
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;end.

解决方案 »

  1.   

    类型不匹配procedure TForm1.Button1Click(Sender: TObject);
    var
      tempregvalue:string; //注意,这里是 string类型
    begin
    //////////////
      tempregvalue :=timedelay; //这里就错了将一个integer类型的数据符值给string类型!
    ///////////
      Reg := TRegistry.Create;
      timedelay :=strtoint(edit1.text) * 3600 + strtoint(edit2.text)* 60 + strtoint(edit3.text);
      try
        Reg.RootKey := HKEY_CURRENT_USER;
      if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Runonce', True) then
          Reg.WriteString('xzfCloseComputer',tempregvalue);
      finally
        Reg.CloseKey;
        Reg.Free;
      end;
    end;仔细找找,看还有没有其他的地方。