全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1082
推到 Plurk!
推到 Facebook!

過長的處理程序名稱會被截掉

尚未結案
ju1977
一般會員


發表:9
回覆:9
積分:3
註冊:2002-07-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-11 18:34:46 IP:211.22.xxx.xxx 未訂閱
執行檔名稱過長,在處理程序會被截掉 ex:執行檔名:Query_test.exe;處理程序只顯示Query_test.e    我有參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=43101 刪除Query_test.exe可順利執行,但碰到Query_test.e 且os:Win2000就會完蛋 因每次欲刪除的執行檔不同,固無法寫死;且客戶端電腦os也不可能更換 如何由"處理程序\影像名稱"知道"應用程式\工作"並將它結束??
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-12 11:27:21 IP:61.63.xxx.xxx 未訂閱
引言: 執行檔名稱過長,在處理程序會被截掉 ex:執行檔名:Query_test.exe;處理程序只顯示Query_test.e
這部分的問題說明能否再清楚一點 @瞭解越多.懂得越少@
ju1977
一般會員


發表:9
回覆:9
積分:3
註冊:2002-07-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-12 17:04:04 IP:211.22.xxx.xxx 未訂閱
在win2000下由程式刪除Query_test.exe都失敗,因在"工作管理員\處理程序\影像名稱" 只顯示Query_test.e(後面的"xe"會被截掉) 如何由"工作管理員\處理程序\影像名稱"知道"工作管理員\應用程式\工作"並將它結束??
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-17 11:57:09 IP:61.58.xxx.xxx 未訂閱
既然你可以確定執行檔名  並不一定要使用kill by title title 只是取得Process Handle / window handle的途徑之一    直接利用該檔名(影像名稱)取得其Process Handle 一樣可以TerminateProcess    以下這些函式可以參考 【Delphi】【發表】Program Name、PID、Window Handle、hProcess 的轉換函式 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61654    
function GetPIDByProgramName(const APName: string; bWithOutPath: Boolean =
  True): THandle;
var
  isFound: boolean;
  AHandle, AhProcess: THandle;
  ProcessEntry32: TProcessEntry32;
  APath: array[0..MAX_PATH] of char;
begin
  try
    Result := 0;
    AHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    ProcessEntry32.dwSize := Sizeof(ProcessEntry32);
    isFound := Process32First(AHandle, ProcessEntry32);        while isFound do
    begin
      AhProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        false, ProcessEntry32.th32ProcessID);
      GetModuleFileNameEx(AhProcess, 0, @APath[0], sizeof(APath));          if (UpperCase(StrPas(APath)) = UpperCase(APName)) or
        (UpperCase(StrPas(ProcessEntry32.szExeFile)) = UpperCase(APName)) or
        (bWithOutPath and (
        (UpperCase(ExtractFileName(StrPas(APath))) =
        UpperCase(ExtractFileName(APName))) or
        //for partial filename without path
        (UpperCase(ExtractFileName(StrPas(ProcessEntry32.szExeFile))) =
        UpperCase(ExtractFileName(APName)))
        )
        ) then //for partial filename without path
      begin
        Result := ProcessEntry32.th32ProcessID;
        break;
      end;
      isFound := Process32Next(AHandle, ProcessEntry32);
      CloseHandle(AhProcess);
    end;
  finally
    CloseHandle(AHandle);
  end;
end;    function GetProcessHndByPID(const hAPID: THandle): THandle;
var
  AhProcess: THandle;
begin
  if hAPID <> 0 then
  begin
    AhProcess := OpenProcess(PROCESS_ALL_ACCESS, false, hAPID);
    Result := AhProcess;
    //Only close Handle on finish operation, CloseHandle would make the AhProcess not available
  end
  else
    Result := 0;
end;    function GetProcessHndByProgramName(const APName: string; bWithOutPath: Boolean = True): THandle;
begin
  if APName <> '' then
    Result := GetProcessHndByPID(GetPIDByProgramName(APName))
  else
    Result := 0;
end;    
procedure TForm1.Button1Click(Sender: TObject);
var
  hProcess:THandle;
begin
  hProcess:=GetProcessHndByProgramName('notepad.exe', False);
  if hProcess>0 then
    TerminateProcess(hProcess,0);
end;    
@瞭解越多.懂得越少@
系統時間:2024-06-02 0:49:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!