문제

이미 손잡이를 알고 있다면 프로세스 클래스를 사용하여 C#에서 실행 프로세스를 어떻게 캡처 할 수 있는지 알려줄 수 있습니까?

ID는 오히려 GetRunning 프로세스 방법을 열거 할 필요가 없습니다. Pinvoke는 가능하면 괜찮습니다.

도움이 되었습니까?

해결책

평범한 C#에서는 모든 것을 통해 반복 해야하는 것 같습니다.

// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
    p => p.Id != 0 && p.Handle == myHandle);

핸들을 찾을 수없는 경우 위의 예제는 의도적으로 실패합니다. 그렇지 않으면 물론 사용할 수 있습니다 SingleOrDefault. 분명히, 그것은 당신이 프로세스 ID의 핸들을 요청하는 것을 좋아하지 않습니다. 0, 따라서 추가 상태입니다.

Winapi를 사용하면 사용할 수 있습니다 GetProcessId. Pinvoke.net에서는 찾을 수 없었지만이를 수행해야합니다.

[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);

(서명을 사용합니다 DWORD, 그러나 프로세스 ID는 표시됩니다 int.NET BCL에서 S)

손잡이가 있다는 것은 조금 이상해 보이지만 프로세스 ID는 아닙니다. 프로세스 핸들은 전화로 획득됩니다 OpenProcess, 프로세스 ID를 취합니다.

다른 팁

using System.Diagnostics;

class ProcessHandler {
    public static Process FindProcess( IntPtr yourHandle ) {
        foreach (Process p in Process.GetProcesses()) {
            if (p.Handle == yourHandle) {
                return p;
            }
        }

        return null;
    }
}

.NET API가이를 수행하는 간단한 방법이없는 것 같습니다. 문제는 어디에서 그 손잡이를 얻었는지입니다. 동일한 방식으로 프로세스 ID에 액세스 할 수있는 경우 사용할 수 있습니다.

Process.GetProcessById (int iD)

getWindowthreadProcessId winapi 호출을 사용할 수 있습니다

http://www.pinvoke.net/default.aspx/user32/getwindowthreadprocessid.html

프로세스 ID를 얻으려면 -이를 사용하여 프로세스 객체를 얻습니다 .....

그러나 왜 실행중인 프로세스의 ID를 열거하고 싶지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top