像资源管理器那样显示运行的程序

最近再做一个工具软件,可以向指定的程序通过快捷键发送一个字符串,需要显示当前正在运行的程序。

1.首先通过CreateToolhelp32Snapshot创建进程快照

2.然后在里面通过进程的ID调用QueryFullProcessImageName获取程序的完整路径,

这个参数需要进程的句柄,所以要开启调试权限,管理员权限,这个函数需要vista ,server2008以上的版本

3.通过函数SHGetFileInfo获取程序里面的icon,用于显示

4.通过GetFileVersionInfo获取可执行文件的描述,这里需要设置语言,比如中英文等。

在MFC里面使用listctrl显示

主要代码:

    // 获取进程icon

SHFILEINFO shFileInfo = { 0 };

DWORD_PTR dwRet = ::SHGetFileInfo(lpszPath, 0, &shFileInfo, sizeof(SHFILEINFO), SHGFI_ICON);

    // 获取文件描述

        dataSize = GetFileVersionInfoSizeW(filePath, 0);

    //获取可执行文件中的语言,例如有中文的、英文的、繁体的等

        VerQueryValueW(pData, _T("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslation, &cbTranslation)

    //获取系统当前显示的语言,然后在循环里面,对比语言,选择想要获取的文件描述

        LANGID languageId = GetUserDefaultUILanguage();

          for (size_t i = 0; i < cbTranslation / sizeof(struct LANGANDCODEPAGE); i++)
{
wsprintf(pSubBlock, L"\\StringFileInfo\\%04x%04x\\FileDescription",
lpTranslation[i].wLanguage, lpTranslation[i].wCodepage);
if (languageId == lpTranslation[i].wLanguage)
{
VerQueryValueW(pData, pSubBlock, &pCurrent, &cbSize);
break;

}

                }

例如:

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值