omdf00
@omdf00 (うめさん)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

AHKでRun, C:\…を実行してもウィンドウが表示されない(そもそも起動してない?)

Q&A

Closed

解決したいこと

はじめに言っておくと、AHKスクリプトの問題じゃない可能性が高いみたいです

  1. AutoHotkeyで、Program Files(x86)に格納されている殆どの32bitソフトに対して、Run, C:~…を実行してもウィンドウが表示されない状態になっているので、これを解決したいです。

  2. 不具合が起きているのは、起動コマンド(Run, C:)の行になります。条件分岐及びプログラムをアクティベートするコードは、現時点でも完璧に動作しています。

  3. ただ、起動コマンド実行後でも、タスクバーに表示されているアプリのアイコンに、緑のラインが表示されていないままなので、そもそもプログラムが起動しているかどうか(起動コマンドが実行されているのか)も怪しいです

具体的な症状

以下の症状は、Program Files(x86)に格納されている32bitソフトで発生しています。他のディレクトリに格納されているソフトでは同様の症状は一切起きていません。

  1. バックグラウンドでソフトが起動している状態だと、ウィンドウを最前面に出す挙動およびウィンドウリサイズは指定通りに実行されます

  2. しかし起動していない状態でAHKでRunコマンドを実行しても、ソフトが起動しません

  3. スタートメニューからの起動、およびエクスプローラーからの実行などは問題なくできます。原因はよくわからないがAutohotkeyからの起動のみができないということです

補足

  1. 私と同じ動作環境(Windows 10 Pro(21H2)、AutoHotKey 1.1.33.6)の他の方のPCだと正常に実行されるとのことです。

  2. 現時点では全ての32bitのソフトが起動できないわけではなく、一部は起動できます。
    ※スタートメニューからの起動、およびエクスプローラーからの実行などは問題なくできます。原因はよくわからないがAutohotkeyからの起動のみができないということです

  3. 問題に気づいたのは、先日 Win10(20h2) から Win10(21h2) へ更新および、Visual Studio Codeを最新版(April 2022 _version 1.67)に更新したあとくらいの時期です

動作環境

Windows 10 Pro(21H2)
AutoHotKey 1.1.33.6

問題を改善するために試したこと

下記(1~2)の他には、MicrosoftEdgeの修復、画面外のウィンドウ移動を実行しましたが、問題は解決しておりません。

  1. AHKのスクリプトに以下のコード(起動しなかった場合にメッセージボックスが表示される)を追加
    +#d::
    Process, Exist, msedge.exe
    if ErrorLevel<>0
    WinActivate, ahk_pid %ErrorLevel%
    else
    Try {
    Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
    }
    Catch e {
    MsgBox, 16,, % "Exception thrown!nnwhat: " e.what "nfile: " e.file . "nline: " e.line "nmessage: " e.message "nextra: " e.extra
    }
    Return

  2. コマンドプロンプト上でtasklist | find "msedge"を実行
    (1)AHKからEdge起動
    (2)スタートメニューからEdge起動
    (3)「ファイル名を指定して実行」からEdge起動
    (4)コマンドプロンプトからEdge起動

いずれの条件でも
→メッセージボックスは表示されない
→task名は表示される
ため、指定したProgram Files(x86)に格納されている殆どの32bitソフトは起動している(らしい)

・AHKからEdge起動
C:\Users\桒島>tasklist | find "msedge"
msedge.exe 16352 Console 1 110,272 K
msedge.exe 10156 Console 1 11,380 K
msedge.exe 20960 Console 1 42,372 K
msedge.exe 20976 Console 1 41,244 K
msedge.exe 21028 Console 1 22,760 K
C:\Users\桒島>

・スタートメニューからEdge起動
C:\Users\桒島>tasklist | find "msedge"
msedge.exe 15616 Console 1 172,576 K
msedge.exe 19652 Console 1 11,348 K
msedge.exe 18512 Console 1 76,124 K
msedge.exe 7264 Console 1 43,924 K
msedge.exe 2812 Console 1 23,512 K
msedge.exe 7000 Console 1 54,620 K
msedge.exe 7748 Console 1 101,968 K
msedge.exe 15508 Console 1 64,888 K
msedge.exe 6684 Console 1 34,808 K
msedge.exe 4980 Console 1 114,032 K
C:\Users\桒島>

