Есть программа, состаящая из клиента и сервера. Клиент отправляет сообщение через 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;
Возвращает ничего. Пожалуйста, помогите разобраться... я в делфи новичек и, возможно, допускаю какую-нибудь глупую ошибку в коде... Но спросить не у кого...