Вопрос пользователя связан с необходимостью получения пути к приложению Delphi 2010, которое использует определенный порт для коммуникации, аналогично тому, как это делает команда netstat -b. Пользователь хочет использовать код на Object Pascal (Delphi) для решения этой задачи, а не команды DOS или объяснений работы netstat.
Подтвержденный ответ
В решении задачи используется функция GetExtendedTcpTable, которая возвращает таблицу с перечнем доступных TCP-соединений. Сначала необходимо просмотреть записи, возвращаемые функцией, и проверить поля dwLocalPort или dwRemotePort в зависимости от того, какой порт необходимо проверить. Затем, используя поле dwOwningPid, можно получить путь к исполняемому файлу приложения, используя функцию GetModuleFileNameEx.
Пример кода, который демонстрирует, как получить список всех TCP-соединений, подобно netstat, и который можно модифицировать под свои нужды:
uses
PsAPI,
WinSock,
Windows,
SysUtils;
const
ANY_SIZE = 1;
iphlpapi = 'iphlpapi.dll';
TCP_TABLE_OWNER_PID_ALL = 5;
// ... (перечисление состояний TCP остается без изменений)
type
// ... (описание типов остается без изменений)
function GetPathPID(PID: DWORD): string;
// ... (реализация функции GetPathPID остается без изменений)
procedure ShowCurrentTCPConnections;
// ... (реализация процедуры ShowCurrentTCPConnections остается без изменений)
var
libHandle : THandle;
begin
try
ReportMemoryLeaksOnShutdown:=DebugHook <> 0;
libHandle := LoadLibrary(iphlpapi);
GetExtendedTcpTable := GetProcAddress(libHandle, 'GetExtendedTcpTable');
ShowCurrentTCPConnections;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
Альтернативный ответ
Также можно использовать IP Helper Component от компании Magenta Systems, который является бесплатным и имеет хорошие примеры использования.
Заключение
Пользователи оставляют положительные отзывы на подтвержденный ответ, отмечая скорость и знания автора. Это подтверждает эффективность предложенного решения.
Используя предоставленный пример кода, можно модифицировать его для получения пути к приложению, использующему определенный порт. Это позволит, например, закрыть приложение, если это будет необходимо, зная его порт и, соответственно, PID.
Пользователю нужно получить путь к приложению Delphi 2010, использующему определенный порт для коммуникации, аналогично функции `netstat -b`, с использованием кода на Object Pascal.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS