<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Wert aktualisiert sich mit while(1) nicht]]></title><description><![CDATA[<p>Hallo zusammen. Ich hab mit meinem Kumpel hier einen kleines prob was wir nich lösen können.</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

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 &lt;&lt; 16 | wLayer;
   for(size_t i = 0; i &lt; nEntries; i++)
   {
      if(pStats[i].dwStat == dwStat)
         return pStats[i].dwValue;
   }

   return 0;
}

template &lt;class tStruct&gt; 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 &lt;class tType&gt; tType __fastcall ReadMemoryType(HANDLE hProcess, void* pLocaton)
{
   tType pType = {0};
   ReadProcessMemory(hProcess,pLocaton,&amp;pType,sizeof(tType),NULL);
   return pType;
}

int __fastcall GetStatType()
{
   int nStats;
   cout &lt;&lt; &quot;X&quot; &lt;&lt; endl;
   cout &lt;&lt; &quot;1. X&quot; &lt;&lt; endl;
   cout &lt;&lt; &quot;2. X&quot; &lt;&lt; endl;
   cout &lt;&lt; &quot;3. X&quot; &lt;&lt; endl;

   cin &gt;&gt; nStats;
   if(cin.fail() || nStats &gt; 3 || nStats &lt; 1)
   {
      cerr &lt;&lt; &quot;X&quot; &lt;&lt; endl;
      return GetStatType();
   }

   return ((nStats == 1) ? 0x24 : ((nStats == 2) ? 0x48 : 0x50));
}

cStatslist* __fastcall ReadUnitStats(HANDLE hProcess, void* pUnit)
{
   void* pStatlist = ReadMemoryType&lt;void*&gt;(hProcess,(BYTE*)pUnit + 0x5C);
   int nOffset = GetStatType();
   short nStats =  ReadMemoryType&lt;short&gt;(hProcess,(BYTE*)pStatlist + nOffset + 4);
   if(nStats &gt; 0)
   {
      void* pStats = ReadMemoryType&lt;void*&gt;(hProcess,(BYTE*)pStatlist + nOffset);
      return new cStatslist(nStats,ReadMemoryStucture&lt;D2StatStrc&gt;(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(&quot;X&quot;,&amp;dwPID))
   {
      cerr &lt;&lt; &quot;X&quot; &lt;&lt; endl;
      return NULL;
   }

    HANDLE hToken;
    LUID pLUID;
    TOKEN_PRIVILEGES pTokenPrivileges;
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&amp;hToken))
        return NULL;

    if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&amp;pLUID))
    {
        pTokenPrivileges.PrivilegeCount = 1;
        pTokenPrivileges.Privileges[0].Luid = pLUID;
        pTokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
      AdjustTokenPrivileges(hToken,FALSE,&amp;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(&quot;pause&quot;);
      return 0;      
   }

   cout &lt;&lt; &quot;X:&quot; &lt;&lt; endl;
   void* pPlayer = ReadMemoryType&lt;void*&gt;(hProcess,(void*)0x6FBCC3D0);
   if(pPlayer == NULL)
   {
      cerr &lt;&lt; &quot;X&quot; &lt;&lt; endl;
      system(&quot;pause&quot;);
      return 0;      
   }

   cStatslist* pStats = ReadUnitStats(hProcess,pPlayer);
   if(pStats != NULL)
   {
      cout &lt;&lt; &quot;X: &quot; &lt;&lt; pStats-&gt;Count() &lt;&lt; endl;
      cout &lt;&lt; &quot;X: &quot; &lt;&lt; (pStats-&gt;GetStat(6) &gt;&gt; 8) &lt;&lt; endl;
      cout &lt;&lt; &quot;X: &quot; &lt;&lt; (pStats-&gt;GetStat(8) &gt;&gt; 8) &lt;&lt; endl;
      delete pStats;
   }
   else
      cout &lt;&lt; &quot;X&quot; &lt;&lt; endl;

    system(&quot;pause&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>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.<br />
Hat jemand eine Idee wie sich dieser Schritt durchführen lässt?</p>
<p>Mit freundlichem Gruß.<br />
-Mr.Quarx</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253342/wert-aktualisiert-sich-mit-while-1-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 22:23:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253342.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Nov 2009 00:20:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wert aktualisiert sich mit while(1) nicht on Sun, 01 Nov 2009 00:20:18 GMT]]></title><description><![CDATA[<p>Hallo zusammen. Ich hab mit meinem Kumpel hier einen kleines prob was wir nich lösen können.</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

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 &lt;&lt; 16 | wLayer;
   for(size_t i = 0; i &lt; nEntries; i++)
   {
      if(pStats[i].dwStat == dwStat)
         return pStats[i].dwValue;
   }

   return 0;
}

template &lt;class tStruct&gt; 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 &lt;class tType&gt; tType __fastcall ReadMemoryType(HANDLE hProcess, void* pLocaton)
{
   tType pType = {0};
   ReadProcessMemory(hProcess,pLocaton,&amp;pType,sizeof(tType),NULL);
   return pType;
}

int __fastcall GetStatType()
{
   int nStats;
   cout &lt;&lt; &quot;X&quot; &lt;&lt; endl;
   cout &lt;&lt; &quot;1. X&quot; &lt;&lt; endl;
   cout &lt;&lt; &quot;2. X&quot; &lt;&lt; endl;
   cout &lt;&lt; &quot;3. X&quot; &lt;&lt; endl;

   cin &gt;&gt; nStats;
   if(cin.fail() || nStats &gt; 3 || nStats &lt; 1)
   {
      cerr &lt;&lt; &quot;X&quot; &lt;&lt; endl;
      return GetStatType();
   }

   return ((nStats == 1) ? 0x24 : ((nStats == 2) ? 0x48 : 0x50));
}

cStatslist* __fastcall ReadUnitStats(HANDLE hProcess, void* pUnit)
{
   void* pStatlist = ReadMemoryType&lt;void*&gt;(hProcess,(BYTE*)pUnit + 0x5C);
   int nOffset = GetStatType();
   short nStats =  ReadMemoryType&lt;short&gt;(hProcess,(BYTE*)pStatlist + nOffset + 4);
   if(nStats &gt; 0)
   {
      void* pStats = ReadMemoryType&lt;void*&gt;(hProcess,(BYTE*)pStatlist + nOffset);
      return new cStatslist(nStats,ReadMemoryStucture&lt;D2StatStrc&gt;(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(&quot;X&quot;,&amp;dwPID))
   {
      cerr &lt;&lt; &quot;X&quot; &lt;&lt; endl;
      return NULL;
   }

    HANDLE hToken;
    LUID pLUID;
    TOKEN_PRIVILEGES pTokenPrivileges;
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&amp;hToken))
        return NULL;

    if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&amp;pLUID))
    {
        pTokenPrivileges.PrivilegeCount = 1;
        pTokenPrivileges.Privileges[0].Luid = pLUID;
        pTokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
      AdjustTokenPrivileges(hToken,FALSE,&amp;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(&quot;pause&quot;);
      return 0;      
   }

   cout &lt;&lt; &quot;X:&quot; &lt;&lt; endl;
   void* pPlayer = ReadMemoryType&lt;void*&gt;(hProcess,(void*)0x6FBCC3D0);
   if(pPlayer == NULL)
   {
      cerr &lt;&lt; &quot;X&quot; &lt;&lt; endl;
      system(&quot;pause&quot;);
      return 0;      
   }

   cStatslist* pStats = ReadUnitStats(hProcess,pPlayer);
   if(pStats != NULL)
   {
      cout &lt;&lt; &quot;X: &quot; &lt;&lt; pStats-&gt;Count() &lt;&lt; endl;
      cout &lt;&lt; &quot;X: &quot; &lt;&lt; (pStats-&gt;GetStat(6) &gt;&gt; 8) &lt;&lt; endl;
      cout &lt;&lt; &quot;X: &quot; &lt;&lt; (pStats-&gt;GetStat(8) &gt;&gt; 8) &lt;&lt; endl;
      delete pStats;
   }
   else
      cout &lt;&lt; &quot;X&quot; &lt;&lt; endl;

    system(&quot;pause&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>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.<br />
Hat jemand eine Idee wie sich dieser Schritt durchführen lässt?</p>
<p>Mit freundlichem Gruß.<br />
-Mr.Quarx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801473</guid><dc:creator><![CDATA[Mr.Quarx]]></dc:creator><pubDate>Sun, 01 Nov 2009 00:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wert aktualisiert sich mit while(1) nicht on Sun, 01 Nov 2009 00:26:59 GMT]]></title><description><![CDATA[<p>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?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801477</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 01 Nov 2009 00:26:59 GMT</pubDate></item></channel></rss>