我是新手,要获取系统应用程序的名称,非常急,希望大家留下宝贵的意见.
TCHAR tszFilename[MAX_PATH];  
  DWORD dwProcessId;  
  HWND hWnd=(HWND)FindWindow(_T("Shell_TrayWnd"),NULL); 
  HMODULE hModule=(HMODULE)GetClassLong(hWnd,GCL_HMODULE); 
  GetWindowThreadProcessId(hWnd,&dwProcessId);   
  HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,   FALSE,   dwProcessId);     
  GetModuleFileNameEx(hProcess,hModule,tszFilename,MAX_PATH);   
  CloseHandle(hProcess);   错误:
 warning C4312: “类型转换”: 从“DWORD”转换到更大的“HMODULE”
 error LNK2019: 无法解析的外部符号 _GetModuleFileNameExW@16,
 fatal error LNK1120: 1 个无法解析的外部命令

解决方案 »

  1.   

    代码中加上预编译
    #pragma comment(lib, "psapi.lib")
    或者在project > settings > link > input中加入psapi.lib如果还找不到psapi.lib, 下载MS SDK最新版.
      

  2.   

    修改成这样:
    TCHAR tszFilename[MAX_PATH];
      DWORD dwProcessId;  
      HWND hWnd=(HWND)FindWindow(_T("Shell_TrayWnd"),NULL); 
      HMODULE hModule=(HMODULE)GetClassLong(hWnd,GCL_HMODULE); 
      GetWindowThreadProcessId(hWnd,&dwProcessId);   
      HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,   FALSE,   dwProcessId);      
      GetModuleFileNameEx(hProcess,hModule,tszFilename,sizeof(tszFilename)); 
      MessageBox(tszFilename);
      CloseHandle(hProcess);运行后MessageBox里显示的全是乱码
      

  3.   

    加入psapi.lib之后,运行输出全是乱码啊,请问代码编写错在那里
      

  4.   

    看 GetModuleFileNameEx 的返回值可能是函数失败了,
    可以自己单部调试
      

  5.   

    输出路径可能是Unicode字符串, 用WideCharToMultiBytes转换下.
      

  6.   

    已测试
    GetClassLong 失败
    OpenProcess也失败.
    所以是乱码
      

  7.   

    不会正确使用WideCharToMultiBytes,请指点