要取一个获得焦点control的handle的方法如下:
(1)用GetCursorPos()涵数取得当前mouse所在的屏幕坐标
(2)用WindowFromPoint()涵数(参数是上面得到的坐标值)来返回这个window的Handle:)
(1)用GetCursorPos()涵数取得当前mouse所在的屏幕坐标
(2)用WindowFromPoint()涵数(参数是上面得到的坐标值)来返回这个window的Handle:)
解决方案 »
- 如何去除idhttp的identity头
- 有一段VC++的代码,想改成delphi的,比较简单的,可是改了一点不会了,哪位能帮帮兄弟呀。
- Query的RecordCount属性很是奇怪?
- Sql server 2000:如何清空某一个表格并且将标示列恢复到初始值?
- 有谁用Delphi做过ERP,能否提供ERP的整体方案谢谢!
- 如何实现左侧是Ttreeview,右侧是显示区域?
- f1book6,双击表页页签会弹出对话框修改SheetName,如何禁止它。
- 关于QuickRep的问题,怎么才能将Memo中的内容赋给QRMemo呢?
- 请问有没有办法在statusbar控件上实现文字滚动?
- Delphi不行?那用什么开发桌面软件?
- 谁能介绍基本好的DELPHI书给我吗?
- delphi5有象vb中的控件锁一样的功能吗?
看看哪个时间更晚
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中了
Buffer: PChar;
...
begin
...
SendMessage(FocusHandle, WM_GetText, 255, Integer(Buffer));
Memo1.Lines.Add(Format('焦点控件的Handle: %d, Text:%s', [FocusHandle, Buffer]));
...
end;
我不是用hotkey啊,我就是想在焦点已经变化的情况下得到上一个焦点。
hd:thandle;
buf:array[1..50] of char;
begin
hd:=findwindow(nil,'别的应用程序标题')
hd:=findwindowex(hd,0,'edit',nil); //EDIT的句柄 用SPY++查看类名及,,,
end;