Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
10th
Май
Получение списка процессов
Для моего проекта мне необходимо получить список запущенных процессов.
Посоветуйте код, как это сделать.
17th
Фев
Процессы vs потоки
Почему в некоторых программах, процесс исполнения программы распределяется не в рамках потоков одного процесса, а в рамках процессов операционки.
Например chrome. (читать всё…)
18th
Июн
Узнать в delphi приложении — загружена ли dll, какие dll используются программой.
Мастак:
Можно ли как-то проверить загружена ли определённая dll в память.Желательно это сделать из другого процесса.
14th
Дек
Защита объектов в Windows. Обновление в блоге программистов
Здравствуйте читатели блога программистов. После долгого перерыва, который длился более чем полгода на блоге новая статья. В этой статье я расскажу про защиту объектов в операционных системах Windows. Данная статья будет полезна каждому, который начал изучать системное программирование в системах Windows, а также тем которые хотят разобраться в механизмах защиты в Windows. В статье речь, конечно, будет идти про системы Windows NT. Всё, что будет здесь сказано, будет справедливо для систем Win 2000, XP, Vista и Se7en. Итак, приступим. читать… (читать всё…)
4th
Сен
Как узнать к какому процессу принадлежит известный класс окна
const
// Размер буфера, резервируемого для имени класса при
// использовании функций GetClassName и GetReadWindowClass
ClassNameLen = 512;
function EnumWindowProc(Wind: HWND; LI: TListItem): BOOL; stdcall;
var
Text: string;
TextLen: Integer;
ClassName: array[0..ClassNameLen - 1] of Char;
begin
Result := True;
TextLen := GetWindowTextLength(Wind);
SetLength(Text, TextLen);
if TextLen > 0 then
GetWindowText(Wind, PChar(Text), TextLen + 1);
if TextLen > 100 then
Text := Copy(Text, 1, 100) + ' ...';
GetClassName(Wind, ClassName, ClassNameLen);
ClassName[ClassNameLen - 1] := #0;
LI := AddAppForm.AppWindList.Items.add;
LI.Caption := IntToStr(Wind);
LI.SubItems.Add(ClassName);
if Text = '' then
LI.SubItems.Add('без имени')
else
LI.SubItems.Add(Text);
end;
function EnumTopWindowProc(Wind: HWND; PID: Cardinal): BOOL; stdcall;
var
Text: string;
TextLen: Integer;
ClassName: array[0..ClassNameLen - 1] of Char;
WindPID: Cardinal;
LI: TListItem;
begin
Result := True;
GetWindowThreadProcessId(Wind, @WindPID);
if WindPID = PID then
begin
TextLen := GetWindowTextLength(Wind);
SetLength(Text, TextLen);
if TextLen > 0 then
GetWindowText(Wind, PChar(Text), TextLen + 1);
if TextLen > 100 then
Text := Copy(Text, 1, 100) + ' ...';
GetClassName(Wind, ClassName, ClassNameLen);
ClassName[ClassNameLen - 1] := #0;
LI := AddAppForm.AppWindList.Items.add;
LI.Caption := IntToStr(Wind);
LI.SubItems.Add(ClassName);
if Text = '' then
LI.SubItems.Add('без имени')
else
LI.SubItems.Add(Text);
//EnumChildWindows(Wind,@EnumWindowProc,LParam(LI));
end;
end;
function GetProcessPID(ExeFileName: string): Cardinal;
var
ContinueLoop: Bool;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.DwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do
begin
if ((AnsiUpperCase(ExtractFileName(FProcessEntry32.SzExeFile)) =
AnsiUpperCase(ExeFileName)) or (AnsiUpperCase(FProcessEntry32.SzExeFile) =
AnsiUpperCase(ExeFileName))) then
Result := FProcessEntry32.Th32ProcessID;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
function ProcessExists(ExeFileName: string): Boolean;
var
ContinueLoop: Bool;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := False;
FSnapshotHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.DwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do
begin
if ((AnsiUpperCase(ExtractFileName(FProcessEntry32.SzExeFile)) =
AnsiUpperCase(ExeFileName)) or (AnsiUpperCase(FProcessEntry32.SzExeFile) =
AnsiUpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
procedure GetWindList(PID: Cardinal);
begin
if PID = 0 then
Exit;
EnumWindows(@EnumTopWindowProc, PID);
end;
23rd
Авг
Получить идентификатор процесса и узнать полуный путь до файла этого процесса. c/c++
Пишу небольшую программу, мне нужно чтобы она искала заданный мною выполняемый процесс. Подскажите какая это функция может сделать, быть может это win api функция?
Sazary:
код:
#include <stdio.h>
#include <TlHelp32.h>
#include <conio.h>
#include <string.h>
#include <psapi.h>
using namespace std;
int main()
{
HANDLE h,hp;
PROCESSENTRY32 pe;
int id;
bool bl,flag=false;
char name[256],str[256];
char path[MAX_PATH];
DWORD dw;
HMODULE hmod;
scanf(”%s”,name);
h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPMODULE,0);
for(bl = Process32First(h, &pe); bl; bl = Process32Next(h, &pe))
{
strcpy(str,pe.szExeFile);
if(strcmp(str,name)==0)
{
printf(”Process found: %s\n”,str);
hp = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,false,pe.th32ProcessID);
EnumProcessModules(hp, &hmod,sizeof(hmod),&dw); // получаем первый модуль, связанный с процессом, то есть сам exe-файл
GetModuleFileNameEx(hp, hmod, path, MAX_PATH); // получаем путь к модулю
printf(”path: %s\n”,path);
CloseHandle(hp);
CloseHandle(h);
flag = true;
break;
}
}
CloseHandle(h);
if(!flag) printf(”Process not found”);
getch();
return 0;
}
Нужно прилинковать модуль psapi.
12th
Май
Закрытие чужого процесса WinApi
Одно из многочисленных готовых решений:
function ProcessTerminate(dwPID:Cardinal):Boolean;
var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
// Добавляем привилегию SeDebugPrivilege
// Для начала получаем токен нашего процесса
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken ) then
exit;
// Получаем LUID привилегии
if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue )
then begin
CloseHandle(hToken);
exit;
end;
tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Luid := SeDebugNameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// Добавляем привилегию к нашему процессу
AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
if GetLastError()< > ERROR_SUCCESS then exit;
// Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем
// завершить и системный процесс
// Получаем дескриптор процесса для его завершения
hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
if hProcess =0 then exit;
// Завершаем процесс
if not TerminateProcess(hProcess, DWORD(-1))
then exit;
CloseHandle( hProcess );
// Удаляем привилегию
tkp.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() < > ERROR_SUCCESS
then exit;
Result:=true;
end;
31st
Мар
Функция для удаления любого процесса, в котором включается привилегия доступа SE_DEBUG_NAME
{
bool Co;
HANDLE FS;
HANDLE hProcess = NULL;
DWORD dwError;
int result;
FS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
ProcEntry.dwSize = sizeof(ProcEntry);
Co = Process32First(FS, &ProcEntry);
while (Co)
{
if ( ProcEntry.szExeFile == ExeFileName )
{
hProcess = OpenProcess(PROCESS_TERMINATE, false, ProcEntry.th32ProcessID);
if (hProcess == NULL)
{
if (GetLastError() != ERROR_ACCESS_DENIED)
return FALSE;
OSVERSIONINFO osvi;
// определяем версию операционной системы
osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);
// мы больше ничего не можем сделать, если это не Windows NT
if (osvi.dwPlatformId != VER_PLATFORM_WIN32_NT)
return SetLastError(ERROR_ACCESS_DENIED), FALSE;
// включим привилегию SE_DEBUG_NAME и попробуем еще раз
TOKEN_PRIVILEGES Priv, PrivOld;
DWORD cbPriv = sizeof(PrivOld);
HANDLE hToken;
// получаем токен текущего потока
if (!OpenThreadToken(GetCurrentThread(),
TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,
FALSE, &hToken))
{
if (GetLastError() != ERROR_NO_TOKEN)
return FALSE;
// используем токен процесса, если потоку не назначено
// никакого токена
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,
&hToken))
return FALSE;
}
_ASSERTE(ANYSIZE_ARRAY > 0);
Priv.PrivilegeCount = 1;
Priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Priv.Privileges[0].Luid);
// попробуем включить привилегию
if (!AdjustTokenPrivileges(hToken, FALSE, &Priv, sizeof(Priv),
&PrivOld, &cbPriv))
{
dwError = GetLastError();
CloseHandle(hToken);
return SetLastError(dwError), FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
// привилегия SE_DEBUG_NAME отсутствует в токене
// вызывающего
CloseHandle(hToken);
return SetLastError(ERROR_ACCESS_DENIED), FALSE;
}
// попробуем открыть описатель процесса еще раз
hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, ProcEntry.th32ProcessID);
dwError = GetLastError();
// восстанавливаем исходное состояние привилегии
AdjustTokenPrivileges(hToken, FALSE, &PrivOld, sizeof(PrivOld),
NULL, NULL);
CloseHandle(hToken);
if (hProcess == NULL)
return SetLastError(FALSE), NULL;
}
// пытаемся завершить процесс
if (!TerminateProcess(hProcess, (UINT)-1))
{
dwError = GetLastError();
CloseHandle(hProcess);
return SetLastError(dwError), FALSE;
}
}
Co = Process32Next(FS, &ProcEntry);
}
CloseHandle(FS);
CloseHandle(hProcess);
return TRUE;
}
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)