 
			
				09.11.2007, 11:56
			
			
			
		  
	 | 
	
		
		
		
			
			| 
			
				
				
				 Прохожий 
				
				
			 | 
			  | 
			
				
				
					Регистрация: 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; 
  
		
	
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
		 
		
	
	
	 |