・「ファイル名を指定して実行」からEdge起動
C:\Users\桒島>tasklist | find "msedge"
msedge.exe 15616 Console 1 179,516 K
msedge.exe 19652 Console 1 11,356 K
msedge.exe 18512 Console 1 92,136 K
msedge.exe 7264 Console 1 45,060 K
msedge.exe 2812 Console 1 24,160 K
msedge.exe 7000 Console 1 55,148 K
msedge.exe 7748 Console 1 102,620 K
msedge.exe 15508 Console 1 65,608 K
msedge.exe 4980 Console 1 135,620 K
msedge.exe 19020 Console 1 30,960 K
msedge.exe 3080 Console 1 34,744 K
C:\Users\桒島>

・コマンドプロンプトからEdge起動
※start msedge.exeと入力しました

C:\Users\桒島>tasklist | find "msedge"
msedge.exe 10952 Console 1 155,196 K
msedge.exe 10276 Console 1 11,388 K
msedge.exe 8972 Console 1 77,752 K
msedge.exe 17092 Console 1 41,948 K
msedge.exe 14004 Console 1 23,112 K
msedge.exe 8880 Console 1 21,880 K
msedge.exe 11464 Console 1 34,900 K
msedge.exe 3652 Console 1 54,348 K
msedge.exe 9528 Console 1 102,244 K
msedge.exe 7504 Console 1 64,800 K
C:\Users\桒島>

指定した32bitソフトに対して起動コマンドが実行されなくなった?コード

+#d::
    Process, Exist, msedge.exe
        if ErrorLevel<>0
        WinActivate, ahk_pid %ErrorLevel%
    else
        Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
        WinWait  ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe
        WinMove, ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe,,276,7,1428,1135
Return

現時点でも指定した32bitソフトに対して起動コマンドが実行されるソースコード

;Lazy Nezumi Pro(LazyNezumiPro.exe)
#q::
    Process, Exist, LazyNezumiPro.exe
        if ErrorLevel<>0
        WinActivate, ahk_pid %ErrorLevel%
    else
        Run, C:\Program Files (x86)\Lazy Nezumi Pro\LazyNezumiPro.exe
Return
;AGDRec64.exe
+#m::
    Process, Exist, AGDRec64.exe
        if ErrorLevel<>0
        WinActivate, ahk_pid %ErrorLevel%
    else
        Run, C:\Program Files (x86)\AGDRec_132F\AGDRec64.exe
Return
0

7Answer

返信ありがとうございます!
「起動はしてるらしいが何故かウインドウが表示されない」のが問題
→はい、その認識で合っています
(2)(3)(4)いずれも ウィンドウは表示されない状況なんです…

1Like

提供いただいたスクリプトを分割してみました。

  • 「プロセスが起動した状態から」shift+win+e連打で何が起きるか
  • 「プロセスが起動していない状態から」shift+win+f連打で何が起きるか

これらを試せば、(If Elseどちらを通っているかわかるので)原因が絞り込めるのでは。

(繰り返しですが、スタートメニューからEdgeを起動して画面が出ないってことなので、その時点でMicrosoft案件だとは思っています)

;If側
+#e::
    Process,Exist,msedge.exe ;起動しているかどうかを調べる
    If ErrorLevel<>0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される)
        WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする
    Else
        ;何もしない
Return

;Else側 - If文も排除
+#f::
    Sleep , 100
    Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe D:/PSD_Published/000_稼働作品
    WinWait ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe
    WinMove, ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe,,276,7,1428,1135
Return
1Like

