現在ドメインのユーザー認証画面の自動入力、実行を行おうと考えています。
その際、spy++でコントロールIDを調べて自動化しようと思ったのですが、取得した値が「00000000」と表示されます。
これはたぶん取れないに近い表現なのかなと思うのですが、他に取得する方法はありますでしょうか?
spy++で取得できない理由、他の方法で自動入力、実行があれば教えていただけないでしょうか。
Spy++からコントロールIDが取得できない
-
- 記事: 31
- 登録日時: 11年前
Re: Spy++からコントロールIDが取得できない
以下のコードでひとまずhWndがしっかり取得することに成功しました。
コントロールIDではなくFindWindowExを使ってクラス名を設定することでいけました。
---------------------------------------------------------------------------------------------------------------
hWnd = FindWindow(null, "Windows セキュリティ");
DirectUIHWND = FindWindowEx(hWnd, IntPtr.Zero, "DirectUIHWND", null);
hWnd = FindWindowEx(DirectUIHWND, IntPtr.Zero, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(hWnd, IntPtr.Zero, "Edit", null);
SendMessage(hWnd, WM_SETTEXT, 0, Marshal.StringToHGlobalAnsi("test"));
----------------------------------------------------------------------------------------------------------------
ただ最後SendMessageがどうしてもうまくいきません。
メモ帳を書き換えるテストすると成功しました。
この処理に変えると文字列は送られませんでした。
何か対処法はないでしょうか。
コントロールIDではなくFindWindowExを使ってクラス名を設定することでいけました。
---------------------------------------------------------------------------------------------------------------
hWnd = FindWindow(null, "Windows セキュリティ");
DirectUIHWND = FindWindowEx(hWnd, IntPtr.Zero, "DirectUIHWND", null);
hWnd = FindWindowEx(DirectUIHWND, IntPtr.Zero, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(DirectUIHWND, hWnd, "CtrlNotifySink", null);
hWnd = FindWindowEx(hWnd, IntPtr.Zero, "Edit", null);
SendMessage(hWnd, WM_SETTEXT, 0, Marshal.StringToHGlobalAnsi("test"));
----------------------------------------------------------------------------------------------------------------
ただ最後SendMessageがどうしてもうまくいきません。
メモ帳を書き換えるテストすると成功しました。
この処理に変えると文字列は送られませんでした。
何か対処法はないでしょうか。
-
- 記事: 31
- 登録日時: 11年前
Re: Spy++からコントロールIDが取得できない
先程正常にSendMessageも通るようになりました。
何がダメだったかというと、実行ファイルに管理者権限を与えていなかったことによる、メッセージの未送信だったようです。
何がダメだったかというと、実行ファイルに管理者権限を与えていなかったことによる、メッセージの未送信だったようです。