用程序 (process) 數量判斷是否重複執行函式 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
用程序 (process) 數量判斷是否重複執行函式
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls, ComCtrls, Shellapi, Tlhelp32, ShlObj, ActiveX, ComObj, Registry, ExtCtrls, IdHash, IdHashMessageDigest; type TForm1 = class(TForm) IdHTTP1: TIdHTTP; Memo1: TMemo; Timer1: TTimer; Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function ProcessRepeat : Boolean; // ***** 支援 Windows 98/ME/2000/XP/2003 , 不支援 Windows NT type TProcessInfo = Record ExeFile : String; ProcessID : DWORD; end; pProcessInfo = ^TProcessInfo; var ProcessList : Tlist; ////返回的東東在"L"這個TList中。 p : pProcessInfo; i : integer; ContinueLoop : BOOL; FSnapshotHandle : THandle; hModuleSnap : THandle; FProcessEntry32 : TProcessEntry32; FModuleEntry32 : TModuleEntry32; Found:Integer; begin // 掃描 Win98/ME/2000/XP/2003 執行中的程序 // Memo1.Clear; Found:=0; ProcessList := TList.Create; ProcessList.Clear; i:=1; FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); FProcessEntry32.dwSize:=Sizeof(FProcessEntry32); ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32); while integer(ContinueLoop)<>0 do begin New(p); p.ExeFile := FProcessEntry32.szExeFile; p.ProcessID := FProcessEntry32.th32ProcessID; // http://windowssdk.msdn.microsoft.com/library/en-us/dllproc/base/moduleentry32_str.asp // http://windowssdk.msdn.microsoft.com/library/en-us/dllproc/base/module32first.asp hModuleSnap := CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, FProcessEntry32.th32ProcessID ); if( hModuleSnap = -1) then begin // Memo1.Lines.Add('CreateToolhelp32Snapshot Failed !'); end; FModuleEntry32.dwSize := sizeof(FModuleEntry32); Module32First( hModuleSnap, FModuleEntry32 ); if ( Not Module32First( hModuleSnap, FModuleEntry32 ) ) then begin // Memo1.Lines.Add('Module32First Failed !'); end; if Pos('REGMONAGENT.EXE', UpperCase(StrPas(FProcessEntry32.szExeFile))) <> 0 then begin // Memo1.Lines.Add('#' IntToStr(i) ' : ' IntToStr(p.ProcessID) ' : ' FProcessEntry32.szExeFile); // Memo1.Lines.Add('#' IntToStr(i) ' : ' IntToStr(p.ProcessID) ' : ' FModuleEntry32.szExePath); // Memo1.Lines.Add('szModule : ' FModuleEntry32.szModule); // Memo1.Lines.Add('szExePath : ' FModuleEntry32.szExePath); ProcessList.Add(p); Found:=Found 1; end; // if Pos('NOTEPAD', UpperCase(StrPas(@ProcessPath[1]))) <> 0 then ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32); i:=i 1; end; // while integer(ContinueLoop)<>0 do if Found>1 then ProcessRepeat:= True else ProcessRepeat:=False; end; procedure TForm1.Button1Click(Sender: TObject); begin If ProcessRepeat then // 如果程式已經執行過, 不再重複執行 begin Application.Terminate; end else begin // 做某些事情 end; end; end.
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |