배열이 프로세스 처리로 가득 차서 각각의 관련 프로세스 ID를 얻으려고합니다.0을 반환하는 GetProcessId
그러나 모든 프로세스 ID는 0으로 되돌아갑니다. 내가 놓친 명백한 문제를 지적 할 수있는 사람은 누구입니까?
많은 감사
'아이 배열은 공정 ID를 이렇게 채워집니다 :
for (int i = 0; i < children.Count; ++i)
{
handle = children[i];
pid = GetProcessId(handle);
Console.WriteLine(children[i].ToString("X") + " : " + pid.ToString());
의 API :
currChild = FindWindowEx(hParent, prevChild, null, null);
가 그럼 난 프로세스 ID를 얻으려고
[DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("kernel32.dll", EntryPoint = "GetProcessId", CharSet = CharSet.Auto)]
static extern int GetProcessId(IntPtr handle);
넣어 : GetProcessId
입력으로 후자를 들어 과정 핸들이 아닌 창 핸들 을 받아
2417E2 : 0
B20D9A : 0
48108C : 0
8809D6 : 0
B5140E : 0
4207F6 : 0
4213B0 : 0
5D15DA : 0
etc ....
프로그램에 충분한 권한이 있습니까? 행정 권한으로 실행하려고 시도하십시오. – Ivan
'handle'이란 무엇입니까? '어린이 '란 무엇입니까? – Marton
pinvoke 할 때 오류 검사는 선택 사항이 아닙니다. 친숙한 .NET 예외가 없으므로 문제가 발생하지 않습니다. GetProcessId()는 0을 반환하여 실패를 나타냅니다. pinvoke 선언을 수정하고 SetLastError = true를 추가합니다. 그리고 실패 표시가 나타나면 Win32Exception을 발생시킵니다. 이제 프로그램에서 버그를 발견하는 것이 쉬워집니다. –