C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
перехват клавиатуры
Гость_Serg
Отправлено: 08.09.2003, 15:38


Не зарегистрирован







Подсткажите плиз, как решить задачку:

Хочу перехватить нажатия на либую клавишу, если фокус в ComboBox.
и не передавать эту клавишу (char) в ComboBox->Items..., а оставить так.

Понятно, кажется...

Combobox->Style=DropDownList не подходит.


С уважением,

Serg.
LeeMouse
Отправлено: 09.09.2003, 09:36


Дежурный стрелочник

Группа: Участник
Сообщений: 79




void __fastcall TMainForm::ComboBox1KeyPress(TObject *Sender, char &Key)
{
if( Key == что_то )
{
// делаем что-то
Key = 0;
} // if
}
Георгий
Отправлено: 09.09.2003, 10:17


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



а лучше сделать так (это и будет, наверное полным ответом на вопрос)
CODE
if( ComboBox1->Focused() )
  {
  <тот кусок, который LeeMouse привёл>
  }
LeeMouse
Отправлено: 09.09.2003, 15:02


Дежурный стрелочник

Группа: Участник
Сообщений: 79



хихи... это совсем не лучше. А просто лишняя проверка. Мой кусок будет вызван только если фокус на контроле biggrin.gif
Гость_Serg
Отправлено: 09.09.2003, 19:32


Не зарегистрирован







Сорри, господа.

Я не хочу, чтобы в ComboBox что-то писалось. Видимо нужен хук, чтобы перехватить клаву, но как ето сделать?...

rgrds,

Serg.

Георгий
Отправлено: 09.09.2003, 20:18


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



LeeMouse
О! Верно. Это я, наверное, спросонья не заметил...
пользовался бы ты тегом CODE — былобы проще читать.
Serg
А ты проверь, что, как работает то, что LeeMouse тебе в своём первом ответе написал, а потом о всяких хуках рассуждай...
Serg
Отправлено: 11.09.2003, 11:29


Ученик-кочегар

Группа: Участник
Сообщений: 8



CODE
Да............. Спасибо!
Orifiel
Отправлено: 15.09.2003, 12:20


Не зарегистрирован







Имеется процедура хука:
//процедура хука
DWORD CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{

static int iCount;
char lParamString[30], Buffer[255];
//файл для контроля за тем, как работает хук
ofstream outfile ("C:\\Projects\\FloppyDriveOper\\Viarum\\Log.txt",ios::out|ios::app);
//зануляем lParam, в котором отображаются коды клавиш
if(lParam!=0)lParam=0;
//дальнейшие действия лишь для контроля
itoa(abs(lParam),lParamString,10);
if((strlen(lParamString)==10)||(strlen(lParamString)==9))
{
GetKeyNameText(lParam,Buffer,sizeof Buffer);
if((iCount!=0)&&(iCount%100==0))outfile<<" "< else outfile<<" "< iCount++;
}
//передача управления следующим хукам
return CallNextHookEx(hHook,nCode,wParam,lParam);
}

Но в чем собственно проблема. Такой код скрывает символы лишь в моем файле, кейлоггеру же на этот код глубоко наплевать.
Как обмануть кейлоггер, подскажите, плз...

Вернуться в Вопросы программирования в C++Builder