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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1204
やんちゃ他のアプリにsendmsgでクリック1未解決


やんちゃ

リンク

2011/12/4(Sun) 03:16:04|NO.43465

他のアプリケーションを自動操作するソフトを作っています
子ウィンドウのハンドルは取得できています

いろいろ調べたらsendmsgでクリック情報を子ウィンドウに対して送れるとわかりました
自分なりにやってみたのですがうまく送信されません
よろしくお願いします



この記事に返信する


ヂオン

リンク

2011/12/4(Sun) 09:43:01|NO.43468

ユーザー入力の模擬等でしたら、
sendmsg ではなく sendinput や mouse_event を使用する事をお勧めします。


#include "user32.as" #define global ctype MOUSE_EVENT_X(%1=0) ((%1)*0xFFFF/ginfo_dispx) #define global ctype MOUSE_EVENT_Y(%1=0) ((%1)*0xFFFF/ginfo_dispy) #define INPUT_MOUSE $00000000 #define MOUSEEVENTF_MOVE $00000001 #define MOUSEEVENTF_LEFTDOWN $00000002 #define MOUSEEVENTF_ABSOLUTE $00008000 #define MOUSEEVENTF_LEFTUP $00000004 #const global INPUT_STRUCTSIZE 28 #const global INPUT_ELETOAL INPUT_STRUCTSIZE/4 onexit *exit_ // 電卓を開く exec "calc.exe" // 電卓がアクティブに成るまで検索し続ける。 repeat GetForegroundWindow:hwnd_target=stat sdim cn,0xFF:GetClassName hwnd_target,varptr(cn),0xFF:cn=getpath(cn,16) sdim wt,0xFF:GetWindowText hwnd_target,varptr(wt),0xFF if(instr(cn,0,"calc")!=-1) or (instr(wt,0,"電卓")!=-1):break await 30 loop // インターフェイスの作成 txt_input =strf("ターゲット %d : タイトル %s : クラス %s",hwnd_target , wt , cn) objsize ginfo_winx,20 mesbox txt_input ,,,0 button gosub "111111111111111*5",*calc1 button gosub "123456+654321",*calc2 topy = ginfo_cy stop *initcalc mx = ginfo_mx:my = ginfo_my color 255,255,255:boxf:color:pos 0,topy SetWindowPos hwnd_target,-1,0,0,0,0,0x43 // 最前面表示 init_iptstruct:calcbttpush "CE" return *exitcalc app_iptstruct MOUSE_EVENT_X(mx) , MOUSE_EVENT_Y(my) , MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE sendinput stat , varptr(inpt) , INPUT_STRUCTSIZE SetWindowPos hwnd_target,-2,0,0,0,0,0x3 // 最前面表示を解除 return *calc1 gosub *initcalc repeat 15 calcbttpush "1" loop calcbttpush "*" calcbttpush "5" calcbttpush "=" gosub *exitcalc return *calc2 gosub *initcalc enum 1,7,1 calcbttpush "+" enum 6,0,-1 calcbttpush "=" gosub *exitcalc return #deffunc enum int a_ , int b_ , int add_ ,local i_ for i_,a_,b_,add_:calcbttpush ""+i_:next:return *exit_ gsel 0,-1 IsWindow hwnd_target if(stat!=0){ dim tbi,35:tbi=140 // タイトルバーインフォ構造体を初期化 gosub *initcalc sendmsg hwnd_target,0x033F,,varptr(tbi) // 電卓の終了ボタンの位置を取得 app_iptstruct_lpushup MOUSE_EVENT_X(tbi(31)+1),MOUSE_EVENT_Y(tbi(31+1)+1) gosub *exitcalc } end return #deffunc calcbttpush str wt_ , local rt_ findwindowex hwnd_target , 0 , "button" , wt_:hwnd_btt = stat if(hwnd_btt){ dim rc,4:GetWindowRect hwnd_btt , varptr(rc) app_iptstruct_lpushup MOUSE_EVENT_X(rc(0)+1) , MOUSE_EVENT_Y(rc(1)+1) } mes strf("入力予約 %s 有効 %d",wt_,hwnd_btt!=0) return idx/INPUT_ELETOAL #deffunc app_iptstruct_lpushup int px_ , int py_ app_iptstruct px_ , py_ , MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE app_iptstruct 0,0 , MOUSEEVENTF_LEFTDOWN:app_iptstruct 0,0 , MOUSEEVENTF_LEFTUP return stat #deffunc app_iptstruct int px_,int py_ , int flg_ inpt.idx = INPUT_MOUSE , px_ , py_ , 0 , flg_ , 0 , 0 idx+=INPUT_ELETOAL:return idx/INPUT_ELETOAL #deffunc init_iptstruct dim inpt:dim idx:return



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