|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Не работает функция возврата командной строки чужого процесса |
|
Delphi - Не работает функция возврата командной строки чужого процесса
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать Подскажите пожалуйста, как наладить функцию возврата CmdLine запущенного чужого процесса. Использую код:
procedure TForm1.Button1Click(Sender: TObject); var pID:Cardinal; op,hKernel32:Cardinal; GCL,DW,StrAddr,i,L,j:Cardinal; Str:String; begin try pID:=StrToInt(Edit1.Text); //из edit берется идентификатор стороннего процесса except pID:=GetCurrentProcessID(); //типо если ошибка - берем идентификатор текущего процесса end; op:=OpenProcess(PROCESS_VM_READ,false,pID); if op<>0 then begin hKernel32:=LoadLibrary('Kernel32.dll'); if hKernel32<>0 then begin GCL:=Cardinal(GetProcAddress(hKernel32,'GetCommandLineA')); FreeLibrary(hKernel32); if GCL<>0 then if ReadProcessMemory(op,Pointer(GCL+1),@DW,4,i)and(i=4)and ReadProcessMemory(op,Pointer(DW),@StrAddr,4,i)and(i=4) then begin L:=0; repeat j:=L; L:=L+Max_Path; SetLength(Str,L); if ReadProcessMemory(op,Pointer(StrAddr+j),Pointer(PChar(Str)+j),Max_Path,i) then begin for i:=j+1 to i do if Str[i]=#0 then DW:=0; end else DW:=0; until (DW=0); Caption:=trim(Str); //В caption заносим ответ end; end; CloseHandle(op); end; end; |
|
Отправлено: 15:08, 26-07-2015 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Лучше, если делать с обработкой ошибок. Убедится, что функции возвращают результат...
var Res : Integer; .... Res:= ReadProcessMemory('hProcess', 'lpBaseAddress', 'lpBuffer, nSize', '*lpNumberOfBytesRead'); if Res <> 0 then RaiseLastOSError else begin // end;... 1. Попробовать явно сделать приведение типов 2. или последний параметр изменить - SizeOf(i) |
------- Последний раз редактировалось opel431, 27-07-2015 в 00:17. Отправлено: 16:47, 26-07-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Попробовал на delphi 2009 и ошибка пропала, но в заголовке вместо параметра командной строки выводит иероглифы. Пробовал добавить AnsiString - теперь вместо иероглифов вопросы (добавил тут Caption:=AnsiString (trim(Str))
|
Отправлено: 17:39, 26-07-2015 | #3 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Часто в сети встречается вот такой код:
function GetProcessCmdLine(PID:DWORD):string; {©Drkb v.3(2007): www.drkb.ru} var h:THandle; pbi:TProcessBacicInformation; ret:NTSTATUS; r:Cardinal; ws:WideString; begin result:=''; if pid=0 then exit; h:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, pid); if h=0 then exit; try ret:=NtQueryInformationProcess(h,ProcessBasicInformation,@pbi,sizeof(pbi),@r); if ret=STATUS_SUCCESS then if ReadProcessMemory(h,pbi.PebBaseAddress.ProcessParameters.CommandLine.Buffer,PWideChar(ws), pbi.PebBaseAddress.ProcessParameters.CommandLine.Length,r) then result:=string(ws); finally closehandle(h) end end; |
Отправлено: 17:55, 26-07-2015 | #4 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Если уж unicode, то почему не - GetCommandLineW?
function WideCharToString(Source: PWideChar): string; |
|
------- Отправлено: 18:31, 26-07-2015 | #5 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата qpash:
|
|
------- Отправлено: 19:00, 26-07-2015 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доступ - [решено] Запуск командной строки от имени Администратора из командной строки | emcee | Microsoft Windows 8 и 8.1 | 12 | 06-05-2023 07:36 | |
CMD/BAT - запуск командной строки от имени администратора из командной строки | jah | Скриптовые языки администрирования Windows | 18 | 19-09-2015 08:59 | |
Разное - Windows 7 безопасный режим с поддержкой командной строки не работает defrag | GrayMagellan | Microsoft Windows 7 | 1 | 05-11-2014 20:25 | |
Delphi - Delphi | Работа с памятью чужого процесса, перехват API | Savant | Программирование и базы данных | 17 | 11-04-2012 13:06 | |
WinAPI | Изменение контекстного меню чужого процесса | megad | Программирование и базы данных | 8 | 17-08-2005 21:42 |
|