unit SysFocus;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs;
type
TSysFocus=class(TComponent)
public
function GetSysFocus:integer;
function SetSysFocus(hwnd:integer):integer;
end;
implementation
function TSysFoucs.GetSysFocus;//取当前活动窗口
var
hOtherWin,OtherThreadID,hFocusWin:integer;
begin
hOtherWin:=GetForegroundWindow;
OtherThreadID:=GetWindowThreadProcessID(hOtherWin,nil);
if AttachThreadInput(GetcurrentThreadID,OtherThreadID,True) then
begin
hFocusWin:=GetFocus;
result:=GetFocus;
if HFocusWin<>0 then
try
//SendMessage(GetFocus,WM_COPY,0,0);//书上是这么写的
finally
AttachThreadInput(GetcurrentThreadID,OtherThreadID,False);
end;
end
else result:=GetFocus;
end;
function TSysFocus.SetSysFocus(hwnd:integer):integer;//设置某窗口为活动窗口
var
hOtherWin,OtherTHreadID,hFocusWin:integer;
begin
hOtherWin:=GetForegroundWindow;
OtherThreadID:=GetWindowThreadProcessID(hOtherWin,nil);
if AttachThreadInput(GetcurrentThreadID,OtherThreadID,True) then
begin
hFocusWin:=GetFocus;
SetFocus(hwnd);
//SendMessage(hwnd,WM_COPY,0,0);
if hFocusWin<>0 then
try
//SendMessage(GetFocus,WM_COPY,0,0);
finally
AttachThreadInput(GetCurrentTHreadID,OtherTHreadID,False);
end;
end
else result:=SetFocus(hwnd);
end;
end.
|