秀丸が裏に隠れる?No.35515
tok さん 16/12/30 22:50
 
ある実行ファイル内から秀丸を呼び出した時に
その実行ファイルはフォーカスを失い、
秀丸にフォーカスが移ります。
ところが秀丸の画面が表に出ない(裏に隠れる)という現象です。

OS: Win10 Home
実行ファイル: MS Visual Basic 6.0(VB6) でコンパイルしたもの
使用状態:フォーム上でグラフィックを扱っています
秀丸呼び出し手法: VB6 の Shell コマンドで
Shell "C:\Program Files (x86)\Hidemaru\Hidemaru.exe" /j53 "Meisai.Dat"
という形で呼び出しています。
なお、exe でも インタープリターでも同じ現象です。
秀丸バージョン: 8.69β4 32bit
他のEditorでの例:そのeditorが表に出ます。

解決策はないものかと手探りの状態です。
何かヒントなどいただければ幸いです。

tok



 


[ ]
RE:35515 秀丸が裏に隠れる?No.35516
tok さん 16/12/31 11:56
 
>OS: Win10 Home
>実行ファイル: MS Visual Basic 6.0(VB6) でコンパイルしたもの
>使用状態:フォーム上でグラフィックを扱っています
>秀丸呼び出し手法: VB6 の Shell コマンドで
>Shell "C:\Program Files (x86)\Hidemaru\Hidemaru.exe" /j53 "Meisai.Dat"
>という形で呼び出しています。
>なお、exe でも インタープリターでも同じ現象です。
>秀丸バージョン: 8.69β4 32bit
>他のEditorでの例:そのeditorが表に出ます。

追加情報:
念のため他のPC、OSでの状況です。
やはり裏に隠れて出てきません。

OS: Windows Me v4.90
実行ファイル: MS Visual Basic 6.0(VB6) でコンパイルしたもの
使用状態:フォーム上でグラフィックを扱っています
秀丸呼び出し手法: VB6 の Shell コマンドで
Shell "C:\Program Files\Hidemaru\Hidemaru.exe" /j53 "Meisai.Dat"
という形で呼び出しています。
なお、exe でも インタープリターでも同じ現象です。
秀丸バージョン: hm812_signed.exe によりインストールしたもの
他のEditorでの例:そのeditorが表に出ます。

恥ずかしがり屋さんなのかもですね。
バッチメニュー(WinBatchEh システム)などから呼び出した時は
全然そんなことないんですが。。。

もしかしてVB6のグラフィック処理との相性があるかもしれませんので
単純に(グラフィックを使わない状態で)呼び出しさせてみます。

結果はまた報告させていただきます。

tok

[ ]
RE:35516 秀丸が裏に隠れる?No.35517
でるもんたいいじま さん 16/12/31 13:15
 
こんにちは。秀丸ユーザの「でるもんた・いいじま」です。

> >OS: Win10 Home

> 念のため他のPC、OSでの状況です。
> やはり裏に隠れて出てきません。
>
> OS: Windows Me v4.90
> 実行ファイル: MS Visual Basic 6.0(VB6) でコンパイルしたもの
> 使用状態:フォーム上でグラフィックを扱っています
> 秀丸呼び出し手法: VB6 の Shell コマンドで
> Shell "C:\Program Files\Hidemaru\Hidemaru.exe" /j53 "Meisai.Dat"
> という形で呼び出しています。
> なお、exe でも インタープリターでも同じ現象です。
> 秀丸バージョン: hm812_signed.exe によりインストールしたもの

VB6が手元にないので、Excel 2010で試しました。
Shell関数に第二引数を指定する必要があるようです。

