Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Parameter aus externer Anwendung auslesen (https://www.delphipraxis.net/87345-parameter-aus-externer-anwendung-auslesen.html)

Win32.API 27. Feb 2007 13:40


Parameter aus externer Anwendung auslesen
 
Gibt es eine Moeglichkeit die Parameter aus einer laufenden Anwendung auszulesen?

Es muss ja Moeglich sein, da paramstr() auf die besagten Daten zugreifen kann, nur wie komme _ich_ daran?

--win32

Win32.API 1. Mär 2007 14:34

Re: Parameter aus externer Anwendung auslesen
 
*push*

hat den keiner eine idee? :(

hsg 1. Mär 2007 14:38

Re: Parameter aus externer Anwendung auslesen
 
IMHO stehen die Parameter der Applikation auf dem Stack der Applikation.

Bei einer externen Applikation müsstest du also in deren Speicher eindringen und auf deren Stack zugreifen.

Da hoffe ich eigentlich, dass Windows das verbietet.

sirius 1. Mär 2007 14:47

Re: Parameter aus externer Anwendung auslesen
 
Zitat:

Zitat von hsg
Da hoffe ich eigentlich, dass Windows das verbietet.

Nö, wüsste nicht, das Windows das verbietet. Das Problem ist eher, dass du die lineare Adresse des Stacksegmentes finden musst. Und dann ist wirklich noch die Frage, ob die Parameter auch dort liegen. Wäre aber für mich auch erstmal das logischste.

Win32.API 1. Mär 2007 15:30

Re: Parameter aus externer Anwendung auslesen
 
ok, danke jetzt habe ich wenigstens schonmal einen ansatz.

marabu 1. Mär 2007 16:31

Re: Parameter aus externer Anwendung auslesen
 
Hi,

wenn du noch nicht fertig bist, dann kannst du dir hier vielleicht ein paar Anregungen holen: klick

Grüße vom marabu

KLS 1. Mär 2007 16:36

Re: Parameter aus externer Anwendung auslesen
 
Delphi-Quellcode:
function AufrufParameter(ProcessId : DWORD) : String;
var
  MBI : TMemoryBasicInformation;
  Buffer,PosCmdLine : Pointer;
  SystemInfo : TSystemInfo;
  Size : DWORD;
  CmdLine : WideString;
  LengthCmdLine : Word;
  ProcessHandle : THandle;
begin
  Result := '';
  FillChar(SystemInfo,SizeOf(TSystemInfo),0);
  GetSystemInfo(SystemInfo);
  GetMem(Buffer,SystemInfo.dwPageSize);
  Size := SizeOf(TMemoryBasicInformation);
  FillChar(MBI,Size,0);
  ProcessHandle := OpenProcess(PROCESS_VM_READ or PROCESS_QUERY_INFORMATION, False, ProcessId);
  if VirtualQueryEx(ProcessHandle,Pointer($20000),MBI,Size) = Size then if ReadProcessMemory(ProcessHandle,MBI.BaseAddress,Buffer,SystemInfo.dwPageSize,DWORD(nil^)) then
  begin
    LengthCmdLine := PWord(Longint(Buffer) + $42)^;
    if LengthCmdLine < 520 then
    begin
      SetLength(CmdLine,LengthCmdLine);
      PosCmdLine := Pointer(PLongint(Longint(Buffer) + $44)^);
      if ReadProcessMemory(ProcessHandle,PosCmdLine,PWideChar(CmdLine),LengthCmdLine,DWORD(nil^)) then Result := Copy(CmdLine,1,Pos(#0,CmdLine) - 1);
    end;
  end;
  CloseHandle(Processhandle);
  FreeMem(Buffer);
end;

Win32.API 1. Mär 2007 17:24

Re: Parameter aus externer Anwendung auslesen
 
danke euch beiden bin noch nicht fertig, werde aber erstmal versuchen es alleine zu loesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 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