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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1204
ひらまる選択中のウィンドウ、オブジェクト情報を取得5解決


ひらまる

リンク

2010/12/4(Sat) 15:56:14|NO.36118

最後に選択したウィンドウに対して、任意の処理をするプログラムを作っているのですが、
 例:インターネットエクスプローラーの、検索窓を選択中に、
 HSPプログラム内の「HSPを検索」というボタンを押すと、
 インターネットエクスプローラーの、検索窓が選択され、
 「HSP」という文字列が送信され、エンターが押される。

以下2つ、
上はどれが選択中のウィンドウかわかりません。
下は、選択中のウィンドウにしかキー送信ができません。
選択中のウィンドウやオブジェクトの名前、ハンドルを取得するにはどうしたら良いのでしょうか。

すべてのウィンドウタイトル取得

#include "hspext.as" LOG = "" mesbox LOG, 640, 480 MB = stat repeat aplsel "",cnt if stat != 0 : break LOG += refstr + "\n" loop objprm MB, LOG
現在のウィンドウにキー送信

#uselib "user32.dll" #func keybd_event "keybd_event" int,int,int,int #cfunc MapVirtualKey "MapVirtualKeyA" int,int repeat KeyCode = 90 kb_vir = MapVirtualKey( KeyCode, 0 ) keybd_event KeyCode, kb_vir, 0, 0 wait 100 loop



この記事に返信する


ANTARES

リンク

2010/12/5(Sun) 12:04:53|NO.36124

 選択中のウィンドウはWin32APIのGetForegroundWindow()で取得できますが、
検索窓を捕まえるのが難しそうです。
 sample\comobj\web.hspを発展させるという手もあります。
こちらなら何とかなるという保証はできませんが。



ひらまる

リンク

2010/12/5(Sun) 12:48:42|NO.36127

GetForegroundWindowですか、ありがとうございます。

#uselib "user32" #cfunc GetForegroundWindow "GetForegroundWindow" mes hwnd mes GetForegroundWindow()
検索窓を捕まえるのが難しい場合、ウィンドウフォーカスを合わせれば、
自動的に最後に編集していたオブジェクトにフォーカスが合うのではないのでしょうか。
そのためには、API関数を呼び出すのが手っ取り早いと思い、探してみると、
SetForegroundWindowと、
SetActiveWindowという関数が見つかりました。
これを組み込んでみたところ、

#uselib "user32" #cfunc GetForegroundWindow "GetForegroundWindow" #func SetForegroundWindow "SetForegroundWindow" int #func SetActiveWindow "SetActiveWindow" int ThisWindow = hwnd BeforeWindow = ThisWindow repeat NowWindow = GetForegroundWindow() if NowWindow == ThisWindow && BeforeWindow != ThisWindow{ dialog "このウィンドウのハンドルは"+ThisWindow+"で、\n最後に選択したウィンドウのハンドルは"+BeforeWindow+"です。" dialog "最後に選択したウィンドウにフォーカスを戻します。" SetForegroundWindow BeforeWindow SetActiveWindow BeforeWindow //戻りません(泣) BeforeWindow = ThisWindow } else : BeforeWindow = NowWindow await 1 loop
フォーカスが合いません;
定義が悪いのでしょうか。呼び出しが悪いのでしょうか。
どなたか、お助けくださいTωT



ひらまる

リンク

2010/12/5(Sun) 23:17:54|NO.36139

え…あれ?ちゃんと動いてる…?
なぜだ…さっきはフォーカスが移動しなかったのに…
SetForegroundWindowが見事に動作している…
あ…ありがとうございました。



ANTARES

リンク

2010/12/6(Mon) 00:52:41|NO.36140

>SetActiveWindow BeforeWindow
これは削除した方がいいと思います。
通常、コントロールにフォーカスを設定するときに使う関数なので。



ひらまる

リンク

2010/12/6(Mon) 09:44:57|NO.36141

>ANTARESさん
ありがとうございます。
SetActiveWindow BeforeWindowがあってもなくても動いたので、
消そうかどうか迷っていたのですが、(MSDN見てもなんのこっちゃ)
ウィンドウにフォーカスを設定するときは、
SetForegroundWindowのみで良いのですね。
ご指摘ありがとうございました。



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