2016-08-31 9 views
0

解決するには次の問題があります(VS2012、C++) 特定のHTAアプリケーションが私のEXEから実行されているかどうかを調べる必要があります。そのためには、プロセスmshtaを見つけて、正しい引数を持っているかどうかを確認する必要があります(「mshta somehta.hta」として開始されているはずです)。私の最初の試みは、私が今行うことができるプロセス/モジュールを反復することでした。 mshtaとそのPIDが表示されています。しかし、私は情報を得る方法、それがどのように開始されたのかを見出しませんでした。それを行う方法はありますか?C++はプロセスを処理し、各プロセスのコマンドライン引数を調べます

ProcessExists(wchar_t* processName) 
{ 
    DWORD aProcesses[1024], cbNeeded, cProcesses; 
    unsigned int i; 

    if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) 
    { 
     return false; 
    } 


    // Calculate how many process identifiers were returned. 

    cProcesses = cbNeeded/sizeof(DWORD); 

    // Print the name and process identifier for each process. 

    for (i = 0; i < cProcesses; i++) 
    { 
     if(aProcesses[i] != 0) 
     { 
      PrintProcessNameAndID(aProcesses[i]); 
     } 
    } 

    return false; 

} 
void PrintProcessNameAndID(DWORD processID) 
{ 
    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); 

    // Get a handle to the process. 

    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | 
           PROCESS_VM_READ, 
           FALSE, processID); 

    // Get the process name. 

    if (NULL != hProcess) 
    { 
     HMODULE hMod; 
     DWORD cbNeeded; 

     if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), 
     &cbNeeded)) 
     { 
      GetModuleBaseName(hProcess, hMod, szProcessName, 
          sizeof(szProcessName)/sizeof(TCHAR)); 


     } 
    } 

    // Print the process name and identifier. 

    dprintf(TEXT("%s (PID: %u) %s %s\n"), szProcessName, processID); 

    // Release the handle to the process. 

    CloseHandle(hProcess); 
} 
+0

はhttp://stackoverflow.com/questions/6530565/getting-another-process-command-line-in-windowsを見ます – Hayt

答えて

関連する問題