Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.04.2012, 23:35
homeknight homeknight вне форума
Прохожий
 
Регистрация: 03.04.2012
Сообщения: 12
Репутация: 10
По умолчанию Программа удаленного администрирования (проблема с получением списка процессов)

Есть программа, состаящая из клиента и сервера. Клиент отправляет сообщение через ServerSocket, сервер анализирует и в зависимости от полученного сообщения выполняет действия(или ничего не делает)

В чем именно проблема я не знаю, но сервер не присылает список программ...

Программу списываю с http://www.xakep.ru/post/12475/

Процедуру сбора сведений о полученных процессах взял тут: http://zetblog.ru/programming/200812/winapi-получить список-запущенных-процесс/

Поковырял немного и получилось вот так:

Код:
function GetProcessList(ServerSocket1: TServerSocket): TStrings;
var
  eP: TProcessEntry32;
  hP, snap: THandle; 
  hM: hmodule; 
  prcs: array[0..$FFF] of dword;

  cP, cM: cardinal; 
  i: integer;
  NameProc: array[0..max_path] of char;
  begin
  lP:=TStringList.Create;
  lP.Clear;

  if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
  begin //если это Win9x

    snap := CreateToolhelp32Snapshot(th32cs_snapprocess, 0);
    if integer(snap) = -1 then
    begin
      exit;
    end
    else
    begin
      eP.dwSize := sizeof(eP);

      if Process32First(snap, eP) then

        repeat
          lP.Add(string(eP.szExeFile));
        until not Process32Next(snap, eP);
    end;
  end
  else
  begin 
    if not EnumProcesses(@prcs, sizeof(prcs), cP) then
    begin
      exit;
    end;

    for i := 0 to cP div 4 - 1 do
    begin
      hP := OpenProcess(PROCESS_QUERY_INFORMATION or
                                    PROCESS_VM_READ,
                                     false, prcs[i]);
      if hP > 0 then
      begin
        EnumProcessModules(hP, @hM, 4, cM);
        GetModuleFileNameEx(hP, hM, NameProc, sizeof(NameProc));
        ServerSocket1.Socket.Connections[0].SendText(ExtractFileName(string(NameProc))); 

       lP.Add(string(NameProc));
                                     
        CloseHandle(hP);
      end;
    end;
  end;
 
end;

при этом вызов функции идет из:

Код:
begin
a:=Socket.ReceiveText;
if a ='hello' then Socket.SendText('Hello, i`m you server');
 RichEdit1.Lines.Add(a);
if a= 'StartFTP' then
  begin
   FTPServer1.Start;
   Socket.SendText('FTP Server started');
   end;
if a= 'StopFTP' then
begin
  FTPServer1.DisconnectAll;
  FTPServer1.Stop;
  Socket.SendText('FTP Server stoped');

if a='lp' then GetProcessList(ServerSocket1); //этой строки

if copy(a,1,2) = 'dp' then
  delproc(copy(a,4,Length(a)-3));
end;
end;

Возвращает ничего. Пожалуйста, помогите разобраться... я в делфи новичек и, возможно, допускаю какую-нибудь глупую ошибку в коде... Но спросить не у кого...

Последний раз редактировалось homeknight, 04.04.2012 в 00:43.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025