1

vc ++でバックグラウンドアプリケーションに取り組んでいます

現在のアプリケーションのプロセス名を取得するにはどうすればよいですか? たとえば、Internet Explorer を使用する場合は「Iexplore」、タイルのあるウィンドウの場合は「Skype」、Windows エクスプローラーを使用する場合は「Explorer」です。

このリンクを参照しましたが、Null エラーが発生しています: http://www.codeproject.com/Articles/14843/Finding-module-name-from-the-window-handle

4

2 に答える 2

4

これは、次のコードを使用して実行できます。

bool GetActiveProcessName(TCHAR *buffer, DWORD cchLen)
{
    HWND fg = GetForegroundWindow();
    if (fg)
    {
        DWORD pid;
        GetWindowThreadProcessId(fg, &pid);
        HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
        if (hProcess)
        {
            BOOL ret = QueryFullProcessImageName(hProcess, 0, buffer, &cchLen);
            //here you can trim process name if necessary
            CloseHandle(hProcess);
            return (ret != FALSE);
        }
    }
    return false;
}

その後

TCHAR buffer[MAX_PATH];
if(GetActiveProcessName(buffer, MAX_PATH))
{
    _tprintf(_T("Active process: %s\n"), buffer);
}
else
{
    _tprintf(_T("Cannot obtain active process name.\n"));
}

QueryFullProcessImageName関数はWindowsVista以降でのみ使用可能ですが、以前のシステムではGetProcessImageFileNameを使用できます(これは似ていますが、psapi.dllとのリンクが必要で、通常のwin32パスの代わりにデバイスパスを返します)

于 2013-03-01T23:26:29.120 に答える