unit uFTPclient;

interface

uses
  SysUtils,Windows,Tlhelp32;

const
   FILE_CREATE_TIME=0;    //文件建立时间
   FILE_MODIFY_TIME=1;    //修改时间
   FILE_ACCESS_TIME=2;    //最后访问时间

type
  TFileTimes   =   (ftLastAccess,   ftLastWrite,   ftCreation);

//文件是否正被使用
function IsFileInUse(FName:string):Boolean;
//提升权限
//杀服务程序进程,它会提示"拒绝访问".其实只要程序拥有Debug权限即可
//使用的时候先EnableDebugPrivilege提升权限,然后KillTask(ExeFileName: string)
function EnableDebugPrivilege: Boolean;
//查找进程  
function FindProcessId(ExeFileName: string):THandle;
//杀进程
function KillTask(ExeFileName: string): Integer;
//取文件最后使用时间
function GetFileLastAccessTime(sFileName:string;uFlag:byte):TDateTime;
//设置文件最后修改时间
Function SetFileLastWriteTime(FileName:string; DateTime: TDateTime): Integer;

implementation

Function SetFileLastWriteTime(FileName:string; DateTime: TDateTime): Integer;
var
  hFile                 : THandle;
  WriteTime, LocalTime  : TFILETIME;
  SystemTime            : TSystemTime;
begin
  result:= 0;
  try
    hFile := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
    if hFile <= 0 then
    begin
      result:= 1;
    end else
    begin
      DateTimeToSystemTime(DateTime, SystemTime);
      SystemTimeToFileTime(SystemTime, LocalTime);
      LocalFileTimeToFileTime(Localtime, WriteTime);

If not SetFileTime(hFile, nil, nil, @WriteTime) then
      begin
        result:= 2;
      end;
    end;
  finally
    FileClose(hFile);
  end;
end;

function IsFileInUse(FName:string):Boolean;  
var  
  HFileRes:HFILE;  
begin
  Result:=False;
  if not FileExists(FName) then
    Exit;
  HFileRes:=CreateFile(PChar(FName),GENERIC_READ or GENERIC_WRITE,0,
    nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  Result:=(HFileRes=INVALID_HANDLE_VALUE);
  if not Result then
    CloseHandle(HFileRes);
end;

function EnableDebugPrivilege: Boolean;
  function EnablePrivilege(hToken: Cardinal; PrivName: string; bEnable: Boolean): Boolean;
  var
  TP: TOKEN_PRIVILEGES;
  Dummy: Cardinal;
  begin
  TP.PrivilegeCount := 1;
  LookupPrivilegeValue(nil, pchar(PrivName), TP.Privileges[0].Luid);
  if bEnable then
  TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
  else TP.Privileges[0].Attributes := 0;
  AdjustTokenPrivileges(hToken, False, TP, SizeOf(TP), nil, Dummy);
  Result := GetLastError = ERROR_SUCCESS;
  end;
var
  hToken: Cardinal;
begin
  OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
  result:=EnablePrivilege(hToken, 'SeDebugPrivilege', True);
  CloseHandle(hToken);
end;

function FindProcessId(ExeFileName: string):THandle;
var
  ContinueLoop:BOOL;
  FSnapshotHandle:THandle;
  FProcessEntry32:TProcessEntry32;
begin
  result:=0;
  FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
  ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
  while integer(ContinueLoop)<>0 do
  begin
    if UpperCase(FProcessEntry32.szExeFile)=UpperCase(ExeFileName) then
    begin
      result:=FProcessEntry32.th32ProcessID;
      break;
    end;
    ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
  end;
  CloseHandle (FSnapshotHandle);
end;

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: boolean;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

while Integer(ContinueLoop) <> 0 do
  begin
  if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
  UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
  UpperCase(ExeFileName))) then
  Result := Integer(TerminateProcess(
  OpenProcess(PROCESS_TERMINATE,
  BOOL(0),
  FProcessEntry32.th32ProcessID),
  0));
  ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

function GetFileLastAccessTime(sFileName:string;uFlag:byte):TDateTime;
var
  ffd:TWin32FindData;
  dft:DWord;
  lft:TFileTime;
  h:THandle;
begin
  h:=FindFirstFile(PChar(sFileName),ffd);
  if h<>INVALID_HANDLE_VALUE then
  begin
  case uFlag of
  FILE_CREATE_TIME:FileTimeToLocalFileTime(ffd.ftCreationTime,lft);
  FILE_MODIFY_TIME:FileTimeToLocalFileTime(ffd.ftLastWriteTime,lft);
  FILE_ACCESS_TIME:FileTimeToLocalFileTime(ffd.ftLastAccessTime,lft);
  else
    FileTimeToLocalFileTime(ffd.ftLastAccessTime,lft);
  end;
  FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo);
  Result:=FileDateToDateTime(dft);
  windows.FindClose(h);
  end
  else
  result:=0;
