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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0102
sasuke直前までアクティブだったウィンドウをアクティブにする方法6解決


sasuke

リンク

2010/1/2(Sat) 21:51:53|NO.29699

HSPでタイマーを作成しています。
特定の時間以降にする作業をユーザーに知らせるbgscrで作成した小さなウインドウを
常時ディスプレイの端で表示させる簡単なアプリケーションです。しかし、ひとつ不便
なことが生じ困っています。他のアプリケーションで作業中に突然お知らせウィンドウ
が開くのですが、そのウインドウが表示されている限り、そのウインドウがアクティブ
のウインドウになってしまいます。当然ですが・・・。でも、そのウインドウが開く直前
まで他のソフトで入力を行っていた場合、このお知らせウインドウが表示されたら、その
たび、それまで作業していたアプリケーションをアクティブにしなおす必要があります。
どうにか、お知らせウインドウを表示させた状態で、直前までアクティブだったウインドウ
をアクティブにさせたいのですが、苦戦しています。直前まで使用しているウインドウの
タイトルはそのときによって変わるのでaplsel等でタイトルを調べてウィンドウIDを取得
する方法が取れません。しかし、このタイマーを終了させると、必ず直前までアクティブ
だったウインドウにフォーカスが戻るので、どこかに直前までアクティブだったウインドウ
の情報(IDとか)が保存されていると思うのですが、それを知る方法がわかりません。
お助けください。



この記事に返信する


inovia

リンク

2010/1/2(Sat) 22:05:02|NO.29700

こういうことかな?


#include "user32.as" gsel 0,-1:width 320,240 exec "notepad" wait 500 ;適当に5秒待つ GetForegroundWindow hFwnd=stat gsel 0,2 SetForegroundWindow hFwnd gsel 0,1



sasuke

リンク

2010/1/2(Sat) 23:42:31|NO.29702

inovia様 早速のお返事ありがとうございました。
少し違っています。
冗長で解りにくい文章でした。申し訳ありません。簡単にしますと、
最前面のウインドウをアクティブにするのではなく、そのひとつ後ろで、かつ他の
アプリケーションのウィンドウ(ある時はワード、ある時はメモ帳 etc.)をHSPの
ウインドウを最前面で表示させたままの状態でアクティブにしたかったのです。



sasuke

リンク

2010/1/3(Sun) 01:40:27|NO.29703

user32.dllのGetNextWindow関数を使って下のウインドウのIDを得られることがわかりました。
実験で下のようなスクリプトを作ってみましたが4行目のパラメータが不正だということで
エラーが出てしまいます。
第1パラメータはbgcr 0で作成したウインドウのハンドル、第2パラメータは下のウインドウを
IDを求める2で良いと思うのですが・・・。根本的に間違っているのでしょうか?

#uselib "user32.DLL"
#cfunc GetNextWindow "GetNextWindow" int,int
bgscr 0,100,100,,100,100,100,100
id=GetNextWindow hwnd,2
mes str(id)
stop



inovia

リンク

2010/1/3(Sun) 07:48:15|NO.29704

こうですな。GetNextWindow の実体はGetWindowです。


#uselib "user32" #cfunc GetNextWindow "GetWindow" int,int bgscr 0,100,100,0 id=GetNextWindow(hwnd,2) dialog "ハンドル:"+id end



sasuke

リンク

2010/1/3(Sun) 08:35:31|NO.29705

inovia様ありがとうございます。
Windows APIの情報はインターネットで調べてもなかなか解りづらく、
初心者には難解です。一度引っかかると抜け出せません。
これで、胸のつかえが取れました。



sasuke

リンク

2010/1/3(Sun) 08:36:00|NO.29706

すみません。解決です!!



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