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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0731
pty環境依存?6解決


pty

リンク

2016/7/31(Sun) 10:53:44|NO.76454

ウィンドウを強制アクティブにするには、スレッドをアタッチするなどしなければいけないそうで、
かなり危険なことだと書いてありました。
http://dobon.net/vb/dotnet/process/appactivate.html
http://hspnext.com/hspkura/hspkura03.htm#contents17
しかし、私の環境では、SetForegroundWindowを呼び出すだけで強制アクティブができました。
これが環境依存でなければ、安全そうなのでこちらを使いたいのですが。
どちらの方法が正しいのでしょうか。

#uselib "user32.dll" #func SetForegroundWindow "SetForegroundWindow" sptr screen 0, 640, 480 exec "notepad" wait 200 SetForegroundWindow hwnd



この記事に返信する


KA

リンク

2016/7/31(Sun) 22:28:51|NO.76468

「強制アクティブ」と単なる「アクティブ」は異なります。

マウスでポチッと押せばアクティブになる程度なのか、アクティブ化
を禁止している物なのかです。



zakki

リンク

2016/7/31(Sun) 23:08:23|NO.76469

2000以前、2000〜Vista、7〜でそれぞれ挙動が違うらしいです
あとはそのときフォアグラウンドになってるプロセスが変更を禁止してるかどうかや
レジストリやグループポリシーの設定にも影響受けるようでタイトル通り環境依存ですね



pty

リンク

2016/8/1(Mon) 07:20:32|NO.76470

やはりそうですか。
AllowSetForegroundやらBringWindowTopやら、最前面に持ってこれそうな関数はいっぱい
あるのに、これらの関数は何のためにあるのやら。
たしかに、条件によってはSetForegroundで最前面にならないと書いてありますね。
http://dobon.net/vb/dotnet/process/appactivate.html#section4
https://msdn.microsoft.com/ja-jp/library/cc411039.aspx
少々危険とはいえ、入力機構にアタッチしてからSetForegroundを呼ぶのが環境に依存しない
一番確実な方法なのですね。
ありがとうございました。



pty

リンク

2016/8/1(Mon) 07:30:45|NO.76471

ちょっとまってください。
これも環境依存でしょうか。

screen 0, 640, 480 title "MyApp" exec "notepad" wait 200 newcom WSHShell, "WScript.Shell" mcall WSHShell, "AppActivate", "MyApp"
昔、XPのPCでVBScript走らせたとき、AppActiveは使えた記憶があるのですが。
もし、XPや2000の方がいたら、試していただけないでしょうか。(もういないか。。)



n

リンク

2016/8/1(Mon) 08:04:46|NO.76473

すみません、やっぱりなしです。
これを最前面ウィンドウ(gsel 0, 2)にすると、タスクバーが点滅するだけとなりました。
これだと、gsel 0, 1でウィンドウをアクティブにするのと変わらないですね。
お騒がせしました。



n

リンク

2016/8/1(Mon) 08:06:57|NO.76474

nとptyは同一人物です。
すみません



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