ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 21:51

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




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - 仮想キーコードの送出ができない時があるのですが・・・
作成者 メッセージ
  記事の件名:  やっぱり説明不足でした  引用付きで返信する
restさま konisiさま ありがとうございました

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

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

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

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

そこで 自フォームを Hideに することで 解決しました
ありがとうございました
投稿記事 Posted: 2009年1月18日(日) 17:51
  記事の件名:   引用付きで返信する
素早い回答 ありがとう ございます

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

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

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

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


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

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

当初は CreateProcessで考えていたのですが 制御を待つ必要はないと考え
ShellExecuteで 苦闘しています
ご指導 よろしく おねがいします
投稿記事 Posted: 2009年1月10日(土) 23:38
  記事の件名:   引用付きで返信する
keybd_event関数はおそらくOS側の認識を弄っている(PrintScreenキーを含む特殊キーを扱える)ので、
対象ソフトが元々キーボード入力に対応していないような事が無ければ反応すると思うのですが・・・。

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


ところで解凍ソフトは何を使っていますか?
WinRARのCUI版(Rar.exe)を使ってみてはどうでしょう。
投稿記事 Posted: 2009年1月10日(土) 22:30
  記事の件名:  説明が不足してました  引用付きで返信する
説明が足りなかったかもしれません

>僕も初心者ですが、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:02
  記事の件名:   引用付きで返信する
僕も初心者ですが、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 
ですよね。あと、大文字にも対応すると・・・
と言いたいところですが無理です。時間が無いので。すいません。
投稿記事 Posted: 2009年1月07日(水) 20:47
  記事の件名:  フォーカスが無いのでは?  引用付きで返信する
早速回答ありがとう

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

-------------------------------------------------------------------------------------
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月04日(日) 18:49
  記事の件名:   引用付きで返信する
キーボードのキーを押した後離してみてはどうでしょうか?

それと、物によっては
小文字の入力→大文字を入力
大文字の入力→Shiftを押して大文字を入力し、Shiftを離す
としないといけないかもしれません。
投稿記事 Posted: 2009年1月04日(日) 17:31
  記事の件名:  仮想キーコードの送出ができない時があるのですが・・・  引用付きで返信する
自動的に ファイルを開き パスワードを入力したいと考えています
このサイトや ホームを参考にしながら 以下のように  記述しますと 次の場合うまく行かないようです。
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日(日) 10:43

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


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