我正在尝试实现一个简单的CBT Hook:找出哪些应用程序有效多长时间? Active表示“用户正在与应用程序窗口进行交互”。
例如,用户在MSWORD上工作或用户在Youtube上在线浏览。
我们需要找出以下内容:
我的方法是:
SetWindowsHookEx()
WH_CBT
CBTProcCallBack()
中,我检查了代码HCBT_ACTIVATE
。我得到了windows,应用程序和exe细节但是,并非所有活动窗口都被捕获。
我的方法是正确的还是我错了?
答案 0 :(得分:0)
这是一个简单的解决方案,可以找出用户已打开的所有应用程序。例如,如果当前前景窗口已更改,则必须检查循环。尝试在计时器事件中执行此操作,如果前一个窗口名称与当前窗口名称不同,则可以轻松计算用户使用此应用程序的时间。
function ActiveCaption: string;
var
Handle: THandle;
Len: LongInt;
Title: string;
begin
result := '';
Handle := GetForegroundWindow;
if Handle <> 0 then
begin
Len := GetWindowTextLength(Handle) + 1;
SetLength(Title, Len);
GetWindowText(Handle, PChar(Title), Len);
ActiveCaption := TrimRight(Title);
end;
end;