Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628

Килоггер вызывает ошибку abnormal program termination

07.05.2010, 14:56. Показов 2728. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!!!
Программа перехватывает нажатие на PrintScreen.

В программе есть DLL библиотека с Хуками, которая и отслеживает нажатие. По нажатию PrintScreen создаётся окно, в котором показывается скриншот.

При первом запуске и нажатии на PrintScreen программа работает как надо, последующие нажатия вызывают ошибку abnormal program termination.

Почему это происходит?


DLL (на основе https://www.cyberforum.ru/cpp-... 949.html):

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//---------------------------------------------------------------------------
#include <windows.h>
#include <vcl.h>
extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
extern "C" __declspec(dllexport) void hwnd(HHOOK HwndHook);
HHOOK hHook;//хранит дескриптор приложения загрузившего dll-ку
HINSTANCE hInstance;
FARPROC KeybProc = (FARPROC)KeyboardProc;
TForm *form = new TForm(Application);
TImage *image = new TImage(form);
Graphics::TBitmap *bitmap = new Graphics::TBitmap;
 
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void hwnd(HHOOK HwndHook)//определяет дескриптор основного приложения
{
hHook=HwndHook;
}
//---------------------------------------------------------------------------
 
TNotifyEvent screen()
{
    bitmap->Width = Screen->Width;
    bitmap->Height = Screen->Height;
    bitmap->PixelFormat = pf32bit;
    BitBlt(bitmap->Canvas->Handle, 0,0,Screen->Width, Screen->Height, GetDC(0), 0,0,SRCCOPY);
    image->Canvas->StretchDraw(TRect(0,0,500,400), bitmap);
    return 0;
}
 
TCloseEvent close()
{
    delete [] form;
    delete [] image;
    delete [] bitmap;
    return 0;
}
 
void run()
{
    if(!FindWindow(NULL,"Screen Snap"))
    {
        form->Caption = "Screen Snap";
        form->Width = 500;
        form->Height = 400;
        form->Position = poScreenCenter;
 
        image->Parent = form;
        image->Width = 500;
        image->Height = 400;
        image->Align = alClient;
        image->Proportional = true;
 
        form->OnCreate = screen();
        form->OnClose = close();
        form->Show();
    }
}
 
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
    if(wParam == VK_SNAPSHOT)
        run();
    return CallNextHookEx(hHook,code,wParam,lParam);//передаем "пойманные" параметры следующей ловушке
}
//---------------------------------------------------------------------------
EXE:

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
typedef void (*HWN)(HHOOK );
 
HWN hwn=NULL;
 
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    HMODULE dllhook = LoadLibrary("hook.dll");//грузим длл-ку
    if(dllhook)//проверяем удачность загрузки библиотеки
    {
        hwn = (HWN)GetProcAddress(dllhook,"_hwnd");//импортируем из библиотеки функцию для определения дескриптора основного приложения
        HOOKPROC hook = (HOOKPROC)GetProcAddress(dllhook, "KeyboardProc");//импортируем процедуру определения нажатой клавиши
        if(hwn && hook)//проверяем удачность импорта функций
        {
            HHOOK hhook = SetWindowsHookEx(WH_KEYBOARD,hook,dllhook,0);//ставим ловушку на события клавиатуры
            hwn(hhook);//передаем в dll-ку дескриптор своего приложения
            //run();
            Sleep(INFINITE);//впадаем в бесконечную спячку (INFINITE==-1)
        }
    }
    FreeLibrary(dllhook);
    return 0;
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2010, 14:56
Ответы с готовыми решениями:

abnormal program termination
Здравствуйте. При выполнении лабы у меня возникла ошибка &quot;abnormal program termination&quot; в строчке if num1 == 0 и так далее, короче...

Abnormal program termination?
Суть в чем. Разбираю чужой код и нашел ошибку. Когда нажимаю кнопку вылетает «Abnormal program termination» Нашел где это...

Abnormal program termination
В общем возникает эта ошибка. Я даже знаю какая часть кода её вызывает, но изменить ничего не могу:( Если из кода убрать эту часть, то...

5
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 15:12
delete [] form;
delete [] image;
delete [] bitmap;
это не массивы, их надо без скобок писать
0
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
07.05.2010, 15:17  [ТС]
А всё равно, ошибка не исчезла...
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 15:21
тогда можно посоветовать делать создание
Code
1
2
3
TForm *form = new TForm(Application);
TImage *image = new TImage(form);
Graphics::TBitmap *bitmap = new Graphics::TBitmap;
при загрузке длл-ки,а удаление при выгрузке и все в ф-ции DllEntryPoint
0
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
07.05.2010, 15:22  [ТС]
А как, если не трудно, можно пример?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 15:51
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
BOOL WINAPI DllEntryPoint(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
    switch(fwdreason)
    {
    case DLL_PROCESS_ATTACH:
        TForm *form = new TForm(Application);
        TImage *image = new TImage(form);
        Graphics::TBitmap *bitmap = new Graphics::TBitmap;    
    break;
    case DLL_PROCESS_DETACH:
        delete form;
        delete image;
        delete bitmap;
    }
    return 1;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2010, 15:51
Помогаю со студенческими работами здесь

TFileStream и Abnormal program termination
есть классы class Street { public: string Contry; string City; string Street; }; class Adress : public Street

Проблема 'abnormal program termination' загрузки сохраненного в скомпилированной программе изображения
Здравствуйте, уважаемые форумчане, возникла дилемма, в довольно ёмкой программе (код которой могу предоставить) произошла ошибка:...

"Abnormal program termination" при закрытии формы
При закрытии формы вылетает сообщение &quot;Abnormal program termination&quot;, и проект закрывается. Форма вызывается, как: std::auto_ptr...

"Зависание" и затем Abnormal Program Termination
Есть структура с большим количеством переменных и функций, в т.ч. переменные AnsiString. Объявляется статический массив этой структуры. В...

Ошибка: "Abnormal program termination"
При закрытии формы появляется ошибка: &quot;Abnormal program termination&quot;. Unit1.h #ifndef Unit1H #define Unit1H ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru