一個執行檔案a.exe
不論它修改成什么檔案名,比如改成b.exe或者cccccc.exe等等
如何能判斷這個檔案是否運行?
該怎么做呢
uj5u.com熱心網友回復:
特征碼。。。MD5。。。檔案大小uj5u.com熱心網友回復:
能詳細點不,MD5不適用,因為有可以有一個程式里面的某個文字不同,比如同一個程式,一個是英文,一個是漢化,他們是同一個程式,但是md5肯定不一樣啦,怎么能判斷它是否運行呢,不管是英文或者漢化版的uj5u.com熱心網友回復:
整個內核變數,就可以了。別聽上面的。uj5u.com熱心網友回復:
我不是要撰寫a.exe,我怎么能知道別的程式的這個內核變數?uj5u.com熱心網友回復:
列舉表單,判斷標題。uj5u.com熱心網友回復:
檢測程式是否運行在某些情況下,我們撰寫的應用程式同時只能有一個實體在記憶體中運行,例如服務器程式、需要獨占某設備的程式,甚至我們僅僅是讓程式同時只有一個實體運行(如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.
uj5u.com熱心網友回復:
暈,怎么都沒看清問題呢?我不是自己撰寫的程式,是想撰寫一個程式來查找其他的某一個程式是否在運行,這個其他的程式標題不固定,md5也不固定,但是是同一個程式,在詳細點就是
有一個程式A.exe,這個不是我撰寫的,是下載的程式
這個程式A.exe標題是“aaa”,通過漢化工具修改A.exe的標題為”bbb“后,然后存盤為B.exe
我想撰寫個程式 不論是a.exe還是b.exe運行,都能判斷檢測出來
這次應該寫明白我的意思了吧
uj5u.com熱心網友回復:
既然標題變了,那么你可以通過“類名”來列舉視窗,類名不會變,如果通過類名找到的視窗不唯一,也就是說也有相同類名的其他的行程,那么你可以再通過找每個exe的Z序特征來確定哪個是A.exe和B.exe,Z序特征肯定可以達到你的要求。
uj5u.com熱心網友回復:
我知道你的意思,比如某個游戲的主程式,可能有原版,可能有漢化的
方法有很多,比如做個MD5表對比。再或者,找EXE的特征碼(我曾經做過一個類似的功能,我采用PE檔案的編譯時間作為特征碼)
再或者查看EXE相對路徑的某些檔案是否存在,如果存在,則認為是指定的EXE正在運行
比如QQ.exe同目錄下有IM.dll和ABL.sys等檔案。。。。
其他方法還有很多不一一舉例,都能滿足你的目的
uj5u.com熱心網友回復:
注意findwindow的用法,不一定是查找標題,視窗的類名也是可以查的,類名在漢化時不會變.FindWindow(lpClassName, {視窗的類名}lpWindowName: PChar {視窗的標題}): HWND; {回傳視窗的句柄; 失敗回傳 0}
uj5u.com熱心網友回復:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140905.html
上一篇:cxgrid匯出excel中的身份證號碼一雙擊就變科學記數
下一篇:將表單做成控制元件
