如何控制其他程序的焦点?(50分)

  • 主题发起人 主题发起人 red
  • 开始时间 开始时间
R

red

Unregistered / Unconfirmed
GUEST, unregistred user!
比如说启动该功能后,只需把鼠标移到IE地址栏,程序能自动扑捉焦点,
并在里面输入网页地址并传送一个回车指令.
 
我又要拿 cAkk的单元换分了,在你的单元里 uses unit2;
即可。 :-)
unit Unit2;
interface
uses windows,messages;
procedure SendKeys(sSend:string);
implementation
procedure SendKeys(sSend:string);
var
i:integer;
focushld,windowhld:hwnd;
threadld:dword;
ch: byte;
begin
windowhld:=GetForegroundWindow;
threadld:=GetWindowThreadProcessId(Windowhld,nil);
AttachThreadInput(GetCurrentThreadId,threadld,true);
Focushld:=getfocus;
AttachThreadInput(GetCurrentThreadId,threadld,false);
if focushld = 0 then
Exit;
i := 1;
while i <= Length(sSend)do
begin
ch := byte(sSend);
if Windows.IsDBCSLeadByte(ch) then
begin
Inc(i);
SendMessage(focushld, WM_IME_CHAR, MakeWord(byte(sSend), ch), 0);
end
else
SendMessage(focushld, WM_IME_CHAR, word(ch), 0);
Inc(i);
end;
postmessage(focushld,WM_keydown,13,0);
end;
end.
 
wjiachun兄对API很熟呀,多谢!
我想再问一下,如果我需要设定程序执行5秒后,自动捕获当时的焦点然后发送字符
的话又该怎么做呢?即使当时鼠标键盘都没动.
 
最好还是你自己点一下任何编辑框获得焦点。
否则的话大约可以用
FindWindows,SetFocus之类的函数试试,你自己检索一下,
关于如何获得焦点,以前讨论过的。
 
有了
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=196680
 
接受答案了.
 
后退
顶部