自動ログインするプログラムを作成しています。
↓を参考にプログラムを作成
https://dobon.net/vb/dotnet/process/enumwindows.html
実現したいこと
ユーザー名とパスワードを自動的に入力して、ログインボタンを自動的にクリックしたい。
発生している問題・エラーメッセージ
クラス名static が複数あり、そのなかのUsernameに値を入れたいのですが、
FindWindowExでウインドウハンドルが取得できない。
該当のソースコード
C#
1 private static bool EnumWindowCallBack(IntPtr hWnd, IntPtr lparam) 2 { 3 //ウィンドウのタイトルの長さを取得する 4 int textLen = GetWindowTextLength(hWnd); 5 if (0 < textLen) 6 { 7 //ウィンドウのタイトルを取得する 8 StringBuilder tsb = new StringBuilder(textLen + 1); 9 GetWindowText(hWnd, tsb, tsb.Capacity); 10 11 if (tsb.ToString() == "XXXXX") 12 { 13 //ウィンドウを作成したプロセスのIDを取得する 14 int processId; 15 GetWindowThreadProcessId(hWnd, out processId); 16 //processのオブジェクトを作成する 17 System.Diagnostics.Process p = Process.GetProcessById(processId); 18 19 //↓ここでウインドウハンドルが取得できていない(0) 20 IntPtr hWndc1 = FindWindowEx(hWnd, IntPtr.Zero, "Static", "Username"); 21 StringBuilder sb = new StringBuilder(256); 22 sb.Append("aaaa"); 23 SendMessage(hWndc1, WM_GETTEXT, 255, sb); 24 return true; 25 } 26 //ウィンドウのクラス名を取得する 27 StringBuilder csb = new StringBuilder(256); 28 GetClassName(hWnd, csb, csb.Capacity); 29 30 //結果を表示する 31 Console.WriteLine("クラス名:" + csb.ToString()); 32 Console.WriteLine("タイトル:" + tsb.ToString()); 33 } 34 35 //すべてのウィンドウを列挙する 36 return true; 37 }
試したこと
補足情報(FW/ツールのバージョンなど)
作り方は問題なさそうな気がしますが、API の宣言部分も載せてください。
気になるところを挙げておきます。
(1) 自プログラムについて
・ターゲットフレームワークは何ですか?
・32/64ビットどちらで動いていますか?
・FindWindowEx の第3引数を null にしてみたり、EnumChildWindows で hwnd 以下の子ウインドウを列挙してみたりするとどうでしょう?
(2) 対象となるウインドウについて
・ウインドウを持っているプロセスは 32/64ビット どちらですか?
・ANSI/Unicode どちらのウインドウでしょうか?(IsWindowUnicode で確認できます。)
EnumChildWindows
https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-enumchildwindows
IsWindowUnicode
https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-iswindowunicode
以上です。
質問を編集して追記してください。
ご回答ありがとうございます。
確認します。
あ、テキストをセットするのは Username の次の Edit ですよね?
手元の環境でちょっとやってみたのですが、VB6 の TextBox を探すことができました。
ANSI/Unicode は関係ないかもしれません。
ウインドウは Username: になってませんか?(コロンが後ろについている)
ありがとうございます。
Editのほうですね。勘違いをしておりました。
できました。

回答1件
あなたの回答
tips
プレビュー