Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Не получается в хуке по перехвату ввода в клаву


Автор: barin_Student 1.12.2008, 13:55
Код

//--------------------------
#include <vcl.h>
#include <fstream.h>
#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)
{
//FILE *f;
  char *iniFileName=".\ hook.ini";
  TIniFile *ini = new TIniFile(iniFileName);
  int key1=ini->ReadInteger("hook settings","key1",120);
  int key2=ini->ReadInteger("hook settings","key2",121);
  int key3=ini->ReadInteger("hook settings","key3",122);
  int key4=ini->ReadInteger("hook settings","key4",123);
  delete ini;
  AnsiString compareWParam =(AnsiString)wParam;
  AnsiString compareKey1=(AnsiString)key1;
  if(compareWParam==compareKey1)//
   {
                TDateTime date;
                TStringList *List = new TStringList();
                ShowMessage("Key1");
                unsigned short year, month, day, hour, min, sec,msec;
                DecodeDateTime(date.CurrentDate(), year, month, day, hour, min, sec,msec);
                 AnsiString str="c:\\"+(AnsiString)month+year+"key1.quit";
                char *filePath=str.c_str();
                {
                        ShowMessage("Na4ninaem Sohraniat");
                        List->LoadFromFile(filePath);
                        List->SaveToFile(date.CurrentDateTime().TimeString()+" "+compareKey1);
                        ShowMessage("sohranili");
                }
                delete List;
        }
return CallNextHookEx(NULL, code, wParam, lParam);
}

Выводит :
key1
Na4naem sohraniat'
key1
Na4naem sohraniat'

файл создается , но ничаго в файле нет.. smile 
Builder 6.0

Автор: xvr 1.12.2008, 17:38
Цитата(barin_Student @ 1.12.2008,  13:55)
Код

//--------------------------
#include <vcl.h>
#include <fstream.h>
#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)
{
//FILE *f;
  char *iniFileName=".\ hook.ini";
  TIniFile *ini = new TIniFile(iniFileName);
  int key1=ini->ReadInteger("hook settings","key1",120);
  int key2=ini->ReadInteger("hook settings","key2",121);
  int key3=ini->ReadInteger("hook settings","key3",122);
  int key4=ini->ReadInteger("hook settings","key4",123);
  delete ini;
  AnsiString compareWParam =(AnsiString)wParam;
  AnsiString compareKey1=(AnsiString)key1;
  if(compareWParam==compareKey1)//
   {
                TDateTime date;
                TStringList *List = new TStringList();
                ShowMessage("Key1");
                unsigned short year, month, day, hour, min, sec,msec;
                DecodeDateTime(date.CurrentDate(), year, month, day, hour, min, sec,msec);
                 AnsiString str="c:\\"+(AnsiString)month+year+"key1.quit";
                char *filePath=str.c_str();
                {
                        ShowMessage("Na4ninaem Sohraniat");
                        List->LoadFromFile(filePath);
                        List->SaveToFile(date.CurrentDateTime().TimeString()+" "+compareKey1);
                        ShowMessage("sohranili");
                }
                delete List;
        }
return CallNextHookEx(NULL, code, wParam, lParam);
}

Выводит :
key1
Na4naem sohraniat'
key1
Na4naem sohraniat'

файл создается , но ничаго в файле нет.. smile 
Builder 6.0

А что в нем должно быть? А файл "c:\\"+(AnsiString)month+year+"key1.quit" существует?


Автор: barin_Student 2.12.2008, 09:29
с:\122008.quit 
файл есть
 smile 

Автор: xvr 2.12.2008, 11:47
Цитата(barin_Student @ 2.12.2008,  09:29)
с:\122008.quit 
файл есть
 smile

А должен быть с:\122008key1.quit

Автор: barin_Student 2.12.2008, 12:44
с файлом вот как мне помогли разобраться :
Код

TDateTime dt = Now();
 std::auto_ptr<TStringList> list (new TStringList);
 list->Add(str);
  list->SaveToFile(pathLogFile);

Только файл не дописывается , переписывется... smile  , но с этим я разберусь , тема закрыта.

Автор: xvr 2.12.2008, 18:02
Цитата(barin_Student @ 2.12.2008,  12:44)
с файлом вот как мне помогли разобраться :
Код

TDateTime dt = Now();
 std::auto_ptr<TStringList> list (new TStringList);
 list->Add(str);
  list->SaveToFile(pathLogFile);


Вообще то это не то, что у тебя было первоначально написано.
У тебя содержимое файла с:\122008key1.quit копировалось в файл 
2008 12 ... 120, а в новом куске кода в файл 2008 12 ... 120 копируется сама строка с:\122008key1.quit
Цитата

Только файл не дописывается , переписывется... smile  , но с этим я разберусь , тема закрыта.
Угу, и не будет дописываться, SaveToFile такого сервиса не предоставляет

Автор: barin_Student 3.12.2008, 06:14
переделал вот так:
Код

TDateTime dt;
      dt=Now();
      unsigned short year, month, day, hour, min, sec,msec;
      DecodeDateTime(dt.CurrentDate(), year, month, day, hour, min, sec,msec);
      ofstream fo;
      AnsiString pathLogFile="c:\\Monitor\\"+(AnsiString)month+year+"key1.quit";
      AnsiString strDate= dt.DateString();
      AnsiString strTime= dt.TimeString();
      AnsiString strAll= strDate+" "+strTime+"  "+compareKey1;
      fo.open(pathLogFile.c_str(),ios::app);
      fo<<strAll.c_str()<<endl;
      fo.close();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)