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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1006
名無し他プロセスウィンドウ内のオブジェクトIDの取得について8解決


名無し

リンク

2010/10/6(Wed) 19:19:37|NO.35252

ソフトAとソフトBがあり、Aにあるメッセージボックスに文字列を送信したいのですが、
BからAのウィンドウハンドルを取得して、AのメッセージボックスのIDを取得し、文字列送信
といったことは可能ですか?
可能であれば方法を教えてください



この記事に返信する


u

リンク

2010/10/6(Wed) 21:33:50|NO.35254

・一時ファイルにハンドルを保存しておく
・共有メモリを使用する

などがあります。



まつたけ

リンク

2010/10/6(Wed) 21:50:18|NO.35255

目的によって、多少方法が変わると思います。
下のスクリプトは、
クリックしたウインドウやオブジェクトのハンドルを
WindowFromPoint で 捕獲して
sendmsg で WM_SETTEXT を送りつける方法です。


#include "user32.as" screen 0 , 350,200 : gsel 0 , 2 text = "SetWindowText 関数により テキストをセット" objsize ginfo_winx , 20 : pos 0,ginfo_winy-20 button gosub "送る",*label_SetText hButton = objinfo_hwnd(stat) *Main px = ginfo_mx : py = ginfo_my WindowFromPoint px , py : hMouseInWindow = stat title strf("%d,%d hWnd [0x%x]", px , py , hMouseInWindow) getkey key , 1 if key ! 0 and hButton ! hMouseInWindow and hwnd ! hMouseInWindow { chWnd = hMouseInWindow color 255,255,255 : boxf : color : pos 0,0 mes strf("+選択されているウインドウ+\nhwnd\t0x%x\npos\t%d,%d" , chWnd,px,py) } wait 10 goto*Main *label_SetText Sendmsg chWnd , 0xC /*WM_SETTEXT*/ ,0 , varptr(text) return



名無し

リンク

2010/10/6(Wed) 22:11:56|NO.35256

ありがとうございます
早速試してみます



名無し

リンク

2010/10/6(Wed) 22:35:33|NO.35257

出来ればクリック指定ではなくダイレクトに直接指定して、「〇〇のinputboxを書き換え」というふうにしたいのですが。。
よろしくお願いします。



名無し

リンク

2010/10/7(Thu) 05:35:14|NO.35259

せっかくサンプルを書いていただいたのですが、一度考えなおしてみました。

#uselib "USER32.DLL" #define WM_SETTEXT 0x000C #func FindWindowEx "FindWindowExA" sptr, sptr, sptr, sptr #define TEST "テスト" //メッセージ送信先のプログラム(タイトル)名 msg = "aaaa" FindWindowEx 0, 0, 0, TEST FindWindowEx stat, 0, "edit", 0 winhnd = stat sendmsg winhnd, WM_SETTEXT, 0, varptr(msg)

しかしこれですと目的の「三番目のインプットボックスに文字列挿入」ではなく、
editのどれかに挿入となっているので
inputboxを指定して挿入させるにはどうすれば良いでしょうか。。



SYAM

リンク

2010/10/7(Thu) 10:17:48|NO.35260

FindWindowEx の使い方を Google検索してみたらどうでしょう。

そして、

3つめの子を見つけたいなら、
1つめの子を見つけて、
1つめの子の次の子(=2つめの子)を見つけて、
2つめの次の子を見つければ、いいのです。



SYAM

リンク

2010/10/7(Thu) 10:23:26|NO.35262

追記。

> editのどれかに
…とありますが、
親ウインドウの中で、子ウインドウは作られた順に管理されてます。
親ウインドウが一度だけ子供たちを作ってそのままにしているなら、「どれか」は毎回同じなはずです。

逆に「どれか」が毎回変わってしまっているようだと面倒な話になってきます。3番目なんて単純には行きません。
たとえば
親ウインドウの中での子ウインドウの座標などの条件で目的のウインドウであるか判断、違ってれば次のウインドウを探す
…なんてことになるでしょう。



名無し

リンク

2010/10/7(Thu) 22:30:36|NO.35263


#define TEST "プログラム名" #define WM_GETTEXT $0000000D #include "user32.as" sdim caption, 1024 sdim buf, 1024 FindWindowEx 0, 0, 0, TEST win = stat winhnd = 0 repeat FindWindowEx win, winhnd, "edit", 0 winhnd = stat wait 1 SendMessage stat, WM_GETTEXT, 1024, varptr(caption) buf += "NAME:"+caption+"/HND:"+winhnd+"\n" if winhnd == 0 {break} loop mes "--LOOP END--" p1hnd = stat SendMessage stat, WM_GETTEXT, 1024, varptr(caption) mesbox buf, 300, 400, 5
いろいろ調べてこんなのを作りました
これで目的のeditを一覧表示できるようになったのでなんとかなりそうです
本当にありがとうございました。



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