Comments

  1. @omdf00

    Questioner

    遅れてすみません、重ね重ねありがとうございます!
    はっきり書いていなくてすみません、AHKでのRunコマンドによる起動ができないだけでスタートメニュー及びエクスプローラーからの起動はできる状態なんです

    ご提案頂いたコードを試したところ、

    1.MicrosoftEdgeがバックグラウンドで起動している状態でIf側のコードを実行
    →ウィンドウが最前面に出てくる、その後に、Else側で指定したディレクトリのタブが増える
    2.MicrosoftEdgeがバックグラウンドで起動していない状態でIf側のコードを実行
    →何も起きない
    3.MicrosoftEdgeが起動していない状態でElse側のコードを実行
    →MicrosoftEdgeが起動し、指定したディレクトリのタブが開かれる。
    4.MicrosoftEdgeがバックグラウンドで起動している状態でElse側のコードを実行
    →MicrosoftEdgeが起動し、指定したディレクトリのタブが増える。


    まとめますと、分割前の記述を削除した上でコピペ、リロードしたのにも拘わらず、MicrosoftEdgeを起動or最前面化の度に指定したディレクトリのタブが増えてしまう状態ですね…

    起動ではなく、最前面化の度にElse側のコードも実行されている?理由が分からないですね
    念のため、VisualStudioCodeでコードのディレクトリをエクスプローラー上で表示させて、スタートアップのショートカットが置き換わっていないかも確認しましたが、特に問題ありませんでした
  2. 単純に、「Process,Exist,msedge.exe ;起動しているかどうかを調べる」この結果が期待通りでないだけはないかと。認識あっていますか?
    であれば、(極論ですが)毎回Edgeプロセスを殺してからスクリプトを起動してやれば、所望の動作になりますかね。

    また、「Sleep , 100」を入れても入れなくても、短期間で連打とかしない限りは動作は変わらない気がしますが、いかがでしょう。
    (議論が発散しまくっているので、可能な限り絞ったほうがよいかなと思い、確認しています)
  3. @omdf00

    Questioner

    長らく返信を忘れていました、すみません!!
    imagou様のおかげで無事に解決しました。


    1: ご指摘頂いた、
    「Process,Exist,msedge.exe ;起動しているかどうかを調べる」、「Sleep , 100」と、
    「Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe」の後の、「D:/PSD_Published/000_稼働作品」とを削除してリロード
    →タブも増えず、起動&アクティベートが実行されるが、ホットキーを入力するたびに新しいウィンドウが増える


    2: そこで「Process,Exist,msedge.exe ;起動しているかどうかを調べる」をifの上の行に記述
    ※「D:/PSD_Published/000_稼働作品」は削除したまま
    →以前と同じように動作しました。(起動及びバックグラウンドで起動している状態からのアクティベート、ウィンドウリサイズが実行されかつ、タブが増えない)


    影響の有無は確認していませんが、昨晩windowsが更新されていたようです。今回の不具合が発生したのも更新の直後だったので念のためここに書いておきます。

    imagou様、お忙しいところ私の相談に根気よくお付き合い頂いてありがとうございました!大変助かりました。無事に動作するようになった記述は下記になります



    +#d::
    Process,Exist,msedge.exe ;起動しているかどうかを調べる
    if ErrorLevel<>0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される)
    WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする
    else
    Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
    WinWait ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe
    WinMove, ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe,,276,7,1428,1135
    Return

  4. 正直なところ何が何だかわかりませんが、解決したならよかったです。

同じ環境で試しましたが、以下のスクリプトで動作しています(一番上のコピペです)。
実は起動したけど、ウインドウが隠れてるとかないですか?

+#d::
    Process, Exist, msedge.exe
        if ErrorLevel<>0
        WinActivate, ahk_pid %ErrorLevel%
    else
        Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
        WinWait  ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe
        WinMove, ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe,,276,7,1428,113

あと、タイトルにある「突然」がヒントになるかもしれません。

0Like

Comments

  1. @omdf00

    Questioner

    お忙しいところ回答して頂きありがとうございます!
    念のため再度試しましたが、やはり起動はできませんでした…(隠れウィンドウもないですね)

    すみません書き忘れていたのですが、完全に動作しないのは、else以後の条件分岐の記述になります。
    既にバックグラウンドで起動中のプログラムをアクティベートする記述は、全ての記述において現時点でも問題なく動作しています

    ^+!5::から始まる記述だとProgramFilesフォルダ内にあるプログラムは起動されるのですが、ProgramFiles(x86)フォルダ内のプログラムの起動が実行されない、という状況ですね


    ご指摘して頂いた、編集前のタイトル(突然~起動できなくなった)にあった「突然」で心当たりがあるのは、Win10(20h2)からWin10(21h2)更新後したことでしょうか。
    もしWin10(20h2)へ戻す以外に、問題の切り分けをする方法がありましたら教えて頂きたいです…!

ちょっと頑張ってみました。
以下をコピペして試してみてください。起動失敗したらメッセージボックスが表示されるはずです。

+#d::
    Process, Exist, msedge.exe
        if ErrorLevel<>0
        WinActivate, ahk_pid %ErrorLevel%
    else
        Try {
            Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
        }
        Catch e {
            MsgBox, 16,, % "Exception thrown!`n`nwhat: " e.what "`nfile: " e.file
                . "`nline: " e.line "`nmessage: " e.message "`nextra: " e.extra
        }
Return
0Like

