![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть программа, состаящая из клиента и сервера. Клиент отправляет сообщение через 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. |