2012-03-15 8 views
0

API 윈도우 기능 FindWindowEx에 문제가 있습니다. 사실, 프로세스의 MainWindow 핸들을 얻습니다. 그러나 FindWindowEx로 버튼 중 하나의 핸들을 가져 오려고하면 실행되지 않습니다. . 나는 spy ++로 윈도우와 버튼을 확인했고, 모든 것이 잘 돌아갔다. 내 프로그램에 의해 반환 된 메인 윈도우 핸들도 spy ++의 핸들과 일치한다. 나는 "Marshal.GetLastWin32Error()"에 의해 반환 된 에러 코드를 테스트했다. 나는 항상 에러 1008을 얻는다. 나는 많은 문제를 다루는 많은 오래된 게시물을 검색했지만, 그것에 대한 해결책을 찾지 못했다. 여기에 내 코드입니다 : 솔루션이 FindWindowEx 함수에서 클래스 이름을 명시 할하지 그래서 우리는 수있는 MainWindow를 핸들 모든 컨트롤을 얻을 그래서FindWindowEx가 실행되고 있지 않습니다.

씨 한스 옆모습이 말한대로
DllImport("user32.dll" , CharSet = CharSet.Auto)] 
    public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle); 
// .... 
IntPtr hwnd = proc.MainWindowHandle; 
     string str = proc.MainWindowTitle; 
     Console.WriteLine("Main window Title : " + str); 
     Console.WriteLine("Main window Handle : " + hwnd.ToString()); 
     //Get a handle for the "suivant" button 
     IntPtr hwndChild = FindWindowEx((IntPtr)hwnd, IntPtr.Zero, "Button", "suivant"); 
     int error = Marshal.GetLastWin32Error() ; 
+1

Winforms에서 단추의 클래스 이름은 "단추"가 아닙니다. Spy ++에서 쉽게 볼 수 있습니다. FindWindowEx를 사용할 수 없으므로 클래스 이름은 예측할 수 없습니다. EnumChildWindows()가 필요합니다. 그리고 보시 지요 white.codeplex.com –

+0

"Button"대신 spy ++ – Reniuz

+0

버튼을 쓰십시오. EnumChildWindows()가 부모 창에있는 모든 하위 창을 검사 할 수 있다는 것을 알았습니다. 제 경우에는 핸들을 얻고 싶습니다. on_click 액션을 자동화하기 위해 메인 윈도우에있는 버튼을 클릭합니다. –

답변

0

, 클래스 이름은 예측할 수

do { 
      IntPtr hwndchild = FindWindowEx(hwndparent, hwndchild , null, null) ; 
     }while(hwndchild != IntPtr.Zero); 

을 우리는 메인 창에서 "suivant"버튼의 핸들을 찾을 수 있습니다 : 사용

IntPtr hwndchild = FindWindowEx(hwnd, hwndchild , null, "suivant") ; 

당신의 도움에 감사드립니다.

관련 문제