Архив метки: Delphi

Телеграмм бот на Delphi

Ради интереса решил написать телеграмм бота на Delphi.
Я не буду описывать как и что каждая команда выполняет, у меня код довольно легкий для чтения состоящий из простых команд + там есть немного комментариев.
Просто выложу тут исходники и дам пару ссылок где можно почерпнуть знания.
Тут идет описание telegramm бота на Delphi, но в отличии от моего примера, там используются для HTTP запросов Synapse, а для парсинга JSON — superobject. Я для этих целей использую уже идущие с Delphi пакеты indy и JSON.

Как работать с JSON — https://yandex.ru/turbo/webdelphi.ru/s/2019/03/rabota-s-json-v-delphi-10-3-rio/ описано очень доходчиво.
Для работы как с Synapse, так и с indy понадобится библиотеки Open SSL. В архиве с моим примером они уже лежат там, но на всякий случай оставлю ссылку на разные версии библиотек https://www.indyproject.org/download/ssl/
API Telegramm — https://core.telegram.org/bots/api
Так же в моем примере представлена только получение и отправка сообщения. Пример отправки и получения фотографии, музыки, видео и прочего — нету.

Скачать программу Telegramm bot на Delphi

Delphi. Получение PID дочернего процесса.

Пишем на Delphi.
Потребовалось найти PPID. Т.е. PID потомка процесса порождающего его.

//******************************************************************************
//функция получает ПИД дочернего процесса , передается ПИД процесса родителя
//******************************************************************************
function Get_PIDchild_process(PIDparent:Cardinal):Cardinal;
var
  HandleSnapShot      : THandle;
  EntryParentProc     : TProcessEntry32;
  fnd: boolean;
begin
result := 0;    //если процесс не существует
HandleSnapShot     := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//делаем снапшот процессов или чего там (короче диспетчера задач)
EntryParentProc.dwSize := SizeOf(EntryParentProc);     //я так понимаю создаем структуру , этакий шаблон , для получения данных
fnd := Process32First(HandleSnapShot, EntryParentProc); // Находим первый процесс. передавая снапшота в структуру данных
while fnd do // Цыкл перебора всех процессов в системе (снапшоте).
  begin
  if (EntryParentProc.th32ParentProcessID = PIDparent) then   //если найден процеесс у которого родитель его то
    begin
    fnd := false; //заканчиваем цыкл
    result := EntryParentProc.th32ProcessID;  //возвращааем PID процесса потомка
    ShowMessage(inttostr(PIDparent)+'   '+inttostr(EntryParentProc.th32ProcessID)+'   '+EntryParentProc.szExeFile);
    end;
  fnd := Process32Next(HandleSnapShot, EntryParentProc);  // Схожий процесс не найден, продолжаем перебор
  end;
CloseHandle(HandleSnapShot);  // Закрываем наш снепшот.
end;

Прокомментирую, в кратце.
Делаем «снапшот» всех процессов в системе. Создаем структур (массив) — в которую будем передавать снапшот, а дальше просто цыклом перебираем. И тем самым находим по PID родителя PID потока.