HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0208
メルクン6つめのinputに"6060"を8つめのinputに"8080"をセットしたいのですが9解決


メルクン

リンク

2012/2/8(Wed) 20:34:45|NO.44768

教えて下さい
他人作成のプログラムの複数の入力エリアにデータを自動入力したいのですが
同じ入力エリアに追加入力されているようです
問題点や把握していない基礎事項があれば教えてください
また追加入力ではなくて書き換えをしたいのですがどうすればいいのでしょうか?
よろしくお願いします

;ここからプログラムの一部
moji99 = "6060"
moji98 = "8080"
aplsel MemoDt,0 ;■検索するタイトル
wait 100
if stat = 1 :dialog "aplsel 失敗しました",0,"***HP"

aplobj "edit",6 ;obj名 "edit" でok?
wait 100

aplact ;ウインドをアクティブにして、キー入力できる状態にする
wait 100

aplstr moji99
wait 100
aplobj "edit",8
wait 100

aplact ;思い通りに動かないので追加してみた
wait 100
aplstr moji98
wait 100
stop;ここまで;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20120208tst


結果は 同じ入力エリア(input)に"6060" が入力された後
"8080"が追加入力 されて "60608080" となりました 
6つめのinputに"6060"を8つめのinputに"8080"をセットしたいのですが
※ちなみに inputの他にcomboxやchkboxも使っています



この記事に返信する


ヂオン

リンク

2012/2/9(Thu) 01:15:19|NO.44775

いっそのこと FindWindowEx と WM_SETTEXT を使用してみてはいかがですか?


#include "user32.as" #define WM_SETTEXT $0000000C // notepadを起動して、起動しきるまで検索を続けます。 exec "notepad.exe" // 実行ファイル名を指定して メモ帳を開きます。 repeat FindWindowEx 0,0,"notepad",0 // class名を指定して メモ帳が見つかるまで検索を続けます。 hnotepad = stat if(hnotepad):break await 30 loop // 最後まで検索します tx =strf("この ノートパッド(0x%08x) に登録されている\n子 ウィンドウのリストです\n\n\n",hnotepad)// +hnotepad hbefore = 0 repeat // 子ウィンドウのハンドルを取得します。 FindWindowEx hnotepad,hbefore,0,0 // hbefore の次にあるウィンドウを検索し続けます。 hchild.cnt=stat // ウィンドウハンドルのリスト hbefore = stat // 以前のウィンドウハンドル if(hbefore){ sdim cn,0xff GetClassName hbefore , varptr(cn),0xff tx+=strf("index %d[ ウィンドウハンドル = 0x%08x : クラス名 =%s ]\n",cnt,hbefore,cn) }else{ break } loop sendmsg hchild,WM_SETTEXT,0,varptr(tx) // テキストを設定



荒河

リンク

2012/2/9(Thu) 21:24:15|NO.44781

objprmじゃだめなん?



荒河

リンク

2012/2/9(Thu) 21:25:12|NO.44782

>他人作成のプログラムの複数の入力エリア
すみません見落としてました



メルクン

リンク

2012/2/9(Thu) 22:58:40|NO.44784

FindWindowEx と WM_SETTEXT 調べたけど??力不足です。
他人作成のaaa.exeを実行して 複数の入力領域やチェックボックス等があるので
そのうちの数個の入力領域に たとえば”氏名”や”郵便番号”を自動で入力したいのですが
入力領域をつかめていないようなので??



Cookies

リンク

2012/2/9(Thu) 23:58:12|NO.44785

>FindWindowEx と WM_SETTEXT 調べたけど??力不足です。
>他人作成のaaa.exeを実行して 複数の入力領域やチェックボックス等があるので
入力領域やチェックボックスにはウィンドウハンドルなる管理用IDがあるわけで、
そいつをFindWindowExで検索して知ることができれば、sendmsgなんかで操作できます。

ヂオンさんのスクリプトを実行したとき
(たぶん)index0ででてくるやつはクラス名Edit、エディットボックスというやつで、
HSPのinput、mesboxなどもこれになります。(確か)
メルクンさんのいう入力領域もたぶんこれだと思います。
エディットボックスに文字を入力するには
sendmsg [ウィンドウハンドル],WM_SETTEXT,0,varptr([入力したい文字が入った変数名])
という感じでできるはず。

チェックボックスは、BM_SETCHECKを送って、wparamにBST_CHECKEDかBST_UNCHECKEDを送るらしい。
sendmsg [ウィンドウハンドル],BM_SETCHECK,BST_CHECKED,0

他人作成aaa.exeを

title "ターゲット" s="入力領域" mesbox s,ginfo_winx,ginfo_winy/2 chk=0 chkbox "チェック",chk
としておくと

#include "user32.as" #define WM_SETTEXT $0000000C #define BM_SETCHECK 0x00F1 #define BST_UNCHECKED 0 #define BST_CHECKED 0x0001 szWindow = "ターゲット" //ターゲットの親ウィンドウのタイトル FindWindowEx 0,0,0,szWindow //そのタイトルでウィンドウを検索してみる hparent=stat //ターゲットの親ウィンドウのウィンドウハンドル if(hparent==0):dialog "ターゲットが起動してません。":end hw=0 text="入力完了" //入力領域に入力する文字 repeat FindWindowEx hparent, hw, 0, 0 //ターゲットの親ウィンドウの子を順番に検索 hw=stat //ターゲットのウィンドウハンドル if hw=0 : break //0ならもうウィンドウはない sdim class, 64 GetClassName hw, varptr(class), 64 //ウィンドウの種類をクラス名で判別 if class="Edit" : sendmsg hw, WM_SETTEXT, 0, varptr(text) //input/mesbox系はクラス名「Edit」 if class="Button":sendmsg hw, BM_SETCHECK, BST_CHECKED, 0 //chkbox/button系はクラス名「Button」 loop mes "終了"
で操作ができます。

FindWindowExの第三引数はクラス名、第四引数はウィンドウタイトルなんですが、
用途によって使い分けなければならなかったりします。
そいつらを調べるにはWinSpyというソフトをお勧めします。
Captionがウィンドウタイトル、Classがクラス名です。



Cookies

リンク

2012/2/10(Fri) 00:06:57|NO.44786

あ、見直してみたらチェックボックスは存在するだけで操作しなくてよかったんですね。
失礼しました。
if class="Edit"の行だけをお使いください。



メルクン

リンク

2012/2/11(Sat) 09:09:00|NO.44796

丁寧に返事していただき、感謝です!

さっそく、テストしたらうまく入力領域に文字をセットできました。
ありがとうございました。

aaa.exeについては解決しました、
ついでにInternet Explorer(8) (OSはxp)でも同じようにできるかとテストしましたが
こちらは文字が入力できませんでした これはウィンドウの種類とかを変更しなくては
いけないということでしょうか?
よろしければ、教えてほしいのですが、よろしくお願いします。



Cookies

リンク

2012/2/12(Sun) 21:41:44|NO.44818

ああ、IEですよね。
IEとかは無理なんですよ。
IEでなくても、Chromeでも(たぶんFirefoxでも)だめなはず。
自分もよくわかりませんが、HTML解析して、
フォームを表示したりするエンジンはこの方法では扱えないようで。

一般的な方法としては、IEをCOM操作したり、
マウスクリックやキーボード入力イベントを起してやる、という感じになると思います。



メルクン

リンク

2012/2/14(Tue) 08:06:26|NO.44860

適切な返事ありがとうございます。
何がわかっていないかが、少しわかった感じがします。
IEの方ももう少し こちょこちょしてみます



ONION software Copyright 1997-2023(c) All rights reserved.