Changeset 798 in dev for branches/egtra/ab5.0/abdev/abdev


Ignore:
Timestamp:
Feb 5, 2011, 11:43:01 PM (13 years ago)
Author:
イグトランス (egtra)
Message:

PSAPIを使用している箇所について、Toolhelp32と選択するよう修正

Location:
branches/egtra/ab5.0/abdev/abdev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/egtra/ab5.0/abdev/abdev/Attach.cpp

    r763 r798  
    44
    55#include "common.h"
     6#include <abdev/ab_common/include/Path.h>
     7#include <abdev/ab_common/include/ProcessAndModule.h>
    68#include <psapi.h>
    79#include <tlhelp32.h>
     
    3739}
    3840
    39 void InsertProcess_ToListView(HWND hListView,char *lpszAppPath,int id,char *lpszPlatform,char *lpszTitle){
     41void InsertProcess_ToListView(HWND hListView,char const* lpszAppPath,int id,char const* lpszPlatform,char const * lpszTitle){
    4042    char szAppName[MAX_PATH],temp2[MAX_PATH];
    4143    _splitpath(lpszAppPath,NULL,NULL,szAppName,temp2);
     
    7577    ListView_SetItem(hListView,&item);
    7678
    77     item.pszText=lpszPlatform;
     79    item.pszText=const_cast<LPSTR>(lpszPlatform);
    7880    item.iSubItem++;
    7981    ListView_SetItem(hListView,&item);
    8082
    81     item.pszText=lpszTitle;
     83    item.pszText=const_cast<LPSTR>(lpszTitle);
    8284    item.iSubItem++;
    8385    ListView_SetItem(hListView,&item);
     
    159161BOOL CALLBACK FindWindowProc(HWND hwnd, LPARAM lParam)
    160162{
    161     HWND* pphWnd = (HWND*)lParam;
    162     *pphWnd = hwnd;
    163     return FALSE; /* 列挙を中断 */
     163    auto pProcessIdAndHWnd = reinterpret_cast<std::pair<DWORD, HWND>*>(lParam);
     164    DWORD processId = 0;
     165    ::GetWindowThreadProcessId(hwnd, &processId);
     166    if (processId == pProcessIdAndHWnd->first)
     167    {
     168        pProcessIdAndHWnd->second = hwnd;
     169        return FALSE;
     170    }
     171    else
     172    {
     173        return TRUE;
     174    }
    164175}
    165176void ListupProcesses(HWND hListView){
    166     char temporary[MAX_PATH];
    167 
    168177    ListView_DeleteAllItems(hListView);
    169178
    170     DWORD *pdwProcessId;
    171     pdwProcessId=(DWORD *)HeapAlloc(hHeap,0,8192*sizeof(DWORD));
    172 
    173179    //プロセスを列挙
    174     DWORD cbNeeded;
    175     EnumProcesses(pdwProcessId,8192*sizeof(DWORD),&cbNeeded);
    176 
    177     char szMyAppPath[MAX_PATH];
    178     GetModuleFileName(GetModuleHandle(0),szMyAppPath,MAX_PATH);
    179 
    180     int i;
    181     for(i=0;i<(int)(cbNeeded/sizeof(DWORD));i++){
    182 
    183         //プロセスIDを元にハンドルを取得
    184         HANDLE hProcess;
    185         hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,pdwProcessId[i]);
    186         if(!hProcess) continue;
    187 
     180    auto processIds = ActiveBasic::Common::GetProcesses();
     181
     182    char szMyAppPath[MAX_PATH] = {};
     183    GetModuleFileName(nullptr, szMyAppPath, MAX_PATH);
     184
     185    BOOST_FOREACH(DWORD processId, processIds)
     186    {
    188187        //そのプロセスにおける実行モジュールのインスタンスハンドルを取得
    189         HINSTANCE hModule;
    190         DWORD cbReturned;
    191         if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned ))
    192             continue;
    193 
    194         //実行ファイル名を取得
    195         GetModuleFileNameEx(hProcess,hModule,temporary,MAX_PATH);
    196 
     188        auto executablePath = ActiveBasic::Common::GetExecutableModulePath(processId);
    197189
    198190        //////////////////////////////
     
    200192        //////////////////////////////
    201193
    202         //スナップショットを取得
    203         HANDLE hSnapshot;
    204         hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    205 
    206         THREADENTRY32 te;
    207         memset(&te,0,sizeof(THREADENTRY32));
    208         te.dwSize=sizeof(THREADENTRY32);
    209         if(Thread32First(hSnapshot,&te)){
    210             do{
    211                 if(te.th32OwnerProcessID==pdwProcessId[i]){
    212                     break;
    213                 }
    214             }while(Thread32Next(hSnapshot,&te));
    215         }
    216 
    217         HWND hwnd;
    218         hwnd=0;
    219         EnumThreadWindows(te.th32ThreadID,FindWindowProc,(LPARAM)&hwnd);
    220 
    221         while(GetParent(hwnd)) hwnd=GetParent(hwnd);
    222 
    223         char szWndTitle[1024];
    224         szWndTitle[0]=0;
    225         if(hwnd) GetWindowText(hwnd,szWndTitle,1024);
    226 
    227         CloseHandle(hSnapshot);
    228 
    229 
    230 
    231         CloseHandle(hProcess);
    232 
    233         if(lstrcmpi(szMyAppPath,temporary)==0){
     194        std::pair<DWORD, HWND> processIdAndHWnd(processId, nullptr);
     195        EnumWindows(FindWindowProc, reinterpret_cast<LPARAM>(&processIdAndHWnd));
     196        HWND hwnd = processIdAndHWnd.second;
     197
     198        TCHAR szWndTitle[1024] = {};
     199        if(hwnd) GetWindowText(hwnd, szWndTitle, 1024);
     200
     201        if (ActiveBasic::Common::IsPathEqual(Jenga::Common::ToWString(szMyAppPath).c_str(), executablePath.wstring().c_str()))
     202        {
    234203            //自分自身(ProjectEditor.exe)は無視
    235204            continue;
     
    237206
    238207        //リストビューへ追加
    239         InsertProcess_ToListView(hListView,temporary,pdwProcessId[i],"Win32",szWndTitle);
    240     }
    241 
    242     HeapDefaultFree(pdwProcessId);
     208        InsertProcess_ToListView(hListView,executablePath.string().c_str(),processId,"Win32",szWndTitle);
     209    }
    243210}
    244211
  • branches/egtra/ab5.0/abdev/abdev/abdev.vcxproj

    r788 r798  
    5353    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    5454    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
     55    <Import Project="..\ab-common.props" />
    5556    <Import Project="..\ab-common-32.props" />
    56     <Import Project="..\ab-common.props" />
    5757  </ImportGroup>
    5858  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    5959    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    6060    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
     61    <Import Project="..\ab-common.props" />
    6162    <Import Project="..\ab-common-32.props" />
    62     <Import Project="..\ab-common.props" />
    6363  </ImportGroup>
    6464  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
     
    6666    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
    6767    <Import Project="..\ab-common.props" />
     68    <Import Project="..\ab-common-64.props" />
    6869  </ImportGroup>
    6970  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
     
    7172    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
    7273    <Import Project="..\ab-common.props" />
     74    <Import Project="..\ab-common-64.props" />
    7375  </ImportGroup>
    7476  <PropertyGroup Label="UserMacros" />
     
    7678    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
    7779    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\build\$(Configuration)\</OutDir>
    78     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)$(Configuration)-$(Platform)\</IntDir>
    7980    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
    8081    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)-$(Platform)\</OutDir>
    81     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)$(Configuration)-$(Platform)\</IntDir>
    8282    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
    8383    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\build\$(Configuration)\</OutDir>
    84     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)$(Configuration)-$(Platform)\</IntDir>
    8584    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
    8685    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)-$(Platform)\</OutDir>
    87     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)$(Configuration)-$(Platform)\</IntDir>
    8886    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
    8987  </PropertyGroup>
     
    10199      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
    102100      <Optimization>Disabled</Optimization>
    103       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;JPN;WINVER=0x040A;_WIN32_WINNT=0x0403;_WIN32_WINDOWS=0x0400;_WIN32_IE=0x0401;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     101      <PreprocessorDefinitions>_DEBUG;_WINDOWS;JPN;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    104102      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
    105103      <PrecompiledHeader>Use</PrecompiledHeader>
     
    114112    <Link>
    115113      <AdditionalDependencies>unicows.lib;comctl32.lib;imm32.lib;htmlhelp.lib;rpcrt4.lib;imagehlp.lib;tinyxmld_STL.lib;dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
    116       <AdditionalLibraryDirectories>..\..\jenga\lib\x86;..\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    117114      <DelayLoadDLLs>PSAPI.DLL;DWMAPI.DLL;%(DelayLoadDLLs)</DelayLoadDLLs>
    118       <GenerateDebugInformation>true</GenerateDebugInformation>
    119115      <SubSystem>Windows</SubSystem>
    120116      <TargetMachine>MachineX86</TargetMachine>
     
    141137      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
    142138      <Optimization>Disabled</Optimization>
    143       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;JPN;WINVER=0x0501;_WIN32_WINNT=0x0501;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     139      <PreprocessorDefinitions>_DEBUG;_WINDOWS;JPN;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    144140      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
    145141      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
     
    154150    <Link>
    155151      <AdditionalDependencies>comctl32.lib;imm32.lib;htmlhelp.lib;rpcrt4.lib;imagehlp.lib;tinyxmld_STL.lib;%(AdditionalDependencies)</AdditionalDependencies>
    156       <AdditionalLibraryDirectories>..\..\jenga\lib\x64;..\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    157       <GenerateDebugInformation>true</GenerateDebugInformation>
    158152      <SubSystem>Windows</SubSystem>
    159153      <TargetMachine>MachineX64</TargetMachine>
     
    180174      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
    181175      <Optimization>MinSpace</Optimization>
    182       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;JPN;WINVER=0x040A;_WIN32_WINNT=0x0403;_WIN32_WINDOWS=0x0400;_WIN32_IE=0x0401;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     176      <PreprocessorDefinitions>NDEBUG;_WINDOWS;JPN;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    183177      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
    184178      <PrecompiledHeader>Use</PrecompiledHeader>
     
    192186    <Link>
    193187      <AdditionalDependencies>unicows.lib;comctl32.lib;imm32.lib;htmlhelp.lib;rpcrt4.lib;imagehlp.lib;tinyxml_STL.lib;dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
    194       <AdditionalLibraryDirectories>..\..\jenga\lib\x86;..\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    195188      <DelayLoadDLLs>PSAPI.DLL;DWMAPI.DLL;%(DelayLoadDLLs)</DelayLoadDLLs>
    196       <GenerateDebugInformation>true</GenerateDebugInformation>
    197189      <GenerateMapFile>true</GenerateMapFile>
    198190      <SubSystem>Windows</SubSystem>
     
    222214      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
    223215      <Optimization>MinSpace</Optimization>
    224       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;JPN;WINVER=0x0501;_WIN32_WINNT=0x0501;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     216      <PreprocessorDefinitions>NDEBUG;_WINDOWS;JPN;TIXML_USE_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    225217      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
    226218      <PrecompiledHeader>Use</PrecompiledHeader>
     
    234226    <Link>
    235227      <AdditionalDependencies>comctl32.lib;imm32.lib;htmlhelp.lib;rpcrt4.lib;imagehlp.lib;tinyxml_STL.lib;%(AdditionalDependencies)</AdditionalDependencies>
    236       <AdditionalLibraryDirectories>..\..\jenga\lib\x64;..\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    237228      <DelayLoadDLLs>PSAPI.DLL;%(DelayLoadDLLs)</DelayLoadDLLs>
    238       <GenerateDebugInformation>true</GenerateDebugInformation>
    239229      <GenerateMapFile>true</GenerateMapFile>
    240230      <SubSystem>Windows</SubSystem>
Note: See TracChangeset for help on using the changeset viewer.