C# 외부 프로그램의 실행 파일 경로 알아내기. (Finding the path of the external program's ex…
페이지 정보
본문
안녕하세요. 엔지엠소프트웨어입니다. 일반적으로 외부 프로그램의 실행 파일 경로를 알아낼 일이 있을까 싶지만... 매크로 프로그램이 아니라면요^^; 혹시나 매크로 프로그램을 개발하시거나 특수한 상황에서 다른 프로그램의 실행 파일 경로가 필요한 경우 아래 코드를 유용하게 사용할 수 있을겁니다.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string GetPathByProcessID(int pid)
{
var processHandle = OpenProcess(
(int)Options.SetWindowPosFlags.SWP_NOSENDCHANGING |
(int)Options.SetWindowPosFlags.SWP_NOACTIVATE,
false,
pid);
if (processHandle == IntPtr.Zero)
return null;
const int lengthSb = 4000;
var sb = new StringBuilder(lengthSb);
string result = null;
if (GetModuleFileNameEx(processHandle, IntPtr.Zero, sb, lengthSb) > 0)
result = sb.ToString();
CloseHandle(processHandle);
return result;
}
핵심 함수는 GetModuleFileNameEx입니다.
[DllImport("psapi.dll")]
internal static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In] [MarshalAs(UnmanagedType.U4)] int nSize);
이외에 프로세스의 핸들을 가져오는 함수예요.
[DllImport("kernel32.dll")]
internal static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
아래는 함수 이름 때문에 오해가 생길수도 있는데요. 핸들의 프로세스를 종료시키는게 아닌 참조를 해제하겠다는 의미입니다. 이 함수를 호출하면 핸들의 프로세서가 커널 오브젝트의 Usage Count에서 갯수가 줄어듭니다.
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool CloseHandle(IntPtr hObject);
개발자에게 후원하기
추천, 구독, 홍보 꼭~ 부탁드립니다.
여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~
감사합니다~
추천0 비추천0
- 이전글마우스를 따라다니는 프로그램을 만드는 방법. (How to make a program that follows the mouse.) 21.05.12
- 다음글엔지엠 에디터 설치 에러 해결 방법. (응용 프로그램을 시작할 수 없습니다. 도움이 필요하면 응용 프로그램 공급업체에 문의하십시오.) 21.05.11
댓글목록
등록된 댓글이 없습니다.