Показать сообщение отдельно
  #8  
Старый 09.11.2007, 11:56
CODeRUS CODeRUS вне форума
Прохожий
 
Регистрация: 25.07.2007
Сообщения: 8
Репутация: 10
По умолчанию

ну вот смотри как я решил этот вопрос:
Код:
  var
  CWND,LastWnd:HWND;
  SzKeyName, WindowName: array [0..127] of char
  {...}
  CWnd:=GetForegroundWindow;
  GetWindowText(CWnd, SzKeyName, SizeOf(SzKeyName));
И ещё могу предложить функцию низкоуровневого хука на клавиатуру и мыши(без использования dll):
клавиатура
Код:
var
  kHook: THandle;
  iVKey:integer;
  sVKey:string;

procedure KeyAction;
begin
  // do sth
end;

function LowLevelKeyboardProc(nCode: Integer;
  WParam: WPARAM; LParam: LPARAM): LRESULT stdcall;

  type
  PKbdDllHookStrukt = ^TKbdDllHookStrukt;
  _KBDLLHOOKSTRUCT = record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: PDWORD;
  end;
  TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;

const
  RPT_WPARAM_DATA = '%s';
  RPT_LPARAM_DATA = '%d';

var
  StrResult: String;
begin
  StrResult := '';
  if nCode = HC_ACTION then
    Result := CallNextHookEx(kHook, nCode, WParam, LParam);
  case WParam of
    WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
    WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
  end;

  StrResult := Format(RPT_LPARAM_DATA, [PKbdDllHookStrukt(LParam)^.vkCode]);
  if (Wparam=WM_KEYUP) or (Wparam=WM_SYSKEYUP) then strresult:='';
  sVKey:=strresult;
  if strresult<>'' then
  iVKey:=strtoint(strresult) //Получаем iVKey нажатой клавиши
  else iVKey:=0;
  KeyAction;

end;

procedure InstallKeyBoardHook;
const
  WH_KEYBOARD_LL = 13;
begin
  kHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
  if kHook = 0 then RaiseLastOSError;
end;

procedure RemoveKeyBoardHook;
begin
if not UnhookWindowsHookEx(kHook) then RaiseLastOSError;
end;

мышь
Код:
const
   WH_MOUSE_LL = 14;

tagMSLLHOOKSTRUCT = packed record
    pt : TPoint;
    mouseData : DWord;
    flags : DWord;
    time : DWord;
    dwExtraInfo : PDWord;
  end;
  tMSLLHOOKSTRUCT = tagMSLLHOOKSTRUCT;
  PMSLLHOOKSTRUCT = ^TMSLLHOOKSTRUCT;

var
  mHook:HHook;
  Mpt:TPoint;;

{...}

function LowLevelMouseProc(nCode:integer;wP: WPARAM ; lP:LPARAM):LRESULT; stdcall;
var
 MS:PMSLLHOOKSTRUCT;
begin
 if nCode<0 then
  begin
   Result:=CallNextHookEx(mHook,nCode,wP,lP);
   exit;
  end;
  if wP = WM_MOUSEMOVE then //когда мышь побежала-побежала...
   begin
    MS:=PMSLLHOOKSTRUCT(lP);
    mPt.x:=MS^.pt.X;	//получаем Х-координату мыши
    mPt.y:=MS^.pt.Y;	//получаем У-координату мыши
   end;

   Case wP of
      WM_LButtonDown: begin //когда нажали левую кнопку мыши
    	//
      end;
      WM_LButtonUp: begin //отпустили
    	//
      end;
      WM_RButtonDown: begin //когда нажали правую кнопку мыши
    	//
      end;
      WM_RButtonUp: begin //отпустили
    	//
      end;
      WM_MButtonDown: begin //среднюю нажали
    	//
      end;
      WM_MButtonUp: begin //отпустили
    	//
      end;
     WM_MouseWheel: begin //манипуляции и колесиком
	//	
      end else begin //когда не WM_MOUSEWHEEL
	//
       end;
      end;

   Result:=CallNextHookEx(mHook,nCode,wP,lP);
end;

procedure InstallMouseHook; //процедура инициализации хука
begin
mHook:=SetWindowsHookEx(WH_MOUSE_LL,@LowLevelMouseProc, HInstance, 0);
end;

procedure RemoveMouseHook; //деинициализация хука
begin
UnhookWindowsHookEx(mHook);
end;
Ответить с цитированием