【发布时间】:2013-06-01 18:19:03
【问题描述】:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Tlhelp32, StdCtrls;
function processExists(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if processExists('notepad.exe') then
ShowMessage('process is running')
else
ShowMessage('process not running');
end;
enprocedure TForm1.Button1Click(Sender: TObject);
begin
end;
这是我遇到错误的确切代码,它是 delphi 技巧的示例。现在我只是想填满我的编辑,以便stackoverflow让我发布我的编辑,我显然有大部分代码,所以我需要礼貌地添加更多细节
【问题讨论】:
-
“我不断收到错误” 什么错误?在代码的哪一行。也许编辑您的问题并将您的确切代码粘贴到其中。
-
你试过打电话给
EnumProcesses吗? -
调用枚举进程?让我再读一遍,我也会发布错误
-
您似乎偶然发现了常见的代码完成问题 - 当您通过双击对象检查器中的事件创建新过程作为事件处理程序时,有时它会将新过程注入到稍微偏离位置,导致代码混淆。这就是为什么你有一行以
enprocedure开头的原因,因为en部分应该是end.无论哪种方式,在此之后你应该有一个d.。 -
@JerryDodge 这是症状,不是疾病。问题是由混合行尾字符的源引起的(有些行以 LF 结尾,其他行以 CRLF 结尾,而其他行可能只有 CR)并且 delphi IDE 错误地解析它。看到这个问题:stackoverflow.com/q/14243629/10300
标签: delphi