Поиск:

Ответ в темуСоздание новой темы Создание опроса
> События от клавы 
:(
    Опции темы
Гость_max07
Дата 3.8.2005, 20:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Общий приувет!
Вот код, записывает в фаил цобытия от клавы

Код

//--------------------------Project1.cpp---------------------------------------

#include <vcl.h>
#include <condefs.h>
#include <winuser.h>
#include <winbase.h>
#include <stdio.h>

USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
HHOOK hook;
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{       

typedef int (CALLBACK* lpfn)();
lpfn hookfunc; 

HINSTANCE hDLL = LoadLibrary("dll\\project2.dll");

hookfunc = (lpfn)GetProcAddress(hDLL,"KeyboardProc");

hook = SetWindowsHookEx(WH_KEYBOARD, hookfunc, hDLL,  0);

//while(1) {};
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        return 0;
}
//---------------------------------------------------------------------------

//---------------------project2.dll--------------------------------------

#include <vcl.h>
#include <winuser.h>
#include <stdio.h>
#pragma hdrstop
#include <fstream>
using namespace std;

#pragma argsused
extern "C" __declspec(dllexport) LRESULT CALLBACK
KeyboardProc(int code, WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  FILE *stream;

  fstream fr("C:\\Logfile.log", ios::app);
  fr << MapVirtualKey(wParam, 2) << " ";
  fr.close();

  return CallNextHookEx(NULL, code, wParam, lParam);
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
//---------------------------------------------------------------------------



При выполнении получаю вот что:

49 49 50 50 51 51 52 52 53 53 54 54 55 55 56 56 57 57

Кто нибуть может обяцнить почему код кнопки повтаряется 2 раза?
Если кто знает, как решить эту проблему?
  Вверх
Гость_max07
Дата 4.8.2005, 21:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Никаких вариантов?
  Вверх
chaos
Дата 5.8.2005, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 1
Всего: 44



нажал отпустил, в чем проблем то?
PM WWW   Вверх
chaos
Дата 5.8.2005, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 1
Всего: 44



обрабатывай lParam и все у тебя будет хорошо
для примера, можно сделать так
Код

if (lParam < 0) return 0;

PM WWW   Вверх
mr.Anderson
Дата 8.8.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Гость_max07, я в вашем коде разобраться не могу (недостаточный уровень знаний пока у меня smile ), но могу предположить, что вы где-то вызвали два раза функцию вывода значений нажатия клавиш. У меня было подобное, когда я вызывал два раза одну и ту же функцию, выводилось по 2 значения.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
max07
Дата 8.8.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 21.12.2004

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



Нет, не два раза. Как правильно заметил chaos происходит два события (нажал->отпустил).
я сделал так

Код

  fstream fr(F, ios::app);
  if(lParam >= 0 && (wParam != 16 && (97 <= ch && ch <= 'z')))
   fr << ch << " " << char(ch) << endl;


Теперь всё ОК smile
Только SHIFT не ловит smile, ловит только код прописных букв.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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