Comments

  1. @omdf00

    Questioner

    試させて頂きました、ありがとうございます!!
    elseより前の記述は問題なく実行されていますが、メッセージボックスは表示されないですね…Alt+Tabで確認しても見つけられない状態でした

    もしかすると、システム環境など、記述ではない何か根本的な設定の影響みたいなのがあるかもしれませんね…引き続き自分の方でも調べてみます

    以下のは普段使っているメッセージボックスの記述ですが、こちらはいつもどおり実行されていました

    ^F12::
    Sleep,50
    Send,^{F12}
    Sleep,50
    MsgBox Entered Ctrl+F12
    Return


    何度もすみません!
  2. メッセージボックスが表示されないということは、Edgeのプロセスが正常に立ち上がっているということかと。

    メッセージボックスが表示されないことを確認した後、コマンドプロンプトで tasklist | find "msedge" を投入してみていただけますか?
  3. @omdf00

    Questioner

    おはようございます、返信が大変遅くなり申し訳ありません!
    試させて頂いたところ、以下のようになりました


    C:\Users\桒島> tasklist | find "msedge"
    msedge.exe 7588 Console 1 104,468 K
    msedge.exe 9416 Console 1 10,580 K
    msedge.exe 14344 Console 1 41,656 K
    msedge.exe 14356 Console 1 41,732 K
    msedge.exe 14396 Console 1 21,924 K

    C:\Users\桒島>


  4. 上記状態から続けて、Shift+Win+D押下するとどうなります?
  5. @omdf00

    Questioner

    返信ありがとうございます!今までと変わらずに、起動はできないがアクティベートはされて、ダイアログボックスも表示されないままですね…
  6. WinActivate, ahk_pid %ErrorLevel%

    ここを通っているということですか?通るとどうなりますか?ウインドウがアクティブになる?
  7. @omdf00

    Questioner

    msedge.exeバックグラウンドで起動している状態
    →Shift+Win+Dを押すと、ウィンドウは最前面に出てきますね

    msedge.exeバックグラウンドで起動していない状態
    →Shift+Win+Dを押すと、何も起きずメッセージボックスも表示されない

    もしかたらソースコードの他の部分が干渉しているのかと思い、現時点で使用しているソースコード全文を掲載しました。
    お手間をかけさせ申し訳ないですが確認して頂ければ幸いです…!
  8. こういった場合、条件を絞った方がいいです。いったん私の提示した +#d:: でもってデバッグしたほうがよいかと。

    でもって、
    「msedge.exeバックグラウンドで起動していない状態
     →Shift+Win+Dを押すと、何も起きずメッセージボックスも表示されない」
    ですが、でもプロセスとしては起動している(tasklist | find "msedge" の結果から)でよいですね?

    としますと、「起動はしてるらしいが何故かウインドウが表示されない」のが問題、となりますが、意識はあっていますか?

    ====

    上記があっているとして、切り分けには、msedge.exeが起動していない状態で、
    ・スタートメニューからEdge起動
    ・「ファイル名を指定して実行」からEdge起動
    ・コマンドプロンプトからEdge起動
    あたりをやってみるとよいかと。
  9. @omdf00

    Questioner

    重ね重ねありがとうございます!
    (1)AHKからEdge起動
    (2)スタートメニューからEdge起動
    (3)「ファイル名を指定して実行」からEdge起動
    (4)コマンドプロンプトからEdge起動

    デバッグはまだですが(1)~(4)を試したところ、いくつかの違いがあること確認したのですが、これはどんな情報なのでしょうか?
    「pid 見方」などと検索したのですが、いまいちこの出力結果が具体的にどんなこと指し示しているのか、ということが分からなかったので再度質問させて頂きました



    以下が結果になります

    ・AHKからEdge起動
    C:\Users\桒島>tasklist | find "msedge"
    msedge.exe 16352 Console 1 110,272 K
    msedge.exe 10156 Console 1 11,380 K
    msedge.exe 20960 Console 1 42,372 K
    msedge.exe 20976 Console 1 41,244 K
    msedge.exe 21028 Console 1 22,760 K
    C:\Users\桒島>




    ・スタートメニューからEdge起動
    C:\Users\桒島>tasklist | find "msedge"
    msedge.exe 15616 Console 1 172,576 K
    msedge.exe 19652 Console 1 11,348 K
    msedge.exe 18512 Console 1 76,124 K
    msedge.exe 7264 Console 1 43,924 K
    msedge.exe 2812 Console 1 23,512 K
    msedge.exe 7000 Console 1 54,620 K
    msedge.exe 7748 Console 1 101,968 K
    msedge.exe 15508 Console 1 64,888 K
    msedge.exe 6684 Console 1 34,808 K
    msedge.exe 4980 Console 1 114,032 K
    C:\Users\桒島>




    ・「ファイル名を指定して実行」からEdge起動
    C:\Users\桒島>tasklist | find "msedge"
    msedge.exe 15616 Console 1 179,516 K
    msedge.exe 19652 Console 1 11,356 K
    msedge.exe 18512 Console 1 92,136 K
    msedge.exe 7264 Console 1 45,060 K
    msedge.exe 2812 Console 1 24,160 K
    msedge.exe 7000 Console 1 55,148 K
    msedge.exe 7748 Console 1 102,620 K
    msedge.exe 15508 Console 1 65,608 K
    msedge.exe 4980 Console 1 135,620 K
    msedge.exe 19020 Console 1 30,960 K
    msedge.exe 3080 Console 1 34,744 K
    C:\Users\桒島>


    ・コマンドプロンプトからEdge起動
    ※start msedge.exeと入力しました

    C:\Users\桒島>tasklist | find "msedge"
    msedge.exe 10952 Console 1 155,196 K
    msedge.exe 10276 Console 1 11,388 K
    msedge.exe 8972 Console 1 77,752 K
    msedge.exe 17092 Console 1 41,948 K
    msedge.exe 14004 Console 1 23,112 K
    msedge.exe 8880 Console 1 21,880 K
    msedge.exe 11464 Console 1 34,900 K
    msedge.exe 3652 Console 1 54,348 K
    msedge.exe 9528 Console 1 102,244 K
    msedge.exe 7504 Console 1 64,800 K
    C:\Users\桒島>




  10. 繰り返しですが、「起動はしてるらしいが何故かウインドウが表示されない」のが問題、と思っているのですが、意識はあっていますか?

    上記がYESの場合、(2)(3)(4)それぞれで、ウインドウは表示されるのですか?

「起動はしてるらしいが何故かウインドウが表示されない」のが問題
→はい、その認識で合っています
(2)(3)(4)いずれも ウィンドウは表示されない状況なんです…

じゃあAHKの問題じゃなく、「何か知らんけどEdgeのウインドウが表示されない」ということですね。
私がやるとしたら、、、以下ですかねえ。まあ、後は頑張ってください。

ウインドウ 画面外 戻す

Edge 修復

0Like

Comments

  1. @omdf00

    Questioner

    そうですね、頑張るしかなさそうですね
    何度も対応して頂きありがとうございます。助かりました!

This answer has been deleted for violation of our Terms of Service.

edgeプロセスが起動していない状態で、以下スクリプトを実行するとどうなりますか?
(元のスクリプトに追記しただけです)

5秒待ったのちにウインドウがアクティブになると思うんですが。

+#d::
    Process, Exist, msedge.exe
    if ErrorLevel<>0
        WinActivate, ahk_pid %ErrorLevel%
    else
        Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
        WinWait  ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe
        WinMove, ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe,,276,7,1428,1135
        ; 待ってみる
        Sleep, 5000
        ; プロセスは存在しているはずなので、アクティブになるはず?
        Process, Exist, msedge.exe
        if ErrorLevel<>0
            WinActivate, ahk_pid %ErrorLevel%
Return

#本質的にはEdgeのみ、AHKには関係ないので、Microsoft案件かと思いますね

0Like

Comments

  1. @omdf00

    Questioner

    回答ありがとうございますっ!!
    回答していただいたコードではアクティブになることはなかったのですが、

    代わりに、Runの前にSleepを追加したら起動するようになりました
    しかし、今度はelseが動作しなくなり、多重起動するようになりました…
  2. ありがとうございます。Sleepを追加したコードを追記していただけますか。

    また、「elseが動作しなくなり、多重起動するようになりました…」の詳細説明をお願いします。ちょっと意味がわかりかねるので。
  3. @omdf00

    Questioner

    遅れてすみません、以下がSleepを追加したコードになります
    今まではバックグラウンドで起動している状態でshift+win+Dを入力するとMicrosoftEdgeのウィンドウが最前面に出てきていたのですが、下記のコードでshift+win+Dを入力すると、そのたびにウィンドウが一つずつ増えてしまうんです

    ;Micro Soft Edge(msedge.exe)
    +#d::
    Process,Exist,msedge.exe ;起動しているかどうかを調べる
    If ErrorLevel<>0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される)
    WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする
    Else
    Sleep , 100
    Run, C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe D:/PSD_Published/000_稼働作品
    WinWait ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe
    WinMove, ahk_class Chrome_WidgetWin_1 ahk_exe msedge.exe,,276,7,1428,1135
    Return
  4. ウインドウが1つずつ増える要因は、Else側を通ってしまっているんでしょうねえ。たぶん。

    逆のアプローチ(解析でなく解決優先)で、スタートアップ ブーストを切るとどうなりますか?

    https://atonechance.com/edge-process-running/
  5. @omdf00

    Questioner

    返信ありがとうございます!やはりそうですよね…

    スタートアップブーストをオフにして再起動してみましたが、特に変化はなく、ウィンドウが一つずつ増えている状況ですね

Your answer might help someone💌