V
vinch_sh
Unregistered / Unconfirmed
GUEST, unregistred user!
今天一时兴起写了个小service程序自己玩,主要功能是找到当前机器里正在运行的某个进程,然后关闭它,结果编好执行时发现有个让人头疼的bug——程序一定要弹出个MessageBox后才能正常的继续执行,否则执行起来就没看不到任何反应了。
程序中的部分相关代码如下:
....................
TarrPro2 = array [0..2] of string;
arrPro2: TarrPro2;
arrPro2[0] := 'iexplore.exe';
arrPro2[1] := 'QQ.exe';
arrPro2[2] := 'PPPlayer.exe';
....................
procedure TAlartEveryday.ServiceExecute(Sender: TService);
begin
while (not Terminated) do
begin
ServiceThread.ProcessRequests(False);
sleep(10);
end;
end;
procedure TAlartEveryday.Timer1Timer(Sender: TObject);
begin
p_Check_Program;
end;
procedure TAlartEveryday.p_Check_Program;
var
dwProcessID: DWORD;
j: Integer;
begin
if TimeToStr(Now) > '23:00:00' then
begin
for j := 0 to 2 do
begin
//ShowMessage(arrPro2[j]); //note here,
//如果使用这个ShowMessage的话,程序就正常了。先弹出个提示框,我点一下,然后就关掉arrPro2[j]指定的某个进程。 如果不用这个ShowMessage的话,就没有提示框出来,指定的进程也没有被自动关掉。
//找到程序的ProcessID,比如找到"QQ.exe"的当前的进程ID
dwProcessID := Self.f_Search_ProcessID_By_ProcessName(arrPro2[j]);
if dwProcessID <> 0 then
begin
ShowMessage(arrPro2[j] + ' have been forced to shut(find)');
//根据某进程ID去关闭某个进程
Self.p_Terminate_Process_By_ProcessID(dwProcessID);
end
end
end;
end;
附注:以前曾经看过某位达人也出现过此类问题,记不清了,好象是说要通过弹出的窗口来获得什么什么东西来的,[],希望遇到过此类问题的朋友能指定一下,交流交流共同提高,谢谢了先。
程序中的部分相关代码如下:
....................
TarrPro2 = array [0..2] of string;
arrPro2: TarrPro2;
arrPro2[0] := 'iexplore.exe';
arrPro2[1] := 'QQ.exe';
arrPro2[2] := 'PPPlayer.exe';
....................
procedure TAlartEveryday.ServiceExecute(Sender: TService);
begin
while (not Terminated) do
begin
ServiceThread.ProcessRequests(False);
sleep(10);
end;
end;
procedure TAlartEveryday.Timer1Timer(Sender: TObject);
begin
p_Check_Program;
end;
procedure TAlartEveryday.p_Check_Program;
var
dwProcessID: DWORD;
j: Integer;
begin
if TimeToStr(Now) > '23:00:00' then
begin
for j := 0 to 2 do
begin
//ShowMessage(arrPro2[j]); //note here,
//如果使用这个ShowMessage的话,程序就正常了。先弹出个提示框,我点一下,然后就关掉arrPro2[j]指定的某个进程。 如果不用这个ShowMessage的话,就没有提示框出来,指定的进程也没有被自动关掉。
//找到程序的ProcessID,比如找到"QQ.exe"的当前的进程ID
dwProcessID := Self.f_Search_ProcessID_By_ProcessName(arrPro2[j]);
if dwProcessID <> 0 then
begin
ShowMessage(arrPro2[j] + ' have been forced to shut(find)');
//根据某进程ID去关闭某个进程
Self.p_Terminate_Process_By_ProcessID(dwProcessID);
end
end
end;
end;
附注:以前曾经看过某位达人也出现过此类问题,记不清了,好象是说要通过弹出的窗口来获得什么什么东西来的,[],希望遇到过此类问题的朋友能指定一下,交流交流共同提高,谢谢了先。