Const HIDEMARU = "C:\Program Files\Hidemaru\Hidemaru.exe"
Sub StartHidemaru()
Dim result
result = Shell("""" & HIDEMARU & """ /j53 ""Meisai.Dat""", vbNormalFocus)
End Sub

「,vbNormalFocus」を省いて実行すると、タスクバーでは新規に起動した秀丸が
選択されているのですが、最小化状態のようで、Alt+Tabで前に出してやる
必要がありました。

こちら↓
http://www.openreference.org/articles/view/469
によると、第二引数を省略した場合のデフォルトはvbMinimizedFocusだそうで、
この動作で仕様通りだと思います。

> 他のEditorでの例:そのeditorが表に出ます。

とのことですが、そちらのエディタのほうが特殊な処理をしているのでしょうね。

手元の Windows XP + Excel 2010 で下記のコードを実行してみましたが、
Word、PowerPoint、IE、どれも最小化した状態で起動しました。

Sub run(exefile As String)
    Dim result
    MsgBox exefile, vbOKOnly, "Now Starting..."
    result = Shell("""" & exefile & """") ' vbNormalFocusをつけないで実行
End Sub

Sub main()
    run ("c:\Program Files\Microsoft Office\Office14\WINWORD.EXE")
    run ("c:\Program Files\Microsoft Office\Office14\POWERPNT.EXE")
    run ("c:\Program Files\Internet Explorer\iexplore.exe")
End Sub

で、将来設計ですが、秀丸がインストールされているパスはマシン一台一台で違うの
で、
もしユーザにエディタのフルパス(や、表示する行の指定方法)を指定させずに
日本語版の秀丸だけと決め打ちするのであれば、

Sub StartHidemaru()
    Dim result
    result = Shell(Environ("COMSPEC") & " /c start hidemaru /j53 ""Meisai.Da
t""", _
    vbMinimizedUnfocus)
End Sub
としたほうが可搬性がいいでしょう。

#startはWindows 95/98/Meでは外部コマンドですが、
#2000系ではcmd.exeの内部コマンドです。

[ ]
RE:35517 秀丸が裏に隠れる?No.35519
秀まるお2 さん 16/12/31 13:36
 
 テストした訳ではありませんが、もしかしたら秀丸エディタがタブモードだと
ダメって話かもしれません。

 あと、「動作環境・トラブル対策」の「その他のトラブル対策...」の中に

 □ 起動時に必ずアクティブ化する

 ってオプションがあります。それをONにすると直るかもしれません。

[ ]
RE:35517 秀丸が裏に隠れる?No.35520
でるもんたいいじま さん 16/12/31 13:40
 
でるもんた・いいじまです。追伸。

> 秀丸がインストールされているパスはマシン一台一台で違うので、
> もしユーザにエディタのフルパス(や、表示する行の指定方法)を指定させずに
> 日本語版の秀丸だけと決め打ちするのであれば、
>
> Sub StartHidemaru()
>    Dim result
>    result = Shell(Environ("COMSPEC") & _
>    " /c start hidemaru /j53 ""Meisai.Dat""", _
>    vbMinimizedUnfocus)
> End Sub
> としたほうが可搬性がいいでしょう。

これですが、せっかくVBSではなくVB6を使うのですから、
こちらのほうが素直かもしれません。

Declare Function ShellExecuteA Lib "shell32.dll" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long _
) As Long

Const HIDEMARU = "hidemaru.exe" 'パス不要。拡張子は書くのが無難。
Const SW_SHOWNORMAL = 1
Const hNULL = 0

Sub StartHidemaru()
    Dim result
    result = ShellExecuteA(hNULL, "open", HIDEMARU, _
        "/j53 ""Meisai.dat""", vbNullString, SW_SHOWNORMAL)
End Sub

[ ]
RE:35517 秀丸が裏に隠れる?No.35521
tok さん 16/12/31 13:41
 
>こんにちは。秀丸ユーザの「でるもんた・いいじま」です。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>#2000系ではcmd.exeの内部コマンドです。

「でるもんた・いいじま」さん、こんにちは。
ご教示いただいた
Shell の第2引数に vbNomalFocus を与えることで
解決できました。
>そちらのエディタのほうが特殊な処理をしているのでしょうね。
Shellでの呼び出しはこのEditorでしか行ってなかったので
それが標準なのかと思ってました。
こちらが特殊だったんですね。

今後のアドバイスもありがとうございます。
参考にさせていただきます。

ありがとうございました。

tok

[ ]
RE:35519 秀丸が裏に隠れる?No.35522
でるもんたいいじま さん 16/12/31 13:48
 
でるもんた・いいじまです。お休み中のところお疲れ様です。

> テストした訳ではありませんが、もしかしたら秀丸エディタが
> タブモードだとダメって話かもしれません。

結局、VBのShell関数に与える引数の問題だったようですね。

> あと、「動作環境・トラブル対策」の「その他のトラブル対策...」の中に
> □ 起動時に必ずアクティブ化する
> ってオプションがあります。それをONにすると直るかもしれません。

私のテストでは最初からこのオプションにチェックが入っていましたが、
それでも再現しました。第二引数省略のShell関数で起動された際、
秀丸は非アクティブなのではなく、「アクティブだけど最小化」の状態に
なっているようです。

[ ]