Zireael |
Отправлено: 04 Февраля, 2020 - 23:26:10
|
Эксперт
Покинул форум
Сообщений всего: 4462
Дата рег-ции: Нояб. 2017
Репутация: 585
|
А где связь между виртуалкой и эмулятором?
Получить список всех процессов (Отобразить)CODE:#define TH32CS_SNAPPROCESS 2
external(INT, "CreateToolhelp32Snapshot", "CreateToolhelp32Snapshot", "Kernel32.dll");
external(INT, "Process32First", "Process32First", "Kernel32.dll");
external(INT, "Process32Next", "Process32Next", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
char PROCESSENTRY32[296];
int hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapshot)
{
writeaddress(sizearray(PROCESSENTRY32), address(#PROCESSENTRY32[0]));
if(fopen(tempfolder()+"ListProcess.txt", "w"))
{
Process32First(hSnapshot, address(#PROCESSENTRY32[0]));
fwrite(format(#PROCESSENTRY32[36])); fwrite(ENDL);
while(Process32Next(hSnapshot, address(#PROCESSENTRY32[0])))
{
fwrite(format(#PROCESSENTRY32[36])); fwrite(ENDL);
}
fclose();
start(tempfolder()+"ListProcess.txt");
}
CloseHandle(hSnapshot);
} |
|
|
grBIN |
Отправлено: 05 Февраля, 2020 - 08:49:59
|
Наблюдатель
Покинул форум
Сообщений всего: 41
Дата рег-ции: Нояб. 2017
Откуда: Псков
Репутация: 2
|
Zireael пишет: А где связь между виртуалкой и эмулятором?
Получить список всех процессов (Отобразить)CODE:#define TH32CS_SNAPPROCESS 2
external(INT, "CreateToolhelp32Snapshot", "CreateToolhelp32Snapshot", "Kernel32.dll");
external(INT, "Process32First", "Process32First", "Kernel32.dll");
external(INT, "Process32Next", "Process32Next", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
char PROCESSENTRY32[296];
int hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapshot)
{
writeaddress(sizearray(PROCESSENTRY32), address(#PROCESSENTRY32[0]));
if(fopen(tempfolder()+"ListProcess.txt", "w"))
{
Process32First(hSnapshot, address(#PROCESSENTRY32[0]));
fwrite(format(#PROCESSENTRY32[36])); fwrite(ENDL);
while(Process32Next(hSnapshot, address(#PROCESSENTRY32[0])))
{
fwrite(format(#PROCESSENTRY32[36])); fwrite(ENDL);
}
fclose();
start(tempfolder()+"ListProcess.txt");
}
CloseHandle(hSnapshot);
}
Спасибо, но это немного не то, хоть и полезно. Мы знаем имя процесса.
Как его передать в openprocess() если тот принимает только указатель на окно, а через кибор его найти не удается (видимо потому что самого окна нет).
Может мы можем как то воспользоватся именем процесса, или его ID который мы можем найти с помощью вашей функции.
P.S. Возможно readmemory скушает ID процесса, но врятли, а проверить до вечера не смогу Т_Т |
|
|
Zireael |
Отправлено: 05 Февраля, 2020 - 13:05:48
|
Эксперт
Покинул форум
Сообщений всего: 4462
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Можно открыть процесс по pid.
code (Отобразить)CODE:#define TH32CS_SNAPPROCESS 2
#define PROCESS_ALL_ACCESS 2097151
external(INT, "CreateToolhelp32Snapshot", "CreateToolhelp32Snapshot", "Kernel32.dll");
external(INT, "Process32First", "Process32First", "Kernel32.dll");
external(INT, "Process32Next", "Process32Next", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
external(INT, "OpenProcess", "OpenProcess", "Kernel32.dll");
int prc = openprocess_("Kibor.exe"); // открыть процесс с указанным именем
if(prc > 0)
{
// тут нужные действия
//char HP[4];
//readmemory(#HP[0], 4, 319151424, prc); // прочитать 4 байта по указанному адресу
//messagebox(codhexi(#HP[0], 4));
CloseHandle(prc); // закрыть процесс
}
else messagebox("Процесс не найден или не открылся");
function openprocess_(string name_process)
{
char PROCESSENTRY32[296];
int hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapshot)
{
writeaddress(sizearray(PROCESSENTRY32), address(#PROCESSENTRY32[0]));
Process32First(hSnapshot, address(#PROCESSENTRY32[0]));
int PID = 0;
while(Process32Next(hSnapshot, address(#PROCESSENTRY32[0])))
{
if(format(#PROCESSENTRY32[36]) == name_process)
{
PID = codhexi(#PROCESSENTRY32[8], 4); // ID процесса
break;
}
}
CloseHandle(hSnapshot);
if(PID)return OpenProcess(PROCESS_ALL_ACCESS, 1, PID); // открыть процесс и вернуть хендл
else return 0; // вернёт 0 если процесс не открылся
}
return -1; // вернёт -1 если процесс не найден
}
Я только не знаю с какими правами доступа openprocess используется. |
|
|
grBIN |
Отправлено: 05 Февраля, 2020 - 17:58:23
|
Наблюдатель
Покинул форум
Сообщений всего: 41
Дата рег-ции: Нояб. 2017
Откуда: Псков
Репутация: 2
|
Zireael пишет: Можно открыть процесс по pid.
code (Отобразить)CODE:#define TH32CS_SNAPPROCESS 2
#define PROCESS_ALL_ACCESS 2097151
external(INT, "CreateToolhelp32Snapshot", "CreateToolhelp32Snapshot", "Kernel32.dll");
external(INT, "Process32First", "Process32First", "Kernel32.dll");
external(INT, "Process32Next", "Process32Next", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
external(INT, "OpenProcess", "OpenProcess", "Kernel32.dll");
int prc = openprocess_("Kibor.exe"); // открыть процесс с указанным именем
if(prc > 0)
{
// тут нужные действия
//char HP[4];
//readmemory(#HP[0], 4, 319151424, prc); // прочитать 4 байта по указанному адресу
//messagebox(codhexi(#HP[0], 4));
CloseHandle(prc); // закрыть процесс
}
else messagebox("Процесс не найден или не открылся");
function openprocess_(string name_process)
{
char PROCESSENTRY32[296];
int hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapshot)
{
writeaddress(sizearray(PROCESSENTRY32), address(#PROCESSENTRY32[0]));
Process32First(hSnapshot, address(#PROCESSENTRY32[0]));
int PID = 0;
while(Process32Next(hSnapshot, address(#PROCESSENTRY32[0])))
{
if(format(#PROCESSENTRY32[36]) == name_process)
{
PID = codhexi(#PROCESSENTRY32[8], 4); // ID процесса
break;
}
}
CloseHandle(hSnapshot);
if(PID)return OpenProcess(PROCESS_ALL_ACCESS, 1, PID); // открыть процесс и вернуть хендл
else return 0; // вернёт 0 если процесс не открылся
}
return -1; // вернёт -1 если процесс не найден
}
Я только не знаю с какими правами доступа openprocess используется.
Спасибо, все отлично отрабатывает и проблема полностью решена, впрочем это у вас как обычно
Попрошу Владимира добавить эту функцию в тему с openprocess, будет полезно для ребят=)
P.S. Когда в прошлый раз баловался с кибором у кого то была идея создать тему с подобными полезностями из winapi, видимо ее так и не появилось? Очень жаль Т_Т |
|
|
|