線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4108
推到 Plurk!
推到 Facebook!

用程序 (process) 數量判斷是否重複執行函式

 
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-09 10:39:42 IP:210.69.xxx.xxx 未訂閱
用程序 (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.

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-04-27 10:47:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!