要取一个获得焦点control的handle的方法如下:
(1)用GetCursorPos()涵数取得当前mouse所在的屏幕坐标
(2)用WindowFromPoint()涵数(参数是上面得到的坐标值)来返回这个window的Handle:)

解决方案 »

  1.   

    在构件的mousemove事件里记录
    看看哪个时间更晚
      

  2.   

    都不是啦!假如我在IE的地址栏点了一下,然后又跑大老远到我自己的程序了点了一下,这时怎样获得IE地址栏的Handle?
      

  3.   

    就没有相关的API?例如GetLastFocusedCtrl :(
      

  4.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      RegisterHotKey(Handle, 1001, MOD_Win, 65); //注册全局热键"Win + A"
    end;
    proceudre TForm.OnClose;
    begin
      UnRegisterHotKey(Handle, 1001);
    end;{消息重载 WM_HOTKEY}
    procedure TForm1.WMHotKey(var Msg: TMessage);  
    var
      ActiveHandle: THandle;  //当前活动窗体ThreadID
      FocusHandle: THandle;  //焦点控件
      CurHandle: THandle;    //本程序ThreadID
    begin
      if Msg.WParam = 1001 then  //
      begin
        CurHandle := GetCurrentThreadID;
        ActiveHandle := GetWindowThreadProcessID(GetForeGroundWindow, nil);
        AttachThreadInput(CurHandle, ActiveHandle, True);
        FocusHandle := GetFocus;
        //SendMessage(FocusHandle, WM_GetText, 0, 0); 可以用SendMessage得到焦点控件的Text,怎么用忘了,看一个TEdit那样方法。
        Memo1.Lines.Add(Format('焦点控件的Handle: %d', [FocusHandle]);    
        AttachThreadInput(CurHandle, ActiveHandle, False);
      end;
      inherited;
    end;  程序运行在后台,然后mouse点中一个TMemo, TEdit之类的东东,然后按Win + A,那Handle就在Memo1中了 
      

  5.   

    var
      Buffer: PChar;
      ...
    begin
      ...
      SendMessage(FocusHandle, WM_GetText, 255, Integer(Buffer));
      Memo1.Lines.Add(Format('焦点控件的Handle: %d, Text:%s', [FocusHandle, Buffer]));
      ...
    end;
      

  6.   

    to copy_paste(木石三):
    我不是用hotkey啊,我就是想在焦点已经变化的情况下得到上一个焦点。
      

  7.   

    你可以将FocusHandle保存,然后按Button时,拿保存的Handle来用就是了。
      

  8.   

    如果不用hotkey,也可以用Hook来实现。
      

  9.   

    将FocusHandle保存?拦截这个消息是吗?似乎可行,试试!
      

  10.   

    我想在Screen.OnActiveControlChange里获得,但是他好象只管自己程序里的事,顾不得全局啊
      

  11.   

    你怎么知道何时所有控件失去焦点(不用Hook)?
      

  12.   

    var
      hd:thandle;
      buf:array[1..50] of char;
    begin
        hd:=findwindow(nil,'别的应用程序标题')
        hd:=findwindowex(hd,0,'edit',nil);    //EDIT的句柄  用SPY++查看类名及,,,
    end;