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

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

07.05.2010, 14:56. Показов 2712. Ответов 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 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru