Q&A

  • 프로세스ID가지구 프로세스명가져오는법 없나여?
유창원님(?)맞죠?? 이분이 비슷한질문올리시면서 같이 올리신 코드보구

구현하려다가 실패하구 (ㅡ.ㅜ) 이틀동안 머리 싸메구 이것저것 시도해보다가

여기저기 게시판 뒤지고 끝내는 머리가 공황상태에 빠져서 아무것도 할수없게

되어 이렇게 도움요청합니다 ㅠ.ㅠ

예를들면 ABC.exe라는 파일이 있는데요. 이 실행파일에 대한

프로세스 이름??(Ctrl+Alt+Del 누르면 목록에 나오는거 있잖아여) 하고

프로세스ID랑 프로세스에 대한 경로를 알려구 그러거든요??

밑에 두개 가지고 고민해봤는데 잘모르겠어서.. ^^;

1)
====================================================================
이건 저 위에 유창원님이 예전에 올리신 글보구 해본건데요.. 밑에처럼 하면
프로세스 ID랑 경로는 가져오는거 같던데 프로세스명을 알수는 없을까요 ??
혹시 프로세스ID가지구 프로세스명 가져오는 API함수는 없을까요   O.Oa

procedure Process32List;
var
  Process32: TProcessEntry32;
  SHandle:   THandle;
  Next:      BOOL;
  slist : TStringList;
begin
  slist := TStringList.Create;
  Process32.dwSize := SizeOf(TProcessEntry32);
  SHandle          := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  if Process32First(SHandle, Process32) then begin
  // 실행화일명과 process object 저장
    Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
    repeat
      Next := Process32Next(SHandle, Process32);
      if Next then Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
      // 여기는 리스트에 실행파일목록 볼려구 만든겁니다..
      Form1.lbx3.Items.Add(Process32.szExeFile);
    until not Next;
  end;
  CloseHandle(SHandle);
end;
==================================================================

2)
==================================================================
이건요 프로세스명긁어와서 프로세스 ID까지 알아내는데는 성공했는데
다음에 프로세스 경로를 알아야 하는데 그걸모르겠어요 ㅡ.ㅜ

function EnumWindowsCode(Wnd : hWnd;Form : TCustomForm) : Boolean; Export; StdCall;
var
  Buffer : Array[0..99] of char;
  ProcessTitle : string;
  TheWindow : HWND;
  ProcessID : DWORD;
  tmp : string;
begin
  GetWindowText(Wnd,Buffer,100);
  if StrLen(Buffer) <> 0 then begin
    ProcessTitle := StrPas(Buffer);
    TheWindow := FindWindow(PChar(nil), PChar(ProcessTitle));
    GetWindowThreadProcessId(TheWindow, @ProcessID);
    tmp := IntToStr(ProcessID-(ProcessID*2)) + '|'+ ProcessTitle;
    Form1.lbx2.Items.Add(tmp);
  end;
  Result := True;
end;


procedure TForm1.btn_pro_loadClick(Sender: TObject);
begin
  lbx2.Clear;
  EnumWindows(@EnumWindowsCode, LongInt(Self));
end;
===================================================================

제가 초보고 이것저것 막 해보다가 코드도 이상할지 모르지만 조금만 도와

주세요~!! 네? ㅡ.ㅜ 부탁드립니다... 힌트라도.. 전부다 가르켜주시기 귀찮

으시다면 운만 띄워주세요 제가 연구해볼께요
2  COMMENTS
  • Profile
    미소나눔 2003.01.18 04:17
    여기 참고

    http://www.michbak.com/english/informatics/programming/delphi/ProcessList.php3

    uses  psapi 사용
  • Profile
    우연짱 2003.01.18 20:43

    98에서두 되나요? 제가 잘못한건지 모르겠는데, 2000에서는 되는데

    98에선 제대로 안나와서 콩글리쉬로 영어읽어보니까 NT전용같은데..

    맞나요 ^^a