在写个监控统计的程序,需要在获知用户使用某一功能后,立即获取当前窗口的标题,取出标题中含有的正在操作的文件名称(每次操作的都不相同,但后面的内容是固定的)。程序使用了GetForegroundWindow和GetWindowText函数。var
hCurrentWindow: THandle;
WindowTitle: array[0..254] of Char;
sName :string;
iPos :integer;
begin
hCurrentWindow := GetForegroundWindow; //找出当前操作系统中活动的第一个窗口 if GetWindowText(hCurrentWindow, @WindowTitle, 255) > 0 then
//如果找到窗口的标题
begin
if Pos('tmp - 北京',WindowTitle) > 0 then
//如果找到的正是目标窗口
begin
iPos := Pos('tmp',WindowTitle);
if iPos > 0 then
sName := Copy(WindowTitle, 1, iPos + 2);
end;
memo1.Lines.Add('文件名:' + sName);
end;
end;
此段代码在windows2000,xp都可以顺利获取,而在98、me下是获取不到内容的。我查过GetForegroundWindow和GetWindowText函数在98下面也是有的,但不知为什么会取不出标题。因没装98,也就没在98下作开发测试,只能在客户机上测试,比较麻烦。如果不行只能用虚拟机上装个98来测了。
hCurrentWindow: THandle;
WindowTitle: array[0..254] of Char;
sName :string;
iPos :integer;
begin
hCurrentWindow := GetForegroundWindow; //找出当前操作系统中活动的第一个窗口 if GetWindowText(hCurrentWindow, @WindowTitle, 255) > 0 then
//如果找到窗口的标题
begin
if Pos('tmp - 北京',WindowTitle) > 0 then
//如果找到的正是目标窗口
begin
iPos := Pos('tmp',WindowTitle);
if iPos > 0 then
sName := Copy(WindowTitle, 1, iPos + 2);
end;
memo1.Lines.Add('文件名:' + sName);
end;
end;
此段代码在windows2000,xp都可以顺利获取,而在98、me下是获取不到内容的。我查过GetForegroundWindow和GetWindowText函数在98下面也是有的,但不知为什么会取不出标题。因没装98,也就没在98下作开发测试,只能在客户机上测试,比较麻烦。如果不行只能用虚拟机上装个98来测了。
if Pos('tmp - 北京',WindowTitle) > 0 then 这一句是检查当前窗口是否是想要是窗口,'tmp - 北京'是该程序独有的特征,其格式可以是a.tmp - 北京XXXXXX,b.tmp - 北京XXXXXXX。而接下来的Pos('tmp',WindowTitle)是定位到'tmp'上,然后把a.tmp都取出来,这才是想要的东西。不过现在问题解决了,并不是win98的取不了标题,只能怪自己太粗心,:(我在虚拟机上装了win98,运行该程序,发现在win98下,该程序的标题中文件名的扩展名都是大写 'TMP'。如a.TMP,b.TMP,而在2000、xp时,都是a.tmp,b.tmp。可能是win98的机制造成的吧。现在把标题都转成大写或小写再检查就可以了。谢谢楼上热心的两位。