如何获取当前活动的窗口(非本应用的)的名字或标题

Goshawkx 2004-08-02 02:09:01
想做个程序,在后台定时监控活动的窗口是什么 (比如Word,IE等)
怎么能在后台运行的程序中获得系统中当前活动窗口的名字或标题?

谢谢
...全文
323 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天揽月 2004-08-03
  • 打赏
  • 举报
回复
可以用两个API函数:
GetActiveWindow得到当前活动窗体的句柄。
GetWindowText得到窗体的标题

benna 2004-08-03
  • 打赏
  • 举报
回复
使用 GetForegroundWindow

试试,搞定
root3646 2004-08-02
  • 打赏
  • 举报
回复
WindowFromPoint 不太符合要求!
GetActiveWindow 返回活动窗口句柄

下面提供几种我找到的资料。没有检测,供参考
var
hCurrentWindow: HWnd;
szText: array[0..254] of char;
begin
hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
While hCurrentWindow <> 0 Do
Begin
If GetWindowText(hCurrentWindow, @szText, 255) > 0 Then
ListBox1.Items.add(Strpas(@szText));
hCurrentWindow := GetNextWindow(hCurrentWindow, GW_HWNDNEXT);
End;

如果不好用可以用getforegroundwindow代替getwindow
longtusoft 2004-08-02
  • 打赏
  • 举报
回复
timer控件需要不断地检测,一些变化快的窗口很可能被漏检.
如果有一个基于消息变化,比如FOCUS变化的检测,可能会更好一些.
summerocean 2004-08-02
  • 打赏
  • 举报
回复
procedure TForm1.Timer1Timer(Sender: TObject);
var
hWndPt:HWND;
pBuf:PChar;
pt:TPoint;
nMax:DWORD;
begin
GetCursorPos(pt);
nMax:=1024;
hWndPt:=WindowFromPoint(pt);
if hWndPt<>0 then
begin
GetMem(pBuf,1024);
SendMessage(hWndPt,WM_GETTEXT,nMax,DWORD(pBuf));
Memo1.Lines.Add(string(pbuf));
FreeMem(pBuf);
end;
memo1.SelStart :=length(memo1.Text);
end;

添加一个memo和一个定时器,把鼠标放在非本窗体中,即可在memo中得到标题。
Goshawkx 2004-08-02
  • 打赏
  • 举报
回复
不对
当我的程序跑到后边, 前边是word/IE等其他程序是GetActiveWindow取不到窗口句柄

应该怎么办?
Goshawkx 2004-08-02
  • 打赏
  • 举报
回复
我很菜
请给出代码
谢谢
lwk_hlj 2004-08-02
  • 打赏
  • 举报
回复
上面说的对!
fjb5926 2004-08-02
  • 打赏
  • 举报
回复
可以用两个API函数:
GetActiveWindow得到当前活动窗体的句柄。
GetWindowText得到窗体的标题

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