end;

end.

转载于:https://www.cnblogs.com/hnxxcxg/archive/2008/11/12/2940978.html

杀进程和取文件最近使用时间相关推荐

  1. 如何看exe文件源代码_杀进程、删文件...看新型勒索软件RobbinHood如何干掉杀毒软件...

    网络安全公司Sophos于近日发文称,该公司旗下研究安全团队日前发现了一种此前从未被公开披露过的勒索软件,并将其命名为"RobbinHood". 文章指出,这种新型勒索软件不仅能够 ...

  2. linux查看进程运行日志文件,【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件...

    1.说出 10 个 linux 常用的指令 1) ls 查看目录中的文件 2)cd /home 进入 '/ home' 目录:cd .. 返回上一级目录:cd ../.. 返回上两级目录 3)mkdi ...

  3. Windows和服务器文件互传之scp命令,ssh通道连接服务器、linux获取管理员权限执行杀进程等常用linux命令

    一.scp命令 前提条件:本地和服务端网络通信正常,可以通过ping命令校验查看 ping 10.29.133.111 场景:把当前Windows系统桌面的 123.txt 文件上传至 10.29.1 ...

  4. Windows远程时无法复制文件--杀进程rdpclip.exe,然后再启动

    1.远程登陆到主机上 2.任务管理器杀进程rdpclip.exe 3.[开始],搜索rdpclip.exe,点击运行 此时重新复制文件,可以跨主机复制啦 原以为是公司网络限制,现在看来还是没那么先进嘛 ...

  5. linux如何查进程、杀进程,重启进程

    linux如何查进程.杀进程,重启进程 1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程序. ps c 列出程序时,显 ...

  6. 【Android 应用开发】Android 杀进程总结 ( 杀后台进程 | 杀前台进程 | 杀其它进程 )

    文章目录 一.Android 杀后台进程 二.Android 杀前台进程 三.Android 杀其它进程 一.Android 杀后台进程 使用 Android 的进程 api 类 android.os ...

  7. kill进程_你还在使用kill -9 杀进程吗?从原理谈避免踩雷!

    你要"跑路"了吗? 只要你用过 UNIX/LINUX ,我敢打赌你大概率执行过这样一条命令,也就是俗话说的"杀进程": kill -9 执行它,是不是如同执行以 ...

  8. 16进制 ksh_AIX系统中如何统计进程打开的文件数目

    作者:李烨楠 中国建设银行 来自微信公众号:平台人生 环境: AIX 6.1 AIX7.1 前言: 用户有时需要统计一个进程打开的文件数目,比如,在当前打开文件句柄使用量是否超过用户资源限制(/etc ...

  9. python定时杀进程

    python定时杀进程 之前写了个python脚本用selenium+phantomjs爬新帖子,在循环拉取页面的过程中,phantomjs总是block住,使用WebDriverWait设置最长等待 ...

最新文章

  1. Python学习---Django路由系统【all】
  2. 【Android 逆向】函数拦截 ( ARM 架构下的插桩拦截 | 完整代码示例 )
  3. Git停止跟踪rm -r --cached与ignore区别
  4. 选了combobox里的选项后没激发change事件_备胎测试:来测测你被备胎了没?
  5. springBean的作用域
  6. 【转】opengl的一些小问题
  7. Java 日志管理最佳实践
  8. 6 个实用的 Code Review 实践技巧
  9. 如何预置apk(MTK6589)
  10. Windows NT 架构
  11. 小米路由R4A千兆版安装breed+OpenWRT教程以及救砖(全脚本无需硬改)
  12. LeetCode 227. 基本计算器 II 【c++/java详细题解】
  13. 生理学_神经系统的功能
  14. TIBCO Jaspersoft 使用教程+JasperReport 生成PDF记录
  15. 【ET500P】高清摄录,相位对焦
  16. O0 O1 O2 O3优化原理
  17. Redis从入门到精通
  18. Java毕设项目藏宝阁游戏交易系统(java+VUE+Mybatis+Maven+Mysql)
  19. SRGAN 论文学习
  20. 欧拉角和四元数相互转换

热门文章

  1. 文字转语音(jacob)
  2. 文化内涵和历史深度:PC
  3. Python 属性__getattribute__
  4. TensorRT简介
  5. UTF-8与UTF-8 BOM
  6. 使用最新版(2020)IntelliJ IDEA 创建Servlet项目
  7. LeetCode简单题之分割平衡字符串
  8. OneFlow 并行特色
  9. MindSpore模型推理
  10. 多篇开源CVPR 2020 语义分割论文