Форум по 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.
Ответить с цитированием
  #2  
Старый 03.04.2012, 23:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Уверен, что
Код:
  a := Socket.ReceiveText;
возвращает только то, что проверяется? Может использовать Pos для проверки.

Код:
  lP:=TStringList.Create;
  lP.Clear;
после создания, lP уже пуст и очищать нет нужды. Также нужно не забывать освобожать, когда он больше не требуется.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 03.04.2012, 23:49
homeknight homeknight вне форума
Прохожий
 
Регистрация: 03.04.2012
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Уверен, что
Код:
  a := Socket.ReceiveText;
возвращает только то, что проверяется? Может использовать Pos для проверки.

Код:
  lP:=TStringList.Create;
  lP.Clear;
после создания, lP уже пуст и очищать нет нужды. Также нужно не забывать освобожать, когда он больше не требуется.

Я не уверен, что до конца понял что ты имел ввиду, но посыл текста StartFTP и Hello возвращает на клиента сообщения, соответственно, о том, что фтп запушено и Hello, i am your server. При этом на StartFTP функция запуска FTPServer выполняется без нареканий.
Ответить с цитированием
  #4  
Старый 03.04.2012, 23:53
homeknight homeknight вне форума
Прохожий
 
Регистрация: 03.04.2012
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Код:
  lP:=TStringList.Create;
  lP.Clear;
после создания, lP уже пуст и очищать нет нужды. Также нужно не забывать освобожать, когда он больше не требуется.

на сколько я понял из ошибок SendText(lp) не сработает с сокетом...
TStrings and String не совпадут...
Ответить с цитированием
  #5  
Старый 03.04.2012, 23:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Мда, срочно учить матчасть.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
homeknight (03.04.2012)
  #6  
Старый 04.04.2012, 00:01
homeknight homeknight вне форума
Прохожий
 
Регистрация: 03.04.2012
Сообщения: 12
Репутация: 10
По умолчанию

Может направишь в нужное русло?) Я понимаю, что туплю где-то, но прогу мне надо дописать все же...

да и вобще, я просто не доковырял до ума код, скопированный из блога зет.

lp мне по сути не нужен...
Код:
ServerSocket1.Socket.Connections[0].SendText(ExtractFileName(string(NameProc)));
отправляет клиенту процессы

Последний раз редактировалось homeknight, 04.04.2012 в 00:04.
Ответить с цитированием
  #7  
Старый 04.04.2012, 00:12
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В этом коде ошибки не видно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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