当前位置: 首页 > 编程日记 > 正文

杀进程和取文件最近使用时间

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.开启Guest用户 密码可以不设&#xff0c;这样可以只输入账号Guest&#xff0c;即可登录(互访)。但需要保证以下策略的开启。 点击“开始→运行”并输入“gpedit.msc”&#xff0c;打开组策略。依次点击“计算机配置→Windows设置→安全设置→本地策略→安全选项”&#xff0c…

visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案

一般默认比较旧有两个原因&#xff0c;系统版本过旧&#xff0c;Visual Studio 版本过旧。 第一步&#xff0c;将windows 更新到最新版&#xff0c;必须是windows 10 并且更新到最新。 第二步&#xff0c;将visual studio -> 工具 -> 扩展和更新 &#xff0c;安装完所有更…

软件测试--利用正交表设计测试用例

输入条件如下&#xff1a; 姓名&#xff1a;填、不填 性别&#xff1a;男、女 学历&#xff1a;小学、初中、高中、专科、本科、硕士、博士 等级&#xff1a;普通、VIP 用正交表设计测试用例 Allpairs安装及使用 输入数据时要用tab键&#xff0c;或者使用excel表格处理 测试用…

TensorFlow 实现分类操作的函数学习

函数&#xff1a;tf.nn.sigmoid_cross_entropy_with_logits(logits, targets, nameNone) 说明&#xff1a;此函数是计算logits经过sigmod函数后的交叉熵值&#xff08;即互熵损失&#xff09;&#xff0c;能帮助你更好的进行分类操作。对于一个不相互独立的离散分类任务&#x…

【推荐】极限编程的十二大原则——小版本

小版本&#xff1a;用最少的代码工作量带来最大的业务价值。 这个原则是意思是为了高度迭代&#xff0c;与客户展现开发的进展&#xff0c;小版本发布是一个可交流的好办法&#xff0c;客户可以针对性提出反馈。但小版本把模块缩得很小&#xff0c;会影响软件的整体思路连贯&am…

抓取网络文件的URL地址作附件发送

最近公司的一个项目, 把网站的前后台分离到两个不同的服务器上(后台Server在公司内部网,前台Server在互联网了).前后台用户(分别称呼:客户,公司员工)所有的上传的文件必须要存放在前台的Server上,这样客户才能无障碍访问文件.那,客户登陆前台提出咨询问题之后,公司员工回复问题…

字符串类型String总结

1.String类&#xff1a; ①Java中&#xff0c;字符串是String类的对象&#xff1b; ②Java中&#xff0c;String是引用数据类型&#xff1b; ③可以通过使用String类提供的方法来完成对字符串的操作&#xff1b; ④创建一个字符串对象之后&#xff0c;将不能更改构成字符串的字…

C# Task注意事项

1、在Task中调用主线程控件 Task.Factory.StartNew(() > {}).ContinueWith(task > {this.Invoke(new Action(() > { MessageBox.Show(this, "执行完成"); })); }); 转载于:https://www.cnblogs.com/zhyue93/p/task1.html

CSS实现网页图片预加载

#preloadedImages {width:0px;height:0px;display:inline;background-image:url(path/to/image1.png);background-image:url(path/to/image2.png);background-image:url(path/to/image3.png);background-image:url(path/to/image4.png);background-image:url();}只要在HTML里加…

软件测试--利用组合覆盖法设计测试用例

输入条件如下&#xff1a; 姓名&#xff1a;填、不填 性别&#xff1a;男、女 学历&#xff1a;小学、初中、高中、专科、本科、硕士、博士 等级&#xff1a;普通、VIP PICT安装和使用

thinkpad 61系机器(T61 X61/X61S R61)休眠掉电问题解决办法

众多61系机器用户在待机状态下一晚上耗电10%-20%。去think服务站得到的帮助是换电池&#xff0c;换主板等实验性的办法均不能解决此问题。通过多次尝试&#xff0c;我找到了行之有效的办法与大家分享。 为满足Energy Star 4.0的标准,机器在休眠模式下,机器的一些功能,比如网络唤…

Linux必知必会的目录与启动过程

第1章 /etc/目录 1.1 /etc/sysconfig/network-scripts/ifcfg-eth0 linux第一块网卡的配置文件 [rootznix ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICEeth0 HWADDR00:0c:29:cb:69:ee TYPEEthernet UUID38ad33ab-3d2b-4183-bd84-ce1766236ddd ONBOOTyes NM_CONTRO…

Oracle10g.CentOS6安装

1、文件 Oracle 10g 下载地址_Linux下载_Linux公社-Linux系统门户网站.html&#xff08;https://www.linuxidc.com/Linux/2012-02/55336.htm&#xff09; ZC&#xff1a;这里的下载链接基本都失效了...但是&#xff0c;可以看到 每个版本对应的文件名是什么&#xff0c;然后再根…

GridView中HyperLinkField的链接使用JavaScript问题

本来写好的程序&#xff0c;突然增加需求说要点链接以后刷新父页面并弹出窗口&#xff0c;弹出可以直接用Target属性&#xff0c;在网上查了查&#xff0c;DataNavigateUrlFields并不支持JavaScript&#xff0c;在别人博客上还找到了后台绑定数据的方法&#xff0c;感觉改动太大…

软件测试实验--性能测试工具LoadRunner

HP Loadrunner12的下载和安装 LoadRunner12.x简易入门教程--&#xff08;一&#xff09;回放与录制 打不开网页&#xff0c; 有脚本&#xff0c;没有关联实例&#xff0c;显示成功。 LoadRunner12安装及基本使用

sql server性能分析--执行sql次数和逻辑次数

目前在做一个项目优化时&#xff0c;想通过数据库层分析sql server系统性能&#xff0c;查了一下网上代码&#xff0c;修改了一下标题和DMVs代码&#xff0c;以下代码可以用来分析系统运行一段时间后&#xff0c;那些语句是系统忙的sql语句。做为参考。 另类使用&#xff1a; 一…

PHP-----PHP程序设计基础教程----第四章数组

4.1 初识数组 4.1.1 什么是数组 数组是一个可以存储一组或者一系列数值的变量。在PHP中&#xff0c;数组中的元素分两部分&#xff0c;分别为键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;。其中&#xff0c;“键”为元素的识别名称&#xff0c;也被称为数组…

spark编程基础--2.2scala基础知识

&#xff1a;load 读写文件 for循环表达式 对循环的控制breakable 数据结构--数组 数据结构--元祖 数据结构--列表 Range 集合 - 可变的集合可以在原集合上进行添加、更新及删除元素。 - 不可变集合一旦被创建便不能被改变&#xff0c;添加、更新及删除操作返回的是新的集合&…

BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)

【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id3483 【题目大意】 给出一些串&#xff0c;同时给出m对前缀后缀&#xff0c;询问有多少串满足给出的前缀后缀模式&#xff0c;   题目要求强制在线 【题解】 我们对于给出的每个字符串正着插入字典树A&#xf…

石英晶体振荡器的结构

石英晶体振荡器的结构 石英晶体振荡器是利用石英晶体&#xff08;二氧化硅的结晶体&#xff09;的压电效应制成的一种谐振器件&#xff0c;它的基本构成大致是&#xff1a;从一块石英晶体上按一定方位角切下薄片&#xff08;简称为晶片&#xff0c;它可以是正方形、矩形或圆形等…

坐班族如何摆脱粗壮大腿

对于很多office lady来说一天可能会在办公室坐上八个小时甚至更多的时间&#xff0c;慢慢地会发现大腿越来越粗壮&#xff0c;其实只要认清你大腿的问题真正出在哪里&#xff1f;用一些简单的运动甚至改变坐姿&#xff0c;都可以达到阻止大腿变粗的效果……一起来看看吧&#x…

spark编程基础--2.3面向对象编程基础

类 对象 继承 参数化类型 特质 模式匹配&#xff08;match case类&#xff09; 包 类的定义 构造器 //代码文件为/usr/local/scala/mycode/Counter2.scala class Counter {private var value 0 private var name "" private var step 1 //计算器的默认递进步长 …

网络编程物理层

osi七层协议 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 每层运行常见的物理设备 我们将应用层&#xff0c;表示层&#xff0c;会话层并作应用层&#xff0c;从tcp&#xff0f;ip五层协议的角度来阐述每层的由来与功能&#xff0c;搞清楚了每层的主要协议 就理…

2017高级软件工程第1次作业

第一部分&#xff1a;结缘计算机 1.你为什么选择计算机专业&#xff1f;你认为你的条件如何&#xff1f;和这些博主比呢&#xff1f; 说起来也是阴差阳错&#xff0c;高考填志愿的时候考虑的是当时最火的3个专业&#xff1a;机械、土木、电气。只知道哎呀这个专业好&#xff0c…

微软图表控件MsChart

转自&#xff1a;http://tech.ddvip.com/2008-11/122640479791375.html 昨天在网上看到了微软发布了.NET 3.5框架下的图表控件&#xff0c;第一时间抓下来看了一下&#xff0c;发觉功能很强劲&#xff0c;基本上能想到的图表都可以使用它绘制出来&#xff0c;给图形统计和报表图…

方案里最常用的集群拓扑图(包含:多机集群、负载均衡、双机)

1、san.JPG2、SAN集群.JPG3、不同楼层双机热备.JPG4、纯软双机.JPG5、纯软双机热备备份恢复2.jpg6、多机集群与备份.jpg7、负载均衡.jpg8、负载均衡之数据库均衡.JPG9、工控.JPG10、监控.bmp11、监控应用&#xff08;SCSI&#xff09;.JPG12、容灾.JPG13、双机热备备份恢复1.jp…

基于最短路方法的生物序列比对问题研究

概述 作为生物信息学中的基本组成和重要基础&#xff0c;生物序列比对旨在找出两个或多个生物序列之间的相似性&#xff0c;发现生物序列中的功能、结构和进化信息。 生物序列比对在现实生活中有广泛的应用价值。从核酸和蛋白质序列出发,分析序列中表达结构和功能的生物信息&am…

NOI2003文本编辑器

problem 传送门 Solution 块状链表板子题…… 码了一下午&#xff0c;调了一晚上&#xff0c;代码重构了3遍&#xff0c;在终于过了。 还是太菜了。 移动光标的操作直接模拟即可。 插入操作&#xff0c;先将光标所在块分裂成两块&#xff0c;然后直接插入。 删除操作直接将边角…

spark编程基础--2.4函数式编程基础

foreach遍历操作 映射操作map,flatmap 过滤操作filter 规约操作 reduce,fold方法 拆分操作partition,groupedBy,grouped,sliding Scala入门&#xff1a;函数式编程实例WordCount import java.io.File import scala.io.Source import collection.mutable.Map object WordCount …

开始一点点写博客

今天被老樊问了几个基础的问题&#xff0c;都没回答上来&#xff01;惭愧啊&#xff01;所以决定用博客的方式来记录在学习中的问题以便好复习&#xff0c;增强记忆&#xff01;转载于:https://www.cnblogs.com/MoShin/archive/2008/11/29/1343593.html