Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
1 / 0 / 1
Регистрация: 18.07.2014
Сообщений: 23

Ошибка при открытии процесса по его Handle

10.07.2015, 18:39. Показов 1925. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, столкнулся с проблемой открытия процесса, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
 
#define PROGRAMM_NAME "Game"
 
void main() {
    
    setlocale(LC_ALL, "Rus");
    //получение окна
    HWND hwnd = FindWindow(NULL, TEXT(PROGRAMM_NAME));
    if (!hwnd) {
        cout << "[-]Окно не найдено";
            return;
    }
    //Получение id процесса
    DWORD pid;
    GetWindowThreadProcessId(hwnd, &pid);
    if (!pid) {
        cout << "[-]Процесс не найден";
        return;
    }
 
    //получаем хэндл процесса
    HANDLE hProc;
    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
 
    if (!hProc)
    {
        cout << "Невозможно получить хэндл процесса.";
        return;
    }
    cout << "[+]Окно" << hwnd << endl;
    cout << "[+]Процесс" << pid << endl;
    cout << "[+]Хендл" << hProc << endl;
    
 
 
    system("pause");
}
Соответственно Окно и сам процесс находит, а вот при открытии его возникает ошибка, заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2015, 18:39
Ответы с готовыми решениями:

Как выбрать окно, если его handle не совпадает с handle процесса?
Добрый день! Задача на первый взгляд довольно простая: выбрать окно программы, переместить его в определённую часть экрана и нажать на...

Получить имя процесса по его handle
Всем привет, ищу статью по получению имени из хендла процесса. Кому не трудно, киньте пример или подскажите алгоритм получения имени....

Как узнать Handle или PID процесса, зная его имя и класс?
Как узнать Handle или PID процесса, зная его имя и класс?

8
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.07.2015, 20:09
Сразу после OpenProcess вызывайте GetLastError и смотрите, что за код.
Расшифровку можно посмотреть в Error Lookup (есть в меню Tools в Visual Studio).
1
10.07.2015, 20:16

Не по теме:

Цитата Сообщение от Hocksten Посмотреть сообщение
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
- так тебе какой нибудь winlogon с таким аксесом и открылся:D

0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
10.07.2015, 21:34
С калькулятором работает.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
 
#define PROGRAMM_NAME "Калькулятор"
 
int main() {
    
    setlocale(LC_ALL, "Rus");
    //получение окна
    HWND hwnd = FindWindow(NULL, TEXT(PROGRAMM_NAME));
    if (!hwnd) {
        cout << "[-]Окно не найдено";
        return 1;
    }
    //Получение id процесса
    DWORD pid;
    GetWindowThreadProcessId(hwnd, &pid);
    if (!pid) {
        cout << "[-]Процесс не найден";
        return 2;
    }
 
    //получаем хэндл процесса
    HANDLE hProc;
    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
 
    if (!hProc)
    {
        cout << "Невозможно получить хэндл процесса.";
        return 3;
    }
    cout << "[+]Окно " << hwnd << endl;
    cout << "[+]Процесс " << pid << endl;
    cout << "[+]Хендл " << hProc << endl;
 
    return 0;
}
[+]Окно 005105F2
[+]Процесс 10228
[+]Хендл 00000084
Какая возникает ошибка ты не сказал. Как получить номер и сообщение об ошибке тебе сказали.
Скорее всего нельзя открыть процесс Game с полным доступом.

Добавлено через 1 минуту
С калькулятором работает.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
 
#define PROGRAMM_NAME "Калькулятор"
 
int main() {
    
    setlocale(LC_ALL, "Rus");
    //получение окна
    HWND hwnd = FindWindow(NULL, TEXT(PROGRAMM_NAME));
    if (!hwnd) {
        cout << "[-]Окно не найдено";
        return 1;
    }
    //Получение id процесса
    DWORD pid;
    GetWindowThreadProcessId(hwnd, &pid);
    if (!pid) {
        cout << "[-]Процесс не найден";
        return 2;
    }
 
    //получаем хэндл процесса
    HANDLE hProc;
    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
 
    if (!hProc)
    {
        cout << "Невозможно получить хэндл процесса.";
        return 3;
    }
    cout << "[+]Окно " << hwnd << endl;
    cout << "[+]Процесс " << pid << endl;
    cout << "[+]Хендл " << hProc << endl;
 
    return 0;
}
[+]Окно 005105F2
[+]Процесс 10228
[+]Хендл 00000084
Какая возникает ошибка ты не сказал. Как получить номер и сообщение об ошибке тебе сказали.
Скорее всего нельзя открыть процесс Game с полным доступом.
0
1 / 0 / 1
Регистрация: 18.07.2014
Сообщений: 23
10.07.2015, 21:51  [ТС]
Прошу прощения, я забыл как раз упомянуть, что на других приложениях( таких как калькулятор соответственно) все работает в норме.
Code
1
Код ошибки GetLastError(); 87 - Неверно задан параметр
Пробовал выставлять значение, вместо
PROCESS_ALL_ACCESS
ставил
PROCESS_VM_READ
GetLastError() все равно выдает ошибку 87
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.07.2015, 22:05
Я бы еще посоветовал проверить, что возвращает GetWindowThreadProcessId.
Может быть, она завершается с ошибкой и в pid мусор.
0
1 / 0 / 1
Регистрация: 18.07.2014
Сообщений: 23
10.07.2015, 22:05  [ТС]
Немного разобравшись, GetLastError() при параметрах PROCESS_VM_READ и PROCESS_ALL_ACCESS выдает ошибку 5 - ошибка доступа, если так, то что можно сделать?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
10.07.2015, 22:08
Попробуй использовать следующий метод, возможно он покажет более подробную информацию об ошибке.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <locale>
#include <windows.h>
 
static void win_error( int error ) {
    char * p_msg;
    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL, error, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), (LPTSTR)&p_msg, 0, NULL );
    MessageBox( NULL, p_msg, "Error", MB_OK | MB_ICONERROR );
    LocalFree( p_msg );
}
 
int main() {
    setlocale( LC_ALL, "Russian" );
 
    ...
    win_error( GetLastError() );
    ...
 
    return 0;
}
Сообщение об ошибке из MessageBox можно скопировать в буффер обмена при помощи комбинации клавиш Ctrl-C.
0
1 / 0 / 1
Регистрация: 18.07.2014
Сообщений: 23
10.07.2015, 22:09  [ТС]
Всем большое спасибо, ошибку решил
Кликните здесь для просмотра всего текста
P.S оказалось все проще, надо было запускать от имени администратора xD
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2015, 22:09
Помогаю со студенческими работами здесь

при создании процесса создаётся ярлык в трее, по окончании процесса он не убираетс сам, как его убрать оттуда?
Друзья! Вот исходник процесса, качнул с инета. Это в консольном режиме запускат аудио файлы, например mp3: // cmdmp3 // A command-line...

Получение Handle запущенного процесса
Доброго всем дня. Уважаемые, подскажите пожалуйста, что я не так делаю, мне нужно получить хендл запущенного процесса, и... я его получаю,...

Не могу получить handle процесса
Решил написать инжектор по какому-то гайду. Смотрел другие гайды, все равно не работает. Нужен HANDLE процесса, но почему-то не могу его...

Получить Handle AppID процесса
Здравствуйте. Есть приложение на delphi, в которой устанавливается Handle, для того, что-бы можно было запустить только одну копию...

Найти HANDLE по названию процесса
господа есть апишная функция для этого , просто мне надо , что то типо такого HEANDLE hd = FindHeandle(&quot;qwer.exe&quot;); Буду...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 01.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 31.01.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru