Hoe werkt de ReadProcessMemory functie

Status
Niet open voor verdere reacties.

Stinuz

Terugkerende gebruiker
Lid geworden
14 jun 2003
Berichten
1.245
Sjah, topicnaam zegt genoeg dacht ik? Nee? Ok :p

Voor de duidelijkheid, ik heb nog geen een lettertje code geschreven omdat ik deze functie niet weet, het zal (denk ik) geen groot script worden..

Ik wil in C++ een programma maken dat communiceert met World of Warcraft. Ik heb op http://www.wowdev.org een hele hoop Events etc. gevonden en wat ik graag wil, om te beginnen, is, heel simpel gesteld, dat als je klaar bent met een duel er automatisch ''/cheer'' wordt getypt. Op WoWdev vond ik de volgende Event.

DUEL_FINISHED
Fired when a duel is finished.

Dus als ik het goed begrijp moet ik C++ verbinden met WoW.exe en dan iets van ReadProcessMemory uitvoeren en vervolgens iets in de zin van (niet correct getypt):

IF DUEL FINISHED
HIT BUTTON "ENTER"
/cheer
HIT BUTTON "ENTER"

Ik weet dat dit bijzonder idioot klinkt voor mensen die deze functies wel kennen, maar ik wil het graag zo duidelijk mogelijk uitleggen :D

Ik zou niet weten hoe ik dit voor elkaar krijg, hoe simpel het ook is. Alle hulp is welkom :D
 
http://207.46.199.254/en-us/library/ms680553(VS.85).aspx
http://www.mpgh.net/forum/17-tutorials/17210-tut_create_hack_dll_vc_6_a.html

Dit is hoe ik het gebruikte voor Minesweeper:
Code:
#include <windows.h>
#include <iostream>

#define WIDTH_ADDRESS 0x01005334
#define HEIGHT_ADDRESS 0x01005338
#define ARRAY_ADDRESS 0x01005361

unsigned long GetTargetProcessIDFromProcName(char*);

using namespace std;

int main()
{
    char* szProcName;
    cout << "Please insert the text in the caption bar of your Minesweeper window.\n";
    cout << "For instance, in the dutch version of windows, Minesweeper is Mijnenveger.\n\n";
    cout << "Caption: ";
    cin >> szProcName;
    
    unsigned long pID = GetTargetProcessIDFromProcName(szProcName);
    if(pID == 0){ cout << "Could not get process ID.\n"; cin.get(); return 1; }
    
    HANDLE hProcess = OpenProcess(PROCESS_VM_READ, false, pID);
    if(hProcess == NULL){ cout << "Could not open process.\n"; cin.get(); return 1;}
    
    int iWidth, iHeight;
    char iArray[32*24];
    
    while(1)
    {
    ReadProcessMemory(hProcess, (const void*)WIDTH_ADDRESS, &iWidth, sizeof(int), NULL);
    ReadProcessMemory(hProcess, (const void*)HEIGHT_ADDRESS, &iHeight, sizeof(int), NULL);
    ReadProcessMemory(hProcess, (const void*)ARRAY_ADDRESS, &iArray, sizeof(iArray), NULL);
    cout << "Mine field:\n";
    for(int i = 0; i < iHeight; i++)
    { for(int j = 0; j < iWidth; j++)
      { cout << iArray[32*i+j] << " "; }
      cout << endl;
    }
    cout << "\nPress a key to refresh\n";
    
    cin.get();
    cout << "\n\n\n\n\n";
    }
    
    return 0;
}

unsigned long GetTargetProcessIDFromProcName(char* procName)
{
    unsigned long procID;
    
    HWND hWndTarget = FindWindow(procName, NULL);
    if(!hWndTarget)
    { cout << "Please make sure Minesweeper is opened.\n"; cin.get(); return 0; }
    
    GetWindowThreadProcessId(hWndTarget, &procID);
    
    return procID;
}

Ik hoop dat je hier wat verder mee komt ^^. Succes!
 
Met ReadProcessMemory kun je data ophalen. Jij bent waarschijnlijk op zoek naar WriteProcessMemory, waarmee je data kunt wijzigen.

Ik raad je aan om eens te kijken op cheatengine.org of verwante site's om wat informatie op te doen. Succes. :-)
 
http://207.46.199.254/en-us/library/ms680553(VS.85).aspx
http://www.mpgh.net/forum/17-tutorials/17210-tut_create_hack_dll_vc_6_a.html

Dit is hoe ik het gebruikte voor Minesweeper:

------------------------------

Ik hoop dat je hier wat verder mee komt ^^. Succes!

Bedankt, ik ga het vanavond of als ik eerder tijd heb eens bekijken :thumb:

Met ReadProcessMemory kun je data ophalen. Jij bent waarschijnlijk op zoek naar WriteProcessMemory, waarmee je data kunt wijzigen.

Ik raad je aan om eens te kijken op cheatengine.org of verwante site's om wat informatie op te doen. Succes. :-)

Waarschijnlijk moet ik toch ReadProcessMemory hebben want ik moet ''lezen'' wanneer het duel is afgelopen. En het ''overnemen'' van het toetsenbord heeft volgens mij niks met de memory te maken, maar dat weet ik niet zeker :)
 
Waarschijnlijk moet ik toch ReadProcessMemory hebben want ik moet ''lezen'' wanneer het duel is afgelopen. En het ''overnemen'' van het toetsenbord heeft volgens mij niks met de memory te maken, maar dat weet ik niet zeker :)

En hoe wil jij automatisch '/duel' typen ? Daarvoor zul je toch iets moeten wijzigen, lijkt me. (je hebt wel gelijk dat je eerst moet uitlezen)

In elk geval staan er op http://forum.cheatengine.org/index.php een aantal topics m.b.t. WoW.
 
En hoe wil jij automatisch '/duel' typen ? Daarvoor zul je toch iets moeten wijzigen, lijkt me. (je hebt wel gelijk dat je eerst moet uitlezen)

In elk geval staan er op http://forum.cheatengine.org/index.php een aantal topics m.b.t. WoW.

Keystrokes genereren kan gewoon met keyb_event()

Windows stuurt dan een keydown msg naar de window en triggerd een keyb event bij DirectInput mocht wow dat gebruiken. Volgens de documentatie gebruikt de toetsenbord driver ook keyb_event, kan dus niet "echter"
 
Bedankt voor alle replies jongens maar ik kom er echt niet uit :/

Is er iemand die het heel misschien voor me wil doen (wat ik in de eerste post beschreef) met commentaar erbij zodat ik dit kan analyseren en zelf uit kan breiden? Ik weet niet of dat veel gevraagd is want ik weet niet hoe groot het script zou worden, maar ik zou het erg op prijs stellen! Ben geen luilak ofzo, lijkt me alleen wel handig :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan