Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi spiel über hotkey starten?.... (https://www.delphipraxis.net/86648-spiel-ueber-hotkey-starten.html)

chris1983 16. Feb 2007 21:32


spiel über hotkey starten?....
 
hey zusam

ich hab da ein problem in delphi

ich arbeite grade an einem trainer ich will ihn über einen hotkey starten
" R " wenn ich den trn dann starten will kommt immer die fehler meldung
" Game EXE not found " obwohl ich die richtige exe angegeben habe
(game.exe)

code:..


Delphi-Quellcode:
procedure RunGame;
var
  sti:tstartupinfo;
  lpPi:tprocessinformation;
begin
 if not CreateProcess(nil,'game.exe',nil,nil,false,CREATE_NEW_CONSOLE or
        NORMAL_PRIORITY_CLASS,nil,nil,sti,lppi)
 then begin
        MessageBox(Win,'Game EXE not found','Error',mb_ok+mb_iconinformation);
 end

 else
 if CreateProcess(nil,'game.exe',nil,nil,false,CREATE_NEW_CONSOLE or
        NORMAL_PRIORITY_CLASS,nil,nil,sti,lppi)


 then begin
    FSOUND_Close;
 end;
end;

Stefan92 16. Feb 2007 21:51

Re: spiel über hotkey starten?....
 
Hallo,

ist die .exe denn auch im selben Verzeichnis?
Wenn nicht, musst du den ganzen Pfad angeben.

Gruß

Stefan

chris1983 16. Feb 2007 21:59

Re: spiel über hotkey starten?....
 
ja der trainer ist im selben verzeichnes
wie die exe verstehe einfach nicht wo der fehler ist.

Sunlight7 18. Feb 2007 06:20

Re: spiel über hotkey starten?....
 
Moin chris1983 und Willkommen in der DP!

Zwei Tage zu spät, aber ich habs erst jetzt gesehen :wink:

Zu Deinem Problem, Du hast nicht zufällig vergessen, die Variablen zu initialisieren :zwinker:

Delphi-Quellcode:
procedure RunGame;
   var sti:tstartupinfo;
       lpPi:tprocessinformation;
begin
   ZeroMemory(@sti, SizeOf(sti));
   ZeroMemory(@lpPi, SizeOf(lpPi));

   If not CreateProcess(nil,'game.exe',nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,sti,lppi) then begin
      MessageBox(Win,'Game EXE not found','Error' 'Error',mb_ok+mb_iconinformation);
   end else
      if CreateProcess(nil,'game.exe',nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,sti,lppi) then begin
         FSOUND_Close;
      end;
end;
Grüßle!

chris1983 18. Feb 2007 10:07

Re: spiel über hotkey starten?....
 
morgen Sunlight7

danke dir für die hilfe klapt jetzt wunderbar
nur hab ich jetzt ein zweites problem ich kann nicht in den speicher schreiben :/


hier mal der komplete source bis auf die NFO die hab ich raus genommen ^^

Delphi-Quellcode:
program GEngine;

{$define Win32App}

uses
  windows,messages,MiniFMOD,sysutils,
  win2k in 'Win2k.pas';

const

LOGO              = 113;        
ABOUT_DIALOG      = 103;        
ABOUT_CLOSE_BUTTON = 105;        
INFO_EDIT         =  14;        
info              =
..............

hier kommt die NFO rein also nicht wundern :)

......

var
Msg                : TMSG;
Win                : HWND;
Inst               : Integer;
MusicPlayer        : HMUSICMODULE;

const
WS_EX_LAYERED      = $80000;
LWA_COLORKEY       = 1;
LWA_ALPHA          = 2;

const
WindowName         = 'biohazard 4';
GAddress1           = $A0A274;
GAddress2           = $A0A27F;
GAddress3           = $63CDB2;
Gbuf1               : array[1..11] of byte = ($B9,$38,$1F,$00,$00,$09,$C1,$66,$89,$4F,$08);
Gbuf2               : array[1..5] of byte = ($E9,$34,$2B,$C3,$FF);
Gbuf3               : array[1..6] of byte = ($E9,$BD,$D4,$3C,$00,$90);

{$R res\trainer.res} 
procedure trans(Handle_:hWnd;Trans:byte);
begin
SetWindowLong(Handle_, GWL_EXSTYLE, GetWindowLong(Handle_, GWL_EXSTYLE) or WS_EX_LAYERED);
Win2k.SetLayeredWindowAttributes(Handle_, 0, Trans, LWA_ALPHA);
end;

procedure RunGame;
   var sti:tstartupinfo;
       lpPi:tprocessinformation;
begin
   ZeroMemory(@sti, SizeOf(sti));
   ZeroMemory(@lpPi, SizeOf(lpPi));

   If not CreateProcess(nil,'game.exe',nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,sti,lppi) then begin
      MessageBox(Win,'Game EXE not found','Error',mb_ok+mb_iconinformation);
   end else
      if CreateProcess(nil,'game.exe',nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,sti,lppi) then begin
         FSOUND_Close;
      end;
end;


function PatchMem(WindowName:pchar;BaseAddress:dword;buffer:pointer;LengthOfBuffer:dword):boolean;
var
   hwnd,id,ph:dword;
   written:cardinal;
   successful:longbool;
begin
  asm
  xchg eax,written
  mov eax,0
  end;
   hwnd:=findwindowexa(0,0,nil,WindowName);
   asm
   xchg edx,hwnd
   end;
      asm
      cmp hwnd,0
      end;
     
     getwindowthreadprocessid(hwnd,@id);
     ph:=openprocess(generic_read or generic_write,false,id);
     asm
     cmp ph,0
     end;
     begin
          patchmem:=false;
          exit;
     end;
     asm
        push written
        push LengthOfBuffer
        push buffer
        push BaseAddress
        push ph
        call WriteProcessMemory
        mov successful, eax
     end;
     patchmem:=successful;
     closehandle(0);
end;

procedure Quit;
begin
  EndDialog(win,0);
  FMUSIC_FreeSong(MusicPlayer);
  FSOUND_Close;
  halt;
end;

function AboutDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall;
var
  OldInfo : array[0..65534] of Char;
  hIcon, hFont, Color, I : Integer;
begin
  if uMsg = WM_INITDIALOG then
begin
  trans(hWin,245);
  GetDlgItemText(hWin, INFO_EDIT, PChar(@OldInfo), 65535);
  SetDlgItemText(hWin, INFO_EDIT, PChar(String(OldInfo) + info));
  hFont := CreateFont(10, 0, 0, 0, 400, 0, 0, 0,
                      DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
                      DEFAULT_QUALITY, DEFAULT_PITCH, 'Terminal');
  if hFont <> 0 then SendDlgItemMessage(hWin, INFO_EDIT, WM_SETFONT, hFont, 0);
  SendDlgItemMessage(hWin, 14, 1096, 0, $0);
end;
  if uMsg = WM_LBUTTONDOWN then
begin
  ReleaseCapture;
  SendMessage(hWin,WM_NCLBUTTONDOWN,HTCAPTION,0);
end;
  Result := 0;
 if (uMsg = WM_DESTROY) or (uMsg  = WM_CLOSE) or
    ((uMsg = WM_COMMAND) and (wParam = ABOUT_CLOSE_BUTTON))
    then EndDialog(hWin,0);
end;

function SettingsDlgProc(Window : hWnd; Msg,WParam,LParam : Integer): Integer; StdCall;
var
  OldInfo : array[0..65534] of Char;
begin
case Msg of
  wm_InitDialog : begin
  trans(window,205);

  FSOUND_File_SetCallbacks(@XMFile_OpenCallback, @XMFile_CloseCallback,
     @XMFile_ReadCallback, @XMFile_SeekCallback, @XMFile_TellCallback);
  FSOUND_Init(44100, 0);
  MusicPlayer := FMUSIC_LoadSong('XMMUSIC', nil);
  FMUSIC_PlaySong(MusicPlayer);
  end;
  WM_LBUTTONDOWN : begin
  ReleaseCapture;
  SendMessage(Window,WM_NCLBUTTONDOWN,HTCAPTION,0);
  end;
  wm_Close  : DestroyWindow(Win);
  wm_Destroy : PostQuitMessage(0);
end;
  Result := 0;
   case Msg of
     WM_COMMAND : begin
   end;
 end;
end;

Procedure RunSettings;
begin
  Win := CreateDialog(hInstance,PCHar(100),0,@SettingsDlgProc);
  Showwindow(Win,SW_SHOW);
  Updatewindow(Win);
 end;

begin
  RunSettings;
while GetMessage(Msg,0,0,0) do
begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
//end;
  if (GetAsyncKeyState(VK_END) <> 0) then quit;
  if (GetAsyncKeyState($52)   <> 0) then RunGame;
  if (GetAsyncKeyState($49)   <> 0) then DialogBoxParam(hInstance, PChar(ABOUT_DIALOG), Win,@AboutDlgProc, 0);
  if (GetAsyncKeyState(VK_F1) <> 0) then patchmem(WindowName,GAddress1,@Gbuf1,sizeof(Gbuf1));
                                          patchmem(WindowName,GAddress2,@Gbuf2,sizeof(Gbuf2));
                                          patchmem(WindowName,GAddress3,@Gbuf3,sizeof(Gbuf3));

end;
end.

Sunlight7 18. Feb 2007 20:01

Re: spiel über hotkey starten?....
 
Abend!

Neues Problem -> Neue Frage -> Neuer Thread :zwinker:

Sonst kommt ein Modi und macht hier dicht, weil pro Thread nur ein Thema erwünscht ist :wink:

Grüßle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz