ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 18:26

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2009年1月04日(日) 10:43 
オフライン

登録日時: 2007年1月27日(土) 14:03
記事: 32
自動的に ファイルを開き パスワードを入力したいと考えています
このサイトや ホームを参考にしながら 以下のように  記述しますと 次の場合うまく行かないようです。
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進数)

どうも うまくいかないので どんな部分が悪いのかが わかりません
ご支援をお願いします


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2009年1月04日(日) 17:31 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
キーボードのキーを押した後離してみてはどうでしょうか?

それと、物によっては
小文字の入力→大文字を入力
大文字の入力→Shiftを押して大文字を入力し、Shiftを離す
としないといけないかもしれません。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
投稿記事Posted: 2009年1月04日(日) 18:49 
オフライン

登録日時: 2007年1月27日(土) 14:03
記事: 32
早速回答ありがとう

ご指摘のキーを離す件ですが 先に気がついて実験した結果です
当サイトを 再度読みなおし”フォーカスが無いのでは?”と思い 以下のようにコードを追加しましたが やっぱり不可です
現在テスト中のものは パスワード付き圧縮ファイルの解凍です

-------------------------------------------------------------------------------------
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 にもしてみましたが パスワードが入力されません
よろしくお願いします


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2009年1月07日(水) 20:47 
オフライン

登録日時: 2008年12月29日(月) 16:56
記事: 4
お住まい: 地球
僕も初心者ですが、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 
ですよね。あと、大文字にも対応すると・・・
と言いたいところですが無理です。時間が無いので。すいません。


最後に編集したユーザー rest [ 2009年1月17日(土) 12:35 ], 累計 1 回

通報する
ページトップ
投稿記事Posted: 2009年1月10日(土) 22:02 
オフライン

登録日時: 2007年1月27日(土) 14:03
記事: 32
説明が足りなかったかもしれません

>僕も初心者ですが、ABの基本は分かっているつもりです。
>wakabaさんは、
>・実行ファイルを起動
>・出てきたダイアログのエディットボックスにパスワード入力
>・RETURNキー
>だと僕は解釈しました。

 ほとんど正解ですが 少し 説明が欠けてました
 「実行ファイルを起動」して パスワードの投入は うまくいきました
 しかし パスワード付きの圧縮ファイルを解凍するのが どうも できないのです
 もちろん 拡張子が関連付けされている場合を想定しています
 
教えてもらった
SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL))  も試してみたが
キーコードは入力されません

色々試してますが どうも間違った方向かなと思ってます
それは 
1.関連付けされてファイル(EXE形式では ない)を
 ShellExecute(0,NULL,”ファイル名”NULL,NULL,SW_SHOWDEFAULT)
 で 開きます

2.圧縮解凍ソフトが立ち上り パスワード入力を求めてきます

3.それに パスワードを入力したいのです

そこで疑問なのですが 子プロセスに管理されている エディットボックスにキーコードが送れるものなのでしょうか?
立ち上った圧縮解凍ソフトに管理されているような気がするのですが・・・
 


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2009年1月10日(土) 22:30 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
keybd_event関数はおそらくOS側の認識を弄っている(PrintScreenキーを含む特殊キーを扱える)ので、
対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。

>SetFocus(FindWindowEx(hFocus,NULL,"EDIT",NULL))  も試してみたが
この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか?
してなければ、多分上手く動いてません。


ところで解凍ソフトは何を使っていますか?
WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2009年1月10日(土) 23:38 
オフライン

登録日時: 2007年1月27日(土) 14:03
記事: 32
素早い回答 ありがとう ございます

>対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。

対応しています。単体ならパスワードを入力できます

>この関数を使った時にパスワード入力画面のエディットボックスでカーソルがチカチカしていますか?
>してなければ、多分上手く動いてません。

 フォーカスがないと思ったのは キーコードも送出して 設定したスリープタイムも
 全て 消費してから実行しようとしているソフトが立ち上り パスワード入力待ちに
 なっているように考えたからです
 制御するソフトが 立ち上ってからは 「パスワード入力待ち」になっています


>ところで解凍ソフトは何を使っていますか?
>WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。

 現在は Lhaplusで 確認中です
 種類の違う圧縮Or暗号化ソフトで 処理された複数のファイルを自動で処理したい
 と考えています(50個程度になると 複合化(解凍)が 結構メンドウです
 複数個のファイルのパスワードは 同じという前提です

当初は CreateProcessで考えていたのですが 制御を待つ必要はないと考え
ShellExecuteで 苦闘しています
ご指導 よろしく おねがいします


通報する
ページトップ
投稿記事Posted: 2009年1月18日(日) 17:51 
オフライン

登録日時: 2007年1月27日(土) 14:03
記事: 32
restさま konisiさま ありがとうございました

キーコードを送るときに どのような設定かを 漏らしてました

「作成したフォームから ボタンを押して 操作しています」

いろいろやってみたら どうも Focusにも問題がありましたが 考え方が少しズレていたかも・・・
思ったように動作しなくて そのとき予想してたように
”自フォームに向かって Sleep -> パスワード Sleep -> を 完了して
から 制御しようとしていた暗号化ファイル(圧縮ファイル)”

のソフトが立ち上がり パスワードのエディットボックスを表示していたと
思います(カナ?詳細は不明です・・たぶん)

そこで 自フォームを Hideに することで 解決しました
ありがとうございました


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot], Baidu [Spider], Google [Bot] & ゲスト[26人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean