自動的に ファイルを開き パスワードを入力したいと考えています
このサイトや ホームを参考にしながら 以下のように 記述しますと 次の場合うまく行かないようです。
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進数)
どうも うまくいかないので どんな部分が悪いのかが わかりません
ご支援をお願いします
仮想キーコードの送出ができない時があるのですが・・・
キーボードのキーを押した後離してみてはどうでしょうか?
それと、物によっては
小文字の入力→大文字を入力
大文字の入力→Shiftを押して大文字を入力し、Shiftを離す
としないといけないかもしれません。
それと、物によっては
小文字の入力→大文字を入力
大文字の入力→Shiftを押して大文字を入力し、Shiftを離す
としないといけないかもしれません。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
フォーカスが無いのでは?
早速回答ありがとう
ご指摘のキーを離す件ですが 先に気がついて実験した結果です
当サイトを 再度読みなおし”フォーカスが無いのでは?”と思い 以下のようにコードを追加しましたが やっぱり不可です
現在テスト中のものは パスワード付き圧縮ファイルの解凍です
-------------------------------------------------------------------------------------
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 にもしてみましたが パスワードが入力されません
よろしくお願いします
ご指摘のキーを離す件ですが 先に気がついて実験した結果です
当サイトを 再度読みなおし”フォーカスが無いのでは?”と思い 以下のようにコードを追加しましたが やっぱり不可です
現在テスト中のものは パスワード付き圧縮ファイルの解凍です
-------------------------------------------------------------------------------------
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 にもしてみましたが パスワードが入力されません
よろしくお願いします
僕も初心者ですが、ABの基本は一応分かっているつもりです(たぶん)。
wakabaさんは、
・実行ファイルを起動
・出てきたダイアログのエディットボックスにパスワード入力
・RETURNキー
だと僕は解釈しました。
まずwakabaさんのコードの
の部分。
FindWindowのパラメーターに両方ともNULLを入れると、
どんなウインドウハンドルが返るのでしょう?
パスワード入力ダイアログが出るとすれば、こうじゃないですか?
で、最前面のウインドウのハンドルが入ります。
しかし、
とありますが、ウインドウの中のエディットボックスに入力するんですよね?
なら、
としないと、エディットボックスがアクティブにならないんじゃないですか?
(試していませんが・・・)
それと、
ですが、konisi様の言うとおり、キーは押して、離さないといけません。
なので・・・
ですよね。あと、大文字にも対応すると・・・
と言いたいところですが無理です。時間が無いので。すいません。
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
なので・・・
コード: 全て選択
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
と言いたいところですが無理です。時間が無いので。すいません。
最後に編集したユーザー rest [ 2009年1月17日(土) 12:35 ], 累計 1 回
説明が不足してました
説明が足りなかったかもしれません
>僕も初心者ですが、ABの基本は分かっているつもりです。
>wakabaさんは、
>・実行ファイルを起動
>・出てきたダイアログのエディットボックスにパスワード入力
>・RETURNキー
>だと僕は解釈しました。
ほとんど正解ですが 少し 説明が欠けてました
「実行ファイルを起動」して パスワードの投入は うまくいきました
しかし パスワード付きの圧縮ファイルを解凍するのが どうも できないのです
もちろん 拡張子が関連付けされている場合を想定しています
教えてもらった
SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL)) も試してみたが
キーコードは入力されません
色々試してますが どうも間違った方向かなと思ってます
それは
1.関連付けされてファイル(EXE形式では ない)を
ShellExecute(0,NULL,”ファイル名”NULL,NULL,SW_SHOWDEFAULT)
で 開きます
2.圧縮解凍ソフトが立ち上り パスワード入力を求めてきます
3.それに パスワードを入力したいのです
そこで疑問なのですが 子プロセスに管理されている エディットボックスにキーコードが送れるものなのでしょうか?
立ち上った圧縮解凍ソフトに管理されているような気がするのですが・・・
>僕も初心者ですが、ABの基本は分かっているつもりです。
>wakabaさんは、
>・実行ファイルを起動
>・出てきたダイアログのエディットボックスにパスワード入力
>・RETURNキー
>だと僕は解釈しました。
ほとんど正解ですが 少し 説明が欠けてました
「実行ファイルを起動」して パスワードの投入は うまくいきました
しかし パスワード付きの圧縮ファイルを解凍するのが どうも できないのです
もちろん 拡張子が関連付けされている場合を想定しています
教えてもらった
SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL)) も試してみたが
キーコードは入力されません
色々試してますが どうも間違った方向かなと思ってます
それは
1.関連付けされてファイル(EXE形式では ない)を
ShellExecute(0,NULL,”ファイル名”NULL,NULL,SW_SHOWDEFAULT)
で 開きます
2.圧縮解凍ソフトが立ち上り パスワード入力を求めてきます
3.それに パスワードを入力したいのです
そこで疑問なのですが 子プロセスに管理されている エディットボックスにキーコードが送れるものなのでしょうか?
立ち上った圧縮解凍ソフトに管理されているような気がするのですが・・・
keybd_event関数はおそらくOS側の認識を弄っている(PrintScreenキーを含む特殊キーを扱える)ので、
対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。
>SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL)) も試してみたが
この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか?
してなければ、多分上手く動いてません。
ところで解凍ソフトは何を使っていますか?
WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。
対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。
>SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL)) も試してみたが
この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか?
してなければ、多分上手く動いてません。
ところで解凍ソフトは何を使っていますか?
WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
素早い回答 ありがとう ございます
>対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。
対応しています。単体ならパスワードを入力できます
>この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか?
>してなければ、多分上手く動いてません。
フォーカスがないと思ったのは キーコードも送出して 設定したスリープタイムも
全て 消費してから実行しようとしているソフトが立ち上り パスワード入力待ちに
なっているように考えたからです
制御するソフトが 立ち上ってからは 「パスワード入力待ち」になっています
>ところで解凍ソフトは何を使っていますか?
>WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。
現在は Lhaplusで 確認中です
種類の違う圧縮Or暗号化ソフトで 処理された複数のファイルを自動で処理したい
と考えています(50個程度になると 複合化(解凍)が 結構メンドウです
複数個のファイルのパスワードは 同じという前提です
当初は CreateProcessで考えていたのですが 制御を待つ必要はないと考え
ShellExecuteで 苦闘しています
ご指導 よろしく おねがいします
>対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。
対応しています。単体ならパスワードを入力できます
>この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか?
>してなければ、多分上手く動いてません。
フォーカスがないと思ったのは キーコードも送出して 設定したスリープタイムも
全て 消費してから実行しようとしているソフトが立ち上り パスワード入力待ちに
なっているように考えたからです
制御するソフトが 立ち上ってからは 「パスワード入力待ち」になっています
>ところで解凍ソフトは何を使っていますか?
>WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。
現在は Lhaplusで 確認中です
種類の違う圧縮Or暗号化ソフトで 処理された複数のファイルを自動で処理したい
と考えています(50個程度になると 複合化(解凍)が 結構メンドウです
複数個のファイルのパスワードは 同じという前提です
当初は CreateProcessで考えていたのですが 制御を待つ必要はないと考え
ShellExecuteで 苦闘しています
ご指導 よろしく おねがいします
やっぱり説明不足でした
restさま konisiさま ありがとうございました
キーコードを送るときに どのような設定かを 漏らしてました
「作成したフォームから ボタンを押して 操作しています」
いろいろやってみたら どうも Focusにも問題がありましたが 考え方が少しズレていたかも・・・
思ったように動作しなくて そのとき予想してたように
”自フォームに向かって Sleep -> パスワード Sleep -> を 完了して
から 制御しようとしていた暗号化ファイル(圧縮ファイル)”
のソフトが立ち上がり パスワードのエディットボックスを表示していたと
思います(カナ?詳細は不明です・・たぶん)
そこで 自フォームを Hideに することで 解決しました
ありがとうございました
キーコードを送るときに どのような設定かを 漏らしてました
「作成したフォームから ボタンを押して 操作しています」
いろいろやってみたら どうも Focusにも問題がありましたが 考え方が少しズレていたかも・・・
思ったように動作しなくて そのとき予想してたように
”自フォームに向かって Sleep -> パスワード Sleep -> を 完了して
から 制御しようとしていた暗号化ファイル(圧縮ファイル)”
のソフトが立ち上がり パスワードのエディットボックスを表示していたと
思います(カナ?詳細は不明です・・たぶん)
そこで 自フォームを Hideに することで 解決しました
ありがとうございました