run時のフォーカスNo.29395
papayaaan さん 11/01/20 01:21
 
マクロからrunで別のアプリケーションを起動したときに、ウィンドウのフォーカス
を秀丸エディタのままにしておくことは出来ますか?
マクロ内で秀丸エディタにフォーカスを移せばよさそうですが、方法が分かりません。

[ ]
RE:29395 run時のフォーカスNo.29396
Iranoan さん 11/01/20 01:58
 
 papayaaan さん今日は、一ユーザの Iranoan です。
> マクロからrunで別のアプリケーションを起動したときに、ウィンドウのフォーカス
> を秀丸エディタのままにしておくことは出来ますか?
 こっちは解らないので、
> マクロ内で秀丸エディタにフォーカスを移せばよさそうですが、方法が分かりませ
>ん。
こちらの例を末尾に記載します。

 P.S 今となっては、やりたい内容によっては、同期制御などが出来る runex
を使った方が良いかも。
//------------------------------------------------------------
#hw = hidemaruhandle( 0 );
run "explorer.exe";
setactivehidemaru #hw;

[ ]
RE:29396 run時のフォーカスNo.29397
秀丸担当 さん 11/01/20 10:07
 

> マクロからrunで別のアプリケーションを起動したときに、ウィンドウのフォーカス
> を秀丸エディタのままにしておくことは出来ますか?

Iranoanさんコメントありがとうございます。
setactivehidemaruでする方法の場合、もしかしたらタスクバー上で点滅するだ
けうまくいかないことがあるかもしれないです。
Windowsによって、一度入力を得たプロセスは外部からは簡単には切替られない
ようになっていて、場合によってはタスクバー上で点滅するだけになってしまう
かもしれません。

WindowsAPIのShellExecute相当の呼び出しで、表示フラグを指定することができ
れば、最初のウィンドウの表示状態を決めることができるかもしれません。

 参考:ShellExecuteのフラグの意味
 http://msdn.microsoft.com/ja-jp/library/cc422072.aspx

ただ、起動されたプロセスがその指示に対応している必要があって、必ずしもで
きるかどうかはわからないです。
例えば最小化してアクティブにしない場合、ShellExecuteのSW_SHOWMINNOACTIVE
(数値で7)を使います。
ShellExecute相当の呼び出しを行う方法は幾つかあります。

●vbsの場合
  set objShell = CreateObject("Shell.Application")
  objShell.ShellExecute "notepad.exe","","","",7
 
 秀丸からこれを呼び出す場合、
 
  openbyshell "C:\\Folder\\test.vbs";
 
 としてvbsを呼び出せます。

●マクロだけの場合(V8以降)
 vbs相当の呼び出しがマクロからもできます。
 
  #objShell = createobject("Shell.Application");
  callmethod #objShell, "ShellExecute", "notepad.exe", "", "", "", 7;
 
 …と、今試してみたら64bit版においては最後の数値が64bitで渡しているせい
でうまくできませんでした。64bit版は次のβ版で修正させていただきます。

●ショートカットを経由する場合
 任意のショートカットをどこかに作って、プロパティで「実行時の大きさ」を
「最小化」にするとSW_SHOWMINNOACTIVE相当になるようです。
 秀丸から呼び出す場合、
 openbyshell "C:\\Folder\\test.lnk";
 としてショートカットを呼び出せます。

これ相当のフラグはrunexでも今のところ指定できません。
一応runexの「表示フラグ」がそれに相当しますが、ウィンドウを表示するかど
うかだけしか指定できませんでした。
これらの数値も指定できるように検討させていただきます。


参考:ShellExecuteのフラグの数値
  SW_HIDE             0
  SW_SHOWNORMAL       1
  SW_SHOWMINIMIZED    2
  SW_SHOWMAXIMIZED    3
  SW_MAXIMIZE         3
  SW_SHOWNOACTIVATE   4
  SW_SHOW             5
  SW_MINIMIZE         6
  SW_SHOWMINNOACTIVE  7
  SW_SHOWNA           8
  SW_RESTORE          9
  SW_SHOWDEFAULT      10
  SW_FORCEMINIMIZE    11

[ ]