1. unit Unit1;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls;
  6. type
  7. TForm1 = class(TForm)
  8. Button1: TButton;
  9. Button2: TButton;
  10. procedure Button1Click(Sender: TObject);
  11. procedure Button2Click(Sender: TObject);
  12. private
  13. { Private declarations }
  14. public
  15. { Public declarations }
  16. end;
  17. TFileItem = class(TCollectionItem)
  18. public
  19. FileName: WideString;
  20. FileSize: Int64;
  21. IsDirectory: Boolean;
  22. end;
  23. var
  24. Form1: TForm1;
  25. implementation
  26. {$R *.dfm}
  27. //------ 取CPU序列号 uses WinSock
  28. function GetCPUID: string;
  29. procedure SetCPU(Handle: THandle; CPUNO: Integer);
  30. var
  31. ProcessAffinity: Cardinal;
  32. _SystemAffinity: Cardinal;
  33. begin
  34. GetProcessAffinityMask(handle, ProcessAffinity, _SystemAffinity);
  35. ProcessAffinity := CPUNO;
  36. SetProcessAffinityMask(handle, ProcessAffinity);
  37. end;
  38. const
  39. CPUINFO = '%.8x-%.8x-%.8x-%.8x';
  40. var
  41. iEax: Integer;
  42. iEbx: Integer;
  43. iEcx: Integer;
  44. iEdx: Integer;
  45. begin
  46. SetCPU(GetCurrentProcess, 1);
  47. asm
  48. push ebx
  49. push ecx
  50. push edx
  51. mov   eax, 1
  52. DW $A20F//cpuid
  53. mov   iEax, eax
  54. mov   iEbx, ebx
  55. mov   iEcx, ecx
  56. mov   iEdx, edx
  57. pop edx
  58. pop ecx
  59. pop ebx
  60. end;
  61. Result := Format(CPUINFO, [iEax, iEbx, iEcx, iEdx]);
  62. end;
  63. //获取网卡
  64. function MacAddress: string;
  65. var
  66. Lib: Cardinal;
  67. Func : function(GUID: PGUID): Longint; stdcall;
  68. GUID1, GUID2: TGUID;
  69. begin
  70. Result := '';
  71. Lib := LoadLibrary('rpcrt4.dll');
  72. if Lib <> 0 then
  73. begin
  74. if Win32Platform <>VER_PLATFORM_WIN32_NT then
  75. @Func := GetProcAddress(Lib, 'UuidCreate')
  76. else @Func := GetProcAddress(Lib, 'UuidCreateSequential');
  77. if Assigned(Func) then
  78. begin
  79. if (Func(@GUID1) = 0) and
  80. (Func(@GUID2) = 0) and
  81. (GUID1.D4[2] = GUID2.D4[2]) and
  82. (GUID1.D4[3] = GUID2.D4[3]) and
  83. (GUID1.D4[4] = GUID2.D4[4]) and
  84. (GUID1.D4[5] = GUID2.D4[5]) and
  85. (GUID1.D4[6] = GUID2.D4[6]) and
  86. (GUID1.D4[7] = GUID2.D4[7]) then
  87. begin
  88. Result :=
  89. IntToHex(GUID1.D4[2], 2) + '-' +
  90. IntToHex(GUID1.D4[3], 2) + '-' +
  91. IntToHex(GUID1.D4[4], 2) + '-' +
  92. IntToHex(GUID1.D4[5], 2) + '-' +
  93. IntToHex(GUID1.D4[6], 2) + '-' +
  94. IntToHex(GUID1.D4[7], 2);
  95. end;
  96. end;
  97. FreeLibrary(Lib);
  98. end;
  99. end;
  100. //取硬盘系列号:
  101. function GetIdeSerialNumber: Pansichar; //获取硬盘的出厂系列号;
  102. const IDENTIFY_BUFFER_SIZE = 512;
  103. type
  104. TIDERegs = packed record
  105. bFeaturesReg: BYTE;
  106. bSectorCountReg: BYTE;
  107. bSectorNumberReg: BYTE;
  108. bCylLowReg: BYTE;
  109. bCylHighReg: BYTE;
  110. bDriveHeadReg: BYTE;
  111. bCommandReg: BYTE;
  112. bReserved: BYTE;
  113. end;
  114. TSendCmdInParams = packed record
  115. cBufferSize: DWORD;
  116. irDriveRegs: TIDERegs;
  117. bDriveNumber: BYTE;
  118. bReserved: array[0..2] of Byte;
  119. dwReserved: array[0..3] of DWORD;
  120. bBuffer: array[0..0] of Byte;
  121. end;
  122. TIdSector = packed record
  123. wGenConfig: Word;
  124. wNumCyls: Word;
  125. wReserved: Word;
  126. wNumHeads: Word;
  127. wBytesPerTrack: Word;
  128. wBytesPerSector: Word;
  129. wSectorsPerTrack: Word;
  130. wVendorUnique: array[0..2] of Word;
  131. sSerialNumber: array[0..19] of CHAR;
  132. wBufferType: Word;
  133. wBufferSize: Word;
  134. wECCSize: Word;
  135. sFirmwareRev: array[0..7] of Char;
  136. sModelNumber: array[0..39] of Char;
  137. wMoreVendorUnique: Word;
  138. wDoubleWordIO: Word;
  139. wCapabilities: Word;
  140. wReserved1: Word;
  141. wPIOTiming: Word;
  142. wDMATiming: Word;
  143. wBS: Word;
  144. wNumCurrentCyls: Word;
  145. wNumCurrentHeads: Word;
  146. wNumCurrentSectorsPerTrack: Word;
  147. ulCurrentSectorCapacity: DWORD;
  148. wMultSectorStuff: Word;
  149. ulTotalAddressableSectors: DWORD;
  150. wSingleWordDMA: Word;
  151. wMultiWordDMA: Word;
  152. bReserved: array[0..127] of BYTE;
  153. end;
  154. PIdSector = ^TIdSector;
  155. TDriverStatus = packed record
  156. bDriverError: Byte;
  157. bIDEStatus: Byte;
  158. bReserved: array[0..1] of Byte;
  159. dwReserved: array[0..1] of DWORD;
  160. end;
  161. TSendCmdOutParams = packed record
  162. cBufferSize: DWORD;
  163. DriverStatus: TDriverStatus;
  164. bBuffer: array[0..0] of BYTE;
  165. end;
  166. var
  167. hDevice: Thandle;
  168. cbBytesReturned: DWORD;
  169. SCIP: TSendCmdInParams;
  170. aIdOutCmd: array[0..(SizeOf(TSendCmdOutParams) + IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
  171. IdOutCmd: TSendCmdOutParams absolute aIdOutCmd;
  172. procedure ChangeByteOrder(var Data; Size: Integer);//函数中的过程
  173. var
  174. ptr: Pchar;
  175. i: Integer;
  176. c: Char;
  177. begin
  178. ptr := @Data;
  179. for I := 0 to (Size shr 1) - 1 do begin
  180. c := ptr^;
  181. ptr^ := (ptr + 1)^;
  182. (ptr + 1)^ := c;
  183. Inc(ptr, 2);
  184. end;
  185. end;
  186. begin //函数主体
  187. Result := '';
  188. if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then
  189. begin // Windows NT, Windows 2000
  190. hDevice := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
  191. FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  192. end
  193. else // Version Windows 95 OSR2, Windows 98
  194. hDevice := CreateFile('\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0);
  195. if hDevice = INVALID_HANDLE_VALUE then Exit;
  196. try
  197. FillChar(SCIP, SizeOf(TSendCmdInParams) - 1, #0);
  198. FillChar(aIdOutCmd, SizeOf(aIdOutCmd), #0);
  199. cbBytesReturned := 0;
  200. with SCIP do
  201. begin
  202. cBufferSize := IDENTIFY_BUFFER_SIZE;
  203. with irDriveRegs do
  204. begin
  205. bSectorCountReg := 1;
  206. bSectorNumberReg := 1;
  207. bDriveHeadReg := $A0;
  208. bCommandReg := $EC;
  209. end;
  210. end;
  211. if not DeviceIoControl(hDevice, $0007C088, @SCIP, SizeOf(TSendCmdInParams) - 1,@aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil) then Exit;
  212. finally
  213. CloseHandle(hDevice);
  214. end;
  215. with PIdSector(@IdOutCmd.bBuffer)^ do
  216. begin
  217. ChangeByteOrder(sSerialNumber, SizeOf(sSerialNumber));
  218. (Pchar(@sSerialNumber) + SizeOf(sSerialNumber))^:= #0;
  219. Result := PAnsichar(@sSerialNumber);
  220. end;
  221. end;
  222. //获取目录下的文件
  223. procedure FindAllFiles(APath: WideString; AFiles: TCollection;
  224. var AFileSize: Int64);
  225. var
  226. strSearchPath: WideString;
  227. strSafePath: WideString;
  228. FindData: WIN32_FIND_DATAW;
  229. hFind: THandle;
  230. objItem: TFileItem;
  231. begin
  232. strSafePath := Trim(APath);
  233. if strSafePath[Length(strSafePath)] <> '\' then strSafePath := strSafePath + '\';
  234. strSearchPath := strSafePath + '*.*';
  235. hFind := FindFirstFileW(PWideChar(strSearchPath), FindData);
  236. if (INVALID_HANDLE_VALUE = hFind) then Exit;
  237. while True do
  238. begin
  239. if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
  240. begin
  241. if(FindData.cFileName[0] <> '.') then
  242. begin
  243. objItem := TFileItem(AFiles.Add());
  244. objItem.FileName := strSafePath + FindData.cFileName;
  245. objItem.FileSize := 0;
  246. objItem.IsDirectory := True;
  247. FindAllFiles(strSafePath + FindData.cFileName, AFiles, AFileSize);
  248. end;
  249. end
  250. else
  251. begin
  252. objItem := TFileItem(AFiles.Add());
  253. objItem.FileName := strSafePath + FindData.cFileName;
  254. objItem.FileSize := FindData.nFileSizeLow or FindData.nFileSizeHigh shl SizeOf(FindData.nFileSizeHigh);
  255. objItem.IsDirectory := False;
  256. AFileSize := AFileSize + objItem.FileSize;
  257. end;
  258. if (not FindNextFileW(hFind, FindData)) then Break;
  259. end;
  260. Windows.FindClose(hFind);
  261. end;
  262. //强制删除目录
  263. function ForceToRemoveDir(ADir: string): Boolean;
  264. var
  265. pDir: PChar;
  266. SR: TSearchRec;
  267. FR: Integer;
  268. begin
  269. Result := False;
  270. pDir := PChar(ADir);
  271. if not DirectoryExists(pDir) then Exit;
  272. try
  273. if Copy(pDir, Length(pDir), 1) <> '\' then
  274. pDir := PChar(pDir + '\');
  275. FR := FindFirst(pDir + '*.*', FaAnyfile, SR);
  276. while FR = 0 do
  277. begin
  278. if ((SR.Attr and FaDirectory) = FaDirectory) and
  279. (SR.Name <> '.') and (SR.Name <> '..') then
  280. begin
  281. if not ForceToRemoveDir(StrPas(pDir) + SR.Name) then Break;
  282. end;
  283. if ((SR.Attr and FaDirectory <> FaDirectory) and
  284. (SR.Attr and FaVolumeID <> FaVolumeID)) then
  285. begin
  286. SysUtils.FileSetAttr(pDir + SR.Name,
  287. SysUtils.FileGetAttr(pDir + SR.Name) and (not
  288. SysUtils.faReadOnly)); //取消文件的只读属性
  289. if not DeleteFile(PChar(pDir + SR.Name)) then
  290. Break;
  291. end;
  292. FR := FindNext(SR);
  293. end;
  294. SysUtils.FindClose(SR);
  295. RemoveDirectory(pDir);
  296. Result := True;
  297. except
  298. end;
  299. end;
  300. //获取windows系统版本
  301. function GetWindowsVersion: string;
  302. var
  303. AWin32Version: Extended;
  304. os: string;
  305. begin
  306. os := 'Windows ';
  307. AWin32Version := StrtoFloat(format('%d.%d' ,[Win32MajorVersion, Win32MinorVersion]));
  308. if Win32Platform = VER_PLATFORM_WIN32s then
  309. Result := os + '32'
  310. else if Win32Platform=VER_PLATFORM_WIN32_WINDOWS then
  311. begin
  312. if AWin32Version=4.0 then
  313. Result := os + '95'
  314. else if AWin32Version=4.1 then
  315. Result := os + '98'
  316. else if AWin32Version=4.9 then
  317. Result := os + 'Me'
  318. else
  319. Result := os + '9x'
  320. end
  321. else if Win32Platform = VER_PLATFORM_WIN32_NT then
  322. begin
  323. if AWin32Version=3.51 then
  324. Result := os + 'NT 3.51'
  325. else if AWin32Version=4.0 then
  326. Result := os + 'NT 4.0'
  327. else if AWin32Version=5.0 then
  328. Result := os + '2000'
  329. else if AWin32Version=5.1 then
  330. Result := os + 'XP'
  331. else if AWin32Version=5.2 then
  332. Result := os + '2003'
  333. else if AWin32Version=6.0 then
  334. Result := os + 'Vista'
  335. else if AWin32Version=6.1 then
  336. Result := os + '7'
  337. else
  338. Result := os ;
  339. end
  340. else
  341. Result := os + '??';
  342. end;
  343. procedure TForm1.Button1Click(Sender: TObject);
  344. var
  345. i:integer;
  346. begin
  347. showmessage(MacAddress());
  348. showmessage(GetCPUID());
  349. showmessage(GetIdeSerialNumber());
  350. showmessage(GetWindowsVersion());
  351. end;
  352. procedure TForm1.Button2Click(Sender: TObject);
  353. var
  354. aFiles: TCollection;
  355. aFileSize: Int64;
  356. begin
  357. //FindAllFiles('C:\\apache-tomcat-6.0.32',aFiles,aFileSize);
  358. //showmessage(inttostr(aFileSize));
  359. ForceToRemoveDir('C:\apache-tomcat-6.0.32');
  360. showmessage('删除目录成功!');
  361. end;
  362. end.

http://blog.csdn.net/earbao/article/details/19629579

取CPU序列号,获取网卡,取硬盘系列号,获取目录下的文件,强制删除目录的更多相关文章

  1. PHP 获取指定目录下所有文件(包含子目录)

    PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ...

  2. PHP 批量获取指定目录下的文件列表(递归,穿透所有子目录)

    //调用 $dir = '/Users/xxx/www'; $exceptFolders = array('view','test'); $exceptFiles = array('BaseContr ...

  3. 阿里云OSS 获取目录下所有文件

    public class AliyunHandle { public static string accessKeyId = "a1uI5xxxxxxxxxrP4H"; publi ...

  4. Python开发【笔记】:获取目录下所有文件

    获取文件 import os def sub_dirs(rdir): li = os.listdir(rdir) return li def main(rdir): content = sub_dir ...

  5. [转]C# 获取指定目录下所有文件信息、移动目录、拷贝目录

    原文:http://blog.csdn.net/vchao13/article/details/6200255 1.获取指定目录下所有文件信息 /// <summary> /// 返回指定 ...

  6. 如何用DOS命令,获取一个目录下的文件数目

    发信人: GOOGOODALLS (我爱Figo), 信区: DOS 标  题: 如何用DOS命令,获取一个目录下的文件数目? 发信站: 水木社区 (Fri Mar  9 08:40:01 2007) ...

  7. 【转载】linux如何将新硬盘挂载到home目录下

    举例说明: 新增磁盘的设备文件名为 /dev/vdb 大小为100GB. #fdisk -l 查看新增的的磁盘 1.对新增磁盘进行分区 #fdisk /dev/vdb 按提示操作 p打印 n新增 d ...

  8. Golang获取目录下的文件及目录信息

    一.获取当前目录下的文件或目录信息(不包含多级子目录) func main() {  pwd,_ := os.Getwd() //获取当前目录  //获取文件或目录相关信息  fileInfoList ...

  9. C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

    using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...

随机推荐

  1. 怎样用HTML5 Canvas制作一个简单的游戏

    原文连接: How To Make A Simple HTML5 Canvas Game 自从我制作了一些HTML5游戏(例如Crypt Run)后,我收到了很多建议,要求我写一篇关于怎样利用HTML ...

  2. CF 319C(Kalila and Dimna in the Logging Industry-斜率DP,注意叉积LL溢出)

    C. Kalila and Dimna in the Logging Industry time limit per test 2 seconds memory limit per test 256 ...

  3. C#调用存储过程实现分页(个人代码笔记)

    分页的存储过程: drop proc LoadPageMain create Proc LoadPageMain @pageIndex )) Fid     ) ].Rows )            ...

  4. Swing Dance!摇摆舞!小组

    Swing Dance!摇摆舞!小组 Swing Dance!摇摆舞

  5. EF连接MySQL数据Web.Config配置

    EF连接MySQL数据Web.Config配置 <?xml version="1.0" encoding="utf-8"?> <configu ...

  6. tomcat 后台启动设置

    如果你环境变量配置对了且保证tomcat的bin目录下有如下三个文件,则你只需在cmd中运行 service install tomcat即可将tomcat添加的服务项中,然后在设置开机自动启动,则以 ...

  7. shell 调用mysql 存储过程判断真假

    mysql> create table TBL_STUDENT(id int,name char(10),CLASSNO int,BIRTH datetime); Query OK, 0 row ...

  8. Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)

    ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...

  9. Linux 下获取LAN中指定IP的网卡的MAC(物理地址)

    // all.h// 2005/06/20,a.m. wenxy #ifndef _ALL_H#define _ALL_H #include <memory.h>#include < ...

  10. Codility上的问题 (17) PI 2012

    这个题比较简单,给定一个整数数组,对每个元素,求出和它最近比它大的数的距离(下标绝对值),如果没有比它大的数,认为距离是0. 数组元素个数 N [0..50000],数组元素范围[-10^9, +10 ...