问题太奇怪了,怎么会有这样的需求。遍历窗口, 判断窗口类型。 for i:=0 to Screen.FormCount-1 do screen.Forms[i].classtype得到窗口名: screen.forms[i].caption
var s:string;//窗口标题 FindWindow(nil,s);
不是这个意思!是这样的:在程序运行过程中,当用户打开一个窗口时就触发一个事件,得到打开的窗口名及标题。 这个事件要自动触发,就像 procedure Tmdi.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin if Msg.message = WM_CREATE then begin showmessage('打开了一个窗口'); end; end; 中的处理代码一样!!但是上面的代码不行,不能实现。
function GetActiveWindowText:string; var buffer:array[1..1000] of char; handler:hwnd; begin handler:=GetActiveWindow; GetWindowText(handler,@buffer,1000); result:=Strpas(@Buffer); end;
Application.OnIdle=...; 这样可以吗?
哦,有些象有的个别论坛啊,可是你说的让我联想起了远程控制,或者是hook...
在你的主程序里边加入一个timer 监测: i:=Screen.FormCount; if Screen.FormCount+1 了 就findwindow(nil,s); 得到窗口名及标题,或者窗口类别,保存到文件或者主程序里边了,这样可以了吗?
Form2.OnShow(..) begin ShowMessage(..); end;这个方法可不是很好,我这里没有delphi啊,不能帮你写了,不行就自定义一个消息处理吧,看看别的高手有没有好办法了
Form2.OnShow(..) begin GetWindowText(...); MainForm.Memo.lines.Add(..); end; 是否可以?楼上的几个朋友写的函数也不错的,你可以借鉴一下了
procedure Tmdi.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);//这个消息可能要写到主程序里边,TMainForm.Application... begin if Msg.message = WM_CREATE then begin Handled:=true;//应该加到这里吧,表示处理了消息了 showmessage('打开了一个窗口'); end; end; 你的代码应该可以的啊,没有处理Handled啊!!!!!!!!!!!!!
for i:=0 to Screen.FormCount-1 do
screen.Forms[i].classtype得到窗口名:
screen.forms[i].caption
s:string;//窗口标题
FindWindow(nil,s);
procedure Tmdi.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message = WM_CREATE then
begin
showmessage('打开了一个窗口');
end;
end;
中的处理代码一样!!但是上面的代码不行,不能实现。
var buffer:array[1..1000] of char;
handler:hwnd;
begin
handler:=GetActiveWindow;
GetWindowText(handler,@buffer,1000);
result:=Strpas(@Buffer);
end;
这样可以吗?
监测:
i:=Screen.FormCount;
if Screen.FormCount+1 了
就findwindow(nil,s);
得到窗口名及标题,或者窗口类别,保存到文件或者主程序里边了,这样可以了吗?
"当用户打开一个窗口时就触发一个事件,得到打开的窗口名及标题",然后或者之前你的程序要做什么?是要接收信息还是保存?看来好像是个教学软件啊?得到之后就直接showmessage('标题')出来就好了!怎么做,就类似日志功能吧!
begin
ShowMessage(..);
end;这个方法可不是很好,我这里没有delphi啊,不能帮你写了,不行就自定义一个消息处理吧,看看别的高手有没有好办法了
begin
GetWindowText(...);
MainForm.Memo.lines.Add(..);
end;
是否可以?楼上的几个朋友写的函数也不错的,你可以借鉴一下了
var Handled: Boolean);//这个消息可能要写到主程序里边,TMainForm.Application...
begin
if Msg.message = WM_CREATE then
begin
Handled:=true;//应该加到这里吧,表示处理了消息了
showmessage('打开了一个窗口'); end;
end;
你的代码应该可以的啊,没有处理Handled啊!!!!!!!!!!!!!