ab.com コミュニティ https://www.activebasic.com/forum/ |
|
仮想キーコードの送出ができない時があるのですが・・・ https://www.activebasic.com/forum/viewtopic.php?t=2524 |
ページ 1 / 1 |
作成者: | wakaba [ 2009年1月04日(日) 10:43 ] |
記事の件名: | 仮想キーコードの送出ができない時があるのですが・・・ |
自動的に ファイルを開き パスワードを入力したいと考えています このサイトや ホームを参考にしながら 以下のように 記述しますと 次の場合うまく行かないようです。 1.Exe形式で暗号化したものは OKのようです 2.自己解凍方式ではない圧縮ファイルの場合は 不可 3.Excelファイルに パスワードをかけたもは 不可 何か 基本的に誤っているのでしょうか? コードは 以下です -------------------------------------------------------------- For I=0 To 99 ShellExecute(0,NULL,exeName(I),NULL,NULL,SW_SHOWDEFAULT) Sleep(1000) '起動時間 cnt=len(passBox) if cnt <> 0 then For t=0 to mojisu-1 keybd_event(s_pass[t],0,0,0) Sleep(200) Next keybd_event(13,0,0,0)'password input 自動リターン End If Sleep(1000) '動作時間 Next ------------------------------------------------------------- なお exeName(I)には 事前に ファイル名を取得しています passBoxには パスワードが入力されているものを 取得しています s_pass[t]には パスワードを分解して キーコードに変換しています(アスキーコード10進数) どうも うまくいかないので どんな部分が悪いのかが わかりません ご支援をお願いします |
作成者: | konisi [ 2009年1月04日(日) 17:31 ] |
記事の件名: | |
キーボードのキーを押した後離してみてはどうでしょうか? それと、物によっては 小文字の入力→大文字を入力 大文字の入力→Shiftを押して大文字を入力し、Shiftを離す としないといけないかもしれません。 |
作成者: | wakaba [ 2009年1月04日(日) 18:49 ] |
記事の件名: | フォーカスが無いのでは? |
早速回答ありがとう ご指摘のキーを離す件ですが 先に気がついて実験した結果です 当サイトを 再度読みなおし”フォーカスが無いのでは?”と思い 以下のようにコードを追加しましたが やっぱり不可です 現在テスト中のものは パスワード付き圧縮ファイルの解凍です ------------------------------------------------------------------------------------- For I=0 To 99 ShellExecute(0,NULL,exeName(I),NULL,NULL,SW_SHOWDEFAULT) Sleep(1000) '起動時間 hFocus = FindWindow(NULL, NULL) SetFocus(hFocus) '追加 cnt=len(passBox) '追加 if cnt <> 0 then For t=0 to cnt-1 keybd_event(s_pass[t],0,0,0) Sleep(200) Next keybd_event(13,0,0,0)'password input 自動リターン End If Sleep(1000) '動作時間 Next ------------------------------------------------------------------------------------- 違う方に 向かっているのでしょうか?_ なお ShellExecute(0,NULL,exeName(I),NULL,NULL,SW_SHOWDEFAULT) のパラメータを SW_HIDE にもしてみましたが パスワードが入力されません よろしくお願いします |
作成者: | rest [ 2009年1月07日(水) 20:47 ] |
記事の件名: | |
僕も初心者ですが、ABの基本は一応分かっているつもりです(たぶん)。 wakabaさんは、 ・実行ファイルを起動 ・出てきたダイアログのエディットボックスにパスワード入力 ・RETURNキー だと僕は解釈しました。 まずwakabaさんのコードの コード: hFocus = FindWindow(NULL, NULL)の部分。 FindWindowのパラメーターに両方ともNULLを入れると、 どんなウインドウハンドルが返るのでしょう? パスワード入力ダイアログが出るとすれば、こうじゃないですか? コード: hFocus = GetForegroundWindow()で、最前面のウインドウのハンドルが入ります。 しかし、 コード: SetFocus(hFocus)とありますが、ウインドウの中のエディットボックスに入力するんですよね? なら、 コード: Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (hWnd1 As HWND, hWnd2 As HWND, lpstr1 As LPSTR, lpstr2 As LPSTR) As HWND SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL))としないと、エディットボックスがアクティブにならないんじゃないですか? (試していませんが・・・) それと、 コード: if cnt <> 0 then For t=0 to cnt-1 keybd_event(s_pass[t],0,0,0) Sleep(200) Next keybd_event(13,0,0,0)'password input 自動リターン End Ifですが、konisi様の言うとおり、キーは押して、離さないといけません。 なので・・・ コード: if cnt <> 0 then For t=0 to cnt-1 keybd_event(s_pass[t],0,0,0) keybd_event(s_pass[t],0,KEYEVENTF_KEYUP,0) Sleep(200) Next keybd_event(VK_RETURN,0,0,0)'password input 自動リターン keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0) End Ifですよね。あと、大文字にも対応すると・・・ と言いたいところですが無理です。時間が無いので。すいません。 |
作成者: | wakaba [ 2009年1月10日(土) 22:02 ] |
記事の件名: | 説明が不足してました |
説明が足りなかったかもしれません >僕も初心者ですが、ABの基本は分かっているつもりです。 >wakabaさんは、 >・実行ファイルを起動 >・出てきたダイアログのエディットボックスにパスワード入力 >・RETURNキー >だと僕は解釈しました。 ほとんど正解ですが 少し 説明が欠けてました 「実行ファイルを起動」して パスワードの投入は うまくいきました しかし パスワード付きの圧縮ファイルを解凍するのが どうも できないのです もちろん 拡張子が関連付けされている場合を想定しています 教えてもらった SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL)) も試してみたが キーコードは入力されません 色々試してますが どうも間違った方向かなと思ってます それは 1.関連付けされてファイル(EXE形式では ない)を ShellExecute(0,NULL,”ファイル名”NULL,NULL,SW_SHOWDEFAULT) で 開きます 2.圧縮解凍ソフトが立ち上り パスワード入力を求めてきます 3.それに パスワードを入力したいのです そこで疑問なのですが 子プロセスに管理されている エディットボックスにキーコードが送れるものなのでしょうか? 立ち上った圧縮解凍ソフトに管理されているような気がするのですが・・・ |
作成者: | konisi [ 2009年1月10日(土) 22:30 ] |
記事の件名: | |
keybd_event関数はおそらくOS側の認識を弄っている(PrintScreenキーを含む特殊キーを扱える)ので、 対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。 >SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL)) も試してみたが この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか? してなければ、多分上手く動いてません。 ところで解凍ソフトは何を使っていますか? WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。 |
作成者: | wakaba [ 2009年1月10日(土) 23:38 ] |
記事の件名: | |
素早い回答 ありがとう ございます >対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。 対応しています。単体ならパスワードを入力できます >この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか? >してなければ、多分上手く動いてません。 フォーカスがないと思ったのは キーコードも送出して 設定したスリープタイムも 全て 消費してから実行しようとしているソフトが立ち上り パスワード入力待ちに なっているように考えたからです 制御するソフトが 立ち上ってからは 「パスワード入力待ち」になっています >ところで解凍ソフトは何を使っていますか? >WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。 現在は Lhaplusで 確認中です 種類の違う圧縮Or暗号化ソフトで 処理された複数のファイルを自動で処理したい と考えています(50個程度になると 複合化(解凍)が 結構メンドウです 複数個のファイルのパスワードは 同じという前提です 当初は CreateProcessで考えていたのですが 制御を待つ必要はないと考え ShellExecuteで 苦闘しています ご指導 よろしく おねがいします |
作成者: | wakaba [ 2009年1月18日(日) 17:51 ] |
記事の件名: | やっぱり説明不足でした |
restさま konisiさま ありがとうございました キーコードを送るときに どのような設定かを 漏らしてました 「作成したフォームから ボタンを押して 操作しています」 いろいろやってみたら どうも Focusにも問題がありましたが 考え方が少しズレていたかも・・・ 思ったように動作しなくて そのとき予想してたように ”自フォームに向かって Sleep -> パスワード Sleep -> を 完了して から 制御しようとしていた暗号化ファイル(圧縮ファイル)” のソフトが立ち上がり パスワードのエディットボックスを表示していたと 思います(カナ?詳細は不明です・・たぶん) そこで 自フォームを Hideに することで 解決しました ありがとうございました |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |