功能: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.
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.
解决方案 »
- synapse中的THTTPSend怎么才能支持ssl的网站?
- 菜鸟求助(两到课后题不会望帮忙)
- 不务正业来学习,问个问题!
- 在delphi下如何调用iphlpapi.dll中的iprenewaddress函数实现IP地址重新分配!?
- 如何自定义纸张大小并且如何实现打印一行记录后不走纸
- Vc代码转Delphi代码的问题!急,在线等待!
- 如何判断在DBGRID控件上,鼠标移动到哪一列上面?
- 谁知道delphi6 update pack2哪里有下载?
- 单击加速按钮怎么打开一个记事本和计算器?
- 数据库窗体无法访问?急救!!!
- C/S数据库数据库问题
- 急问!!!还是关于不同分辨率下窗体和控件的显示问题
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;仔细找找,看还有没有其他的地方。