Avatar billede Slettet bruger
18. juli 2002 - 22:45 Der er 18 kommentarer og
1 løsning

Memory

Kan det ikke lade sig gøre at skrive mere end en byte til memory'en med Writeprocessmemory. Jeg vil gerne have nogle eksempler.
Avatar billede nico26 Nybegynder
18. juli 2002 - 23:20 #1
Jow

BOOL WriteProcessMemory(

    HANDLE hProcess,    // handle to process whose memory is written to 
    LPVOID lpBaseAddress,    // address to start writing to
    LPVOID lpBuffer,    // pointer to buffer to write data to
    DWORD nSize,    // number of bytes to write
    LPDWORD lpNumberOfBytesWritten     // actual number of bytes written
  );
Avatar billede nico26 Nybegynder
18. juli 2002 - 23:21 #2
du angiver bare hvor mange bytes det du vil sende fylder i nSize
Avatar billede Slettet bruger
18. juli 2002 - 23:50 #3
Min kode ser sådan ud:

procedure TForm1.Button1Click(Sender: TObject);
var
WindowName : integer;
ProcessId : integer;
//ThreadId : integer;
buf, buf1 : PChar;
HandleWindow : Integer;
write: cardinal;
b:Byte;
  const
WindowTitle = '3d pinball for windows - space cadet';
Address = $00A00C62;
PokeValue = $c7c7c7c7;
NumberOfBytes = 4;
begin
WindowName := FindWindow(nil,WindowTitle);
If WindowName = 0 then
begin
MessageDlg('Game not running! Please run it and try again!', mtwarning,[mbOK],0);
Exit;
end;
getWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
GetMem(buf,4);
buf^ := Chr(PokeValue);
WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write);
FreeMem(buf);
closehandle(HandleWindow);
end;

Har du nogen ide om hvad der er ivejen.

Jeg har koden fra: http://www.eksperten.dk/spm/200201
Avatar billede nico26 Nybegynder
19. juli 2002 - 00:12 #4
navnet er ikke stavet rigtigt, og er case-sensitive

WindowTitle := '3D Pinball til Windows - Space Cadet';
Avatar billede Slettet bruger
19. juli 2002 - 07:54 #5
Hvad betyder case-sensitive.
Avatar billede Slettet bruger
19. juli 2002 - 08:03 #6
Det virker altså stadig.
Avatar billede pellelil Nybegynder
19. juli 2002 - 08:47 #7
Sætningen "buf^=Chr(PoseValue);" er helt hen i skoven. Prøv i stedet med "Buf := @PokeValue" (skal muligvis type-cast'es).
Avatar billede Slettet bruger
19. juli 2002 - 09:00 #8
Der står Variable required er det fordi den skal type-cast'es
Avatar billede pellelil Nybegynder
19. juli 2002 - 09:22 #9
Ahhhh. Ser først nu at din PokeValue er en Const, og du kan naturligvis kune bruge "@" sammen med en variabel. Prøv i stedet flg:

<SNIP>
procedure TFormDiasTurnoverStatisticClientMain.Button1Click(
  Sender: TObject);
var
  WindowName : integer;
  ProcessId : integer;
  //ThreadId : integer;
  HandleWindow : Integer;
  write: cardinal;
  b:Byte;
  PokeVar: Integer;
const
  WindowTitle = '3d pinball for windows - space cadet';
  Address = $00A00C62;
  NumberOfBytes = 4;
  PokeValue = $c7c7c7c7;
begin
  WindowName := FindWindow(nil,WindowTitle);
  If WindowName = 0 then
  begin
    MessageDlg('Game not running! Please run it and try again!', mtwarning,[mbOK],0);
    Exit;
  end;
  getWindowThreadProcessId(WindowName,@ProcessId);
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
  PokeVar := PokeValue;
  WriteProcessMemory(HandleWindow,ptr(Address),@PokeVar,NumberOfBytes,write);
  closehandle(HandleWindow);
end;
</SNIP>
Avatar billede Slettet bruger
19. juli 2002 - 09:33 #10
Nu står der: Constant expression violates subrange bounds
Avatar billede pellelil Nybegynder
19. juli 2002 - 09:41 #11
Hvilken version af Delphi bruger du / Har du defineret PokeVar som en Integer ?
Avatar billede Slettet bruger
19. juli 2002 - 09:50 #12
Det er den kode du har skrevet og jeg bruger Delphi 6
Avatar billede pellelil Nybegynder
19. juli 2002 - 09:57 #13
Jeg hruger selv Delphi 6 og kan compile uden problemer ?
Avatar billede pellelil Nybegynder
19. juli 2002 - 09:59 #14
I hvilken linie får du fejl ?
Avatar billede Slettet bruger
19. juli 2002 - 10:02 #15
PokeVar := PokeValue;
Avatar billede Slettet bruger
19. juli 2002 - 10:08 #16
Tror du jeg skal prøve at geninstaller Delphi ?
Avatar billede pellelil Nybegynder
19. juli 2002 - 10:18 #17
Nej det kan jeg ikke forestille mig skulle være nødvendig at reinstallere Delphi. Prøv evt. at definere PokeVar som en LongInt og/eller undlad at bruge const'en (PokeVar := $C7C7C7C7;).
Avatar billede Slettet bruger
20. juli 2002 - 18:50 #18
Nu virker det, mange tak
Avatar billede pellelil Nybegynder
21. juli 2002 - 10:43 #19
Hvad var problemet ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester