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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2007, 15:36   #11
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

2 Сильванович Михаил:

ты окно лишь для удобства проверки существования файла создавал, или оно для чего-то ещё нужно?

просто пытаюсь твой код переделать, но прога жутко виснет
вот код

я не сильно шарю, поэтому не надо сильно ругаться

Код:
program EmtyProject;

uses
  windows,messages;

Var HookHandle:HHOOK=0;

function Win32Check(RetVal: BOOL): BOOL;
begin
  if not RetVal then GetLastError;
  Result := RetVal;
end;

function GetCharFromVKey(vkey: Word): string;
var
  keystate: TKeyboardState;
  retcode: Integer;
begin
  Win32Check(GetKeyboardState(keystate));
  SetLength(Result, 2);
  retcode := ToAscii(vkey,
    MapVirtualKey(vkey, 0),
    keystate, @Result[1],
    0);
  case retcode of
    0: Result := '';
    1: SetLength(Result, 1);
    2: ;
    else
      Result := '';
  end;
end;


function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
  msg: PEVENTMSG;
  s: string;
begin
  if Code >= 0 then
  begin
    result := 0;
    msg := Pointer(LParam);
    if msg.message=WM_KEYDOWN then
    begin
     if (GetKeyState(VK_SHIFT)=1) and (GetKeyState(VK_CONTROL)=1) then
      s:=GetCharFromVKey(msg.paramL)
     if (s[1]='P') or (s[1]='p') then
      MessageBox(0,'it works!!!','Program succeded',MB_ICONWARNING);
    end;
    result := CallNextHookEx(HookHandle, code, WParam, LParam);
    sleep(10);
  end;
end;

procedure SetMyHook;
begin
  HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, hInstance, 0);
end;

procedure UnhookMyHook;
begin
  if HookHandle <> 0 then
    UnhookWindowsHookEx(HookHandle);
end;



begin
SetMyHook;
sleep(10000); ///Это я для теста
UnHookMyHook;
end.
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 20.11.2007, 15:53   #12
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

похеру на GetKeyState в хуке, убрал нафиг, обхожусь одной клавишей
но кто-нить мне может объяснить, почему данный код немного поработает а потом перестаёт, не думаю, что дело в бипере

Код:
program EmtyProject;

uses
  windows,messages,wincls;

Var HookHandle:HHOOK=0;
  hApp: THandle;
  wClass: TWndClass;
  wMSG: TMSG;

function Win32Check(RetVal: BOOL): BOOL;
begin
  if not RetVal then GetLastError;
  Result := RetVal;
end;

function GetCharFromVKey(vkey: Word): string;
var
  keystate: TKeyboardState;
  retcode: Integer;
begin
  Win32Check(GetKeyboardState(keystate));
  SetLength(Result, 2);
  retcode := ToAscii(vkey,
    MapVirtualKey(vkey, 0),
    keystate, @Result[1],
    0);
  case retcode of
    0: Result := '';
    1: SetLength(Result, 1);
    2: ;
    else
      Result := '';
  end;
end;

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
  msg: PEVENTMSG;
  s: string;
begin
  s:='';
  if Code >= 0 then
  begin
   result := 0;
   msg := Pointer(LParam);
   If msg.message WM_KEYDOWN then
     begin
      s:=GetCharFromVKey(msg.paramL);
      if (s<>'') and (s[1]='*') then
           Windows.Beep(4400,500);
     end;
   result := CallNextHookEx(HookHandle, code, WParam, LParam);
  end;
end;

procedure SetMyHook;
begin
  HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, hInstance, 0);
end;

procedure UnhookMyHook;
begin
  if HookHandle <> 0 then
    UnhookWindowsHookEx(HookHandle);
end;

function WndMessageProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT; stdcall;
begin
 Result := 0;
  case Msg of
   WM_CREATE: SetMyHook;
   WM_DESTROY:
   begin
    UnhookMyHook;
    halt;
   end;
 end;
 Result := DefWindowProc(hWnd,Msg,wParam,lParam);
end;

begin
  wClass:=WndClass1(hInstance,0,0,0,0,0,COLOR_BTNFACE,'MYCLASS','',@WndMessageProc);
  RegisterClass(wClass);
  hApp:=CreateWindow(wClass.lpszClassName, '',0,
  CW_USEDEFAULT, CW_USEDEFAULT,
  0, 0, 0, 0, hInstance, nil);
  if hApp=0 then
  begin
   UnregisterClass('MYCLASS',hInstance);
   halt;
  end;
  loopWindow(wMsg);
end.
Почему это пашет некоторое время, а потом нет?
Как нормально перехватить нажатие комбинации управляющих клавиш вместе с буквами в одной ловушке подобного типа?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 31.05.2013, 12:21   #13
evosys
 
Регистрация: 31.05.2013
Сообщений: 9
По умолчанию

Помогите.
Мне нужно откомпилировать этот код. Установил Visual Studio 2010. Что дальше? Какой проект создать чтобы в него вставить код что был указан ранее в этой теме.
Очень надо. Спасите.
evosys вне форума Ответить с цитированием
Старый 31.05.2013, 12:33   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от evosys Посмотреть сообщение
Помогите.
Мне нужно откомпилировать этот код. Установил Visual Studio 2010. Что дальше? Какой проект создать чтобы в него вставить код что был указан ранее в этой теме.
Очень надо. Спасите.
а это Делфи.
студия вам ни к чему.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.05.2013, 12:46   #15
evosys
 
Регистрация: 31.05.2013
Сообщений: 9
По умолчанию

Если не трудно - можете откомпилировать этот код и приложить сюда всё что получится (или на почту mtg-vadim собака mail точка ru). Очень надо сдать эту прогу. Времени уже совсем нет что-то делать
Огромное спасибо тому кто откликнется.
evosys вне форума Ответить с цитированием
Старый 31.05.2013, 14:42   #16
evosys
 
Регистрация: 31.05.2013
Сообщений: 9
По умолчанию

Вроде откомпилировал. Но куда пишется лог? всё висит, ничего на внешний вид не происходит. Каспера на момент тестирования выключил. хелп
evosys вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить нажатие клавиши Windows? UnD)eaD)Snake Win Api 3 16.03.2009 18:21
Как в Си обработать нажатие управлавляющих клавиш ? feranic Общие вопросы C/C++ 5 14.04.2008 19:20
Операторы ветвлений (нажатие клавиш) barahlysh Общие вопросы C/C++ 6 12.12.2007 12:19
Нажатие клавиш VanDerKeen Win Api 1 03.06.2007 21:13