2012-03-15 38 views
0

FindWindowExのAPIウィンドウに問題があります。実際には、メインウィンドウのハンドルを取得していますが、FindWindowExでそのボタンのハンドルを取得しようとすると、実行されていません。 私はspy ++でウィンドウとそのボタンを確認していましたが、プログラムで返されたメインウィンドウのハンドルがspy ++のものと一致していてもすべてうまく動いています。私は "Marshal.GetLastWin32Error()"によって返されたエラーコードをテストしました。 私はいつもエラー1008を取得しています。私の問題を扱っている多くの古い記事を検索しましたが、ここに私のコードは次のとおりです。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()が必要です。 "button"の代わりにwhite.codeplex.com –

+0

を見てくださいspy ++ – Reniuz

+0

からボタンのクラスを書くEnumChildWindows()は親ウィンドウのすべての子ウィンドウをスキャンすることができます。私の場合はハンドルを取得したいon_clickアクションを自動化するために、メインウィンドウにあるボタンをクリックします。 –

答えて

0

氏ハンスアンパッサンが言うように、クラス名が予測できないので、解決策はFindWindowEx機能でクラス名をspecifingないことですので、すべてのコントロールを得るためには私達ができるメインウィンドウのハンドル使用:

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

、我々は、メインウィンドウに「suivant」ボタンのハンドルを見つけることができます:

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

はあなたの助けをいただき、ありがとうございます。

関連する問題