Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хук прикреплялется к explorer.exe, как отсановит его? 
:(
    Опции темы
barin_Student
Дата 2.12.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

Репутация: нет
Всего: 2



Код

//--------------------------
#include <vcl.h>
#include <fstream.h>
 #include <memory>
#include <winuser.h>
#include <stdio.h>
#include <IniFiles.hpp>
#include <DateUtils.hpp>
#pragma hdrstop
//--------------------------

extern "C" __declspec(dllexport) LRESULT CALLBACK
KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
//--------------------------
// 
//--------------------------
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  char *iniFileName=".\\hook.ini";
  TIniFile *ini = new TIniFile(iniFileName);
  int key1=ini->ReadInteger("hook settings","key1",120);
  delete ini;
  AnsiString compareWParam =(AnsiString)wParam;
  AnsiString compareKey1=(AnsiString)key1;
  if(compareWParam==compareKey1)//
  {
      TDateTime dt = Now();
      std::auto_ptr<TStringList> list (new TStringList);
      AnsiString strDate= dt.DateString();
      AnsiString strTime= dt.TimeString();
      AnsiString str = strDate+" "+strTime+"  "+compareKey1;
      ShowMessage(str);
      list->Add(str);
      unsigned short year, month, day, hour, min, sec,msec;
      DecodeDateTime(dt.CurrentDate(), year, month, day, hour, min, sec,msec);
      AnsiString pathLogFile="c:\\"+(AnsiString)month+year+"key1.quit";
      list->SaveToFile(pathLogFile);
  }
  return CallNextHookEx(NULL, code, wParam, lParam);
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
    return 1;
}
//--------------------------

Я дико извиняюсь , что очень часто создаю темы , но время сильно жмет, а в си я только ученик smile , вот это DLL для перехвата с клавы нажатых кнопок , посмотрите , где я не правильно сделал , если что поправьте плиз smile )))
А вот как я ее запускаю, тоже плиз проверьте , а то я по не знанию многих вещей могу дурость написать... Так вот я то зациклить, зациклил DLL (работать должна 24 часа программа), но в какой то момент , должно ведь все стопаться , как мне это реализовать?
Код

//--------------------------
/* <*.h> - заголовочные файлы, чтобы юзать функции WinAPI и не только их */
#include <vcl.h>
#include <condefs.h>
#include <winuser.h>
#include <winbase.h>
#include <stdio.h>
//---------------------------------------------------------------------------
HHOOK hook; // Handle нашей "шпионской" функции
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// Объявляем тип функции;
// параметры и их тип в скобках указывать не надо - и так работает :)
typedef int (CALLBACK* lpfn)();
lpfn hookfunc; // Конкретный указатель на функцию

// Юзаем нашу DLL
HINSTANCE hDLL=LoadLibrary("dllhook.dll");
// Находим в ней адрес функции, которая и будет шпионить за клавой
hookfunc=(lpfn)GetProcAddress(hDLL,"KeyboardProc");

// Запускаем шпиона
hook=SetWindowsHookEx(WH_KEYBOARD, /* шпионить за клавиатурой */
hookfunc, /* функция, которая шпионит */
LoadLibrary("dllhook.dll"), /* еҒ DLL */
0 /* Шпионить за всеми потоками в системе*/ );

while(true) {Sleep(-1);}; // Зацикливаем прогу, чтобы DLL висела в памяти
}
//--------------------------

 Так вот я то зациклить, зациклил DLL (работать должна 24 часа программа), но в какой то момент , должно ведь все стопаться , как мне это реализовать?
 smile  , буду очень благодарен , если укажите на ошибки в коде... smile 



--------------------
Нехорошо блин!!!
PM MAIL   Вверх
586
Дата 2.12.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



DLL я бы так написал:
Код
//--------------------------
#include <vcl.h>
#include <windows.h>
#include <stdio.h>
#include <IniFiles.hpp>
#pragma hdrstop
//--------------------------
extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  const char *iniFileName="C:\\hook.ini";

  TIniFile *ini = new TIniFile(iniFileName);              // небезопасный код: может возникнуть исключение
  int key1=ini->ReadInteger("hook settings","key1",120);  //
  delete ini;                                             //


  //if(wParam == (WPARAM)key1)
  {
      SYSTEMTIME st;
      GetLocalTime(&st);

      char szFileName[MAX_PATH];

      sprintf(szFileName, "C:\\%02u_%04u.txt", (UINT)st.wMonth, (UINT)st.wYear);

      FILE *f = fopen(szFileName, "a+");

      if(f)
      {
          fprintf(f, "%2u.%02u.%04u %2u:%02u:%02u %u (%c)\n",
            (UINT)st.wDay, (UINT)st.wMonth, (UINT)st.wYear,
            (UINT)st.wHour,  (UINT)st.wMinute, (UINT)st.wSecond,
            wParam, (wParam > 32) ? wParam : ' ');

          fclose(f);
      } else {
        MessageBeep(16);
      }
  }
  return CallNextHookEx(NULL, code, wParam, lParam);
}

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


А хук снимается с помощью функции UnhookWindowsHookEx внутри главного приложения.

Это сообщение отредактировал(а) 586 - 2.12.2008, 18:27
PM   Вверх
barin_Student
Дата 3.12.2008, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

Репутация: нет
Всего: 2



счас посмотрю. smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.