Wert aktualisiert sich mit while(1) nicht



  • Hallo zusammen. Ich hab mit meinem Kumpel hier einen kleines prob was wir nich lösen können.

    #include <windows.h>
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    struct D2StatStrc
    
    {
       DWORD dwStat;
       DWORD dwValue;
    };
    
    class cStatslist
    {
       private:
          size_t nEntries;
          D2StatStrc* pStats;
    
       public:
          cStatslist(size_t nStats, D2StatStrc* pArray) : nEntries(nStats), pStats(pArray)
          {
          };
    
          ~cStatslist()
          {
             nEntries = 0;
             delete [] pStats;
          }
    
          size_t Count()
          {
             return nEntries;
          }
    
          DWORD __fastcall GetStat(WORD wStat, WORD wLayer = 0);
    };
    
    DWORD __fastcall cStatslist::GetStat(WORD wStat, WORD wLayer)
    {
       DWORD dwStat = wStat << 16 | wLayer;
       for(size_t i = 0; i < nEntries; i++)
       {
          if(pStats[i].dwStat == dwStat)
             return pStats[i].dwValue;
       }
    
       return 0;
    }
    
    template <class tStruct> tStruct* __fastcall ReadMemoryStucture(HANDLE hProcess, void* pLocaton, size_t nCount)
    {
       tStruct* pData = new tStruct[nCount];
       memset(pData,0,sizeof(tStruct) * nCount);
       ReadProcessMemory(hProcess,pLocaton,pData,sizeof(tStruct) * nCount,NULL);
       return pData;
    }
    
    template <class tType> tType __fastcall ReadMemoryType(HANDLE hProcess, void* pLocaton)
    {
       tType pType = {0};
       ReadProcessMemory(hProcess,pLocaton,&pType,sizeof(tType),NULL);
       return pType;
    }
    
    int __fastcall GetStatType()
    {
       int nStats;
       cout << "X" << endl;
       cout << "1. X" << endl;
       cout << "2. X" << endl;
       cout << "3. X" << endl;
    
       cin >> nStats;
       if(cin.fail() || nStats > 3 || nStats < 1)
       {
          cerr << "X" << endl;
          return GetStatType();
       }
    
       return ((nStats == 1) ? 0x24 : ((nStats == 2) ? 0x48 : 0x50));
    }
    
    cStatslist* __fastcall ReadUnitStats(HANDLE hProcess, void* pUnit)
    {
       void* pStatlist = ReadMemoryType<void*>(hProcess,(BYTE*)pUnit + 0x5C);
       int nOffset = GetStatType();
       short nStats =  ReadMemoryType<short>(hProcess,(BYTE*)pStatlist + nOffset + 4);
       if(nStats > 0)
       {
          void* pStats = ReadMemoryType<void*>(hProcess,(BYTE*)pStatlist + nOffset);
          return new cStatslist(nStats,ReadMemoryStucture<D2StatStrc>(hProcess,pStats,nStats));
       }
    
       return NULL;
    }
    
    BOOL __fastcall GetProcessID(char* szWndName, unsigned long* pPID)
    {
       HWND hWnd = FindWindow(szWndName,NULL);
       if(hWnd != NULL)
          if(GetWindowThreadProcessId(hWnd,pPID))
             return TRUE;
    
       return FALSE;
    }
    
    HANDLE __fastcall GetD2Process()
    {
       DWORD dwPID;
       if(!GetProcessID("X",&dwPID))
       {
          cerr << "X" << endl;
          return NULL;
       }
    
        HANDLE hToken;
        LUID pLUID;
        TOKEN_PRIVILEGES pTokenPrivileges;
        if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
            return NULL;
    
        if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&pLUID))
        {
            pTokenPrivileges.PrivilegeCount = 1;
            pTokenPrivileges.Privileges[0].Luid = pLUID;
            pTokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
          AdjustTokenPrivileges(hToken,FALSE,&pTokenPrivileges,sizeof(pTokenPrivileges),NULL,NULL);
        }
    
        CloseHandle(hToken);   
       return OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_QUERY_INFORMATION,FALSE,dwPID);   
    }
    
    int main(int argc, char* argv[])
    {
       HANDLE hProcess = X();
       if(hProcess == NULL)
       {
          system("pause");
          return 0;      
       }
    
       cout << "X:" << endl;
       void* pPlayer = ReadMemoryType<void*>(hProcess,(void*)0x6FBCC3D0);
       if(pPlayer == NULL)
       {
          cerr << "X" << endl;
          system("pause");
          return 0;      
       }
    
       cStatslist* pStats = ReadUnitStats(hProcess,pPlayer);
       if(pStats != NULL)
       {
          cout << "X: " << pStats->Count() << endl;
          cout << "X: " << (pStats->GetStat(6) >> 8) << endl;
          cout << "X: " << (pStats->GetStat(8) >> 8) << endl;
          delete pStats;
       }
       else
          cout << "X" << endl;
    
        system("pause");
        return EXIT_SUCCESS;
    }
    

    Nun hatte ich zwischen Zeile 161 und 162 ein while(1) eingesetzt, in der Hoffnung das dieser Wert sich in der Endlosschleife aktualisiert. Leider rattert das Programm den aufgerufenen Wert der Zeile 162 nur runter ohne sich zu aktualisieren.
    Hat jemand eine Idee wie sich dieser Schritt durchführen lässt?

    Mit freundlichem Gruß.
    -Mr.Quarx



  • Mir ist nicht ganz klar, was du erreichen möchtest. Welcher Wert soll wodurch aktualisiert werden? Könntest du dein Problem vielleicht nochmals formulieren und dieses Mal nur den relevanten Code posten?


Anmelden zum Antworten