2017-09-08 20 views
1

mshta.exe内の.htaファイルで動作する第三者ソフトウェアと統合しています。私のアプリはC言語で書かれています実行中のHTAファイルを確認してください

.htaファイルがすでに実行されているかどうかを検出して、メッセージを送信する前に起動する必要があります。

他のサードパーティとの以前の統合では、プロセスリストのEXEを確認しましたが、他の.htaファイルを実行している可能性があるため、mshta.exeを探すことはできません。

私もProcess.GetProcesses()からprocess.MainWindowTitleをつかむしようとしたが、mshta.exeウィンドウはタイトルを示しているにもかかわらず、MainWindowTitleプロパティが空白になっています。

誰かがmshta.exeが特定のhtaファイルを実行していることを知る方法を知っていますか?

+0

は、各mshta.exeのコマンドラインを確認し、それが実行されているHTAのパスを含める必要があります。 – Teemu

+0

HTAのソースコードを投稿できますか? – Hackoo

+0

残念ながら、そのサードパーティのHTAファイルは共有できません – spectacularbob

答えて

1

Teemuのコメントのおかげで、.htaパスが実際にコマンドライン引数に含まれていることがわかりました。ただし、StartInfoにはArgumentsというプロパティがありますが、この情報はProcessの参照には含まれていません。あなたはそのようManagementObjectSearcherを使用する必要があります。

//Call this extension on the mshta.exe process to get the path of the .hta file 
public static string GetCommandLine(this Process process) { 
    var commandLine = new StringBuilder(process.MainModule.FileName); 

    commandLine.Append(" "); 
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id)) { 
     foreach (var commandLinePart in searcher.Get()) { 
      commandLine.Append(commandLinePart["CommandLine"]); 
      commandLine.Append(" "); 
     } 
    } 

    return commandLine.ToString(); 
} 
関連する問題