一个执行文件a.exe
不论它修改成什么文件名,比如改成b.exe或者cccccc.exe等等
如何能判断这个文件是否运行?
该怎么做呢

解决方案 »

  1.   

    能详细点不,MD5不适用,因为有可以有一个程序里面的某个文字不同,比如同一个程序,一个是英文,一个是汉化,他们是同一个程序,但是md5肯定不一样啦,怎么能判断它是否运行呢,不管是英文或者汉化版的
      

  2.   

    我不是要编写a.exe,我怎么能知道别的程序的这个内核变量?
      

  3.   

    检测程序是否运行 
      在某些情况下,我们编写的应用程序同时只能有一个实例在内存中运行,例如服务器程序、需要独占某设备的程序,甚至我们仅仅是让程序同时只有一个实例运行(如UltraEdit就是这样做的,让你不能同时运行多个UltraEdit)。要实现此功能,需要在程序中加一点判断的代码,程序如下:
    按Ctrl+F12键,选择Project1,加入下列语句
    program Project1;
    uses
    windows, {加入该句才能调用函数}
    Forms,
    Unit1 in 'Unit1.pas'{Form1};
    {$R *.RES}const classname='TFormScreen'; {声明为主窗体的类名}
    var handle:integer; {变量}
    begin
    {-----------------主要为该判断部分----------------------}
      handle:=findwindow(classname,nil);{查找是否有此类的窗体}
      if handle<>0 then {不为0则程序已运行}
      begin
        messagebox(0,'该程序已经有一个在运行中!','运行',0);{提示程序已运行}
        ShowWindow(handle,   SW_Show); {显示程序}
        SetForegroundWindow(handle); {激活程序}
        halt; {退出程序}
      end;
    {------------------------------------------------------}
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    end.
      

  4.   

    晕,怎么都没看清问题呢?
    我不是自己编写的程序,是想编写一个程序来查找其他的某一个程序是否在运行,这个其他的程序标题不固定,md5也不固定,但是是同一个程序,在详细点就是
    有一个程序A.exe,这个不是我编写的,是下载的程序
    这个程序A.exe标题是“aaa”,通过汉化工具修改A.exe的标题为”bbb“后,然后存储为B.exe
    我想编写个程序 不论是a.exe还是b.exe运行,都能判断检测出来
    这次应该写明白我的意思了吧
      

  5.   


    既然标题变了,那么你可以通过“类名”来枚举窗口,类名不会变,如果通过类名找到的窗口不唯一,也就是说也有相同类名的其他的进程,那么你可以再通过找每个exe的Z序特征来确定哪个是A.exe和B.exe,Z序特征肯定可以达到你的要求。
      

  6.   

    我知道你的意思,比如某个游戏的主程序,可能有原版,可能有汉化的
    方法有很多,比如做个MD5表对比。再或者,找EXE的特征码(我曾经做过一个类似的功能,我采用PE文件的编译时间作为特征码)
    再或者查看EXE相对路径的某些文件是否存在,如果存在,则认为是指定的EXE正在运行
    比如QQ.exe同目录下有IM.dll和ABL.sys等文件。其他方法还有很多不一一举例,都能满足你的目的
      

  7.   

    注意findwindow的用法,不一定是查找标题,窗口的类名也是可以查的,类名在汉化时不会变.FindWindow(lpClassName,        {窗口的类名}lpWindowName: PChar {窗口的标题}): HWND;              {返回窗口的句柄; 失败返回 0}
      

  8.   

     function IsFileInUseEx(FileName:string):Boolean;
    var
      hFileRes: HFILE;
      FileAttr: Integer;
    begin
      Result := False;
      FileAttr := GetFileAttributes(Pchar(FileName));
      if (FileAttr mod 2) = 1 then SetFileAttributes(Pchar(FileName),0);
      hFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0,nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
      Try
        Result := (hFileRes = INVALID_HANDLE_VALUE);
        if FileAttr <> 0 then SetFileAttributes(Pchar(FileName),FileAttr);
      Finally
        CloseHandle(hFileRes);
      End;
    end;