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() ;
Winformsのボタンのクラス名は "ボタン"ではありません。 Spy ++で見やすい。 FindWindowExは使用できません。クラス名は予測できません。 EnumChildWindows()が必要です。 "button"の代わりにwhite.codeplex.com –
を見てくださいspy ++ – Reniuz
からボタンのクラスを書くEnumChildWindows()は親ウィンドウのすべての子ウィンドウをスキャンすることができます。私の場合はハンドルを取得したいon_clickアクションを自動化するために、メインウィンドウにあるボタンをクリックします。 –