我想实现这个功能:
在应用程序中不用Timer控件,用消息处理机制来自动判断当前我打开的是哪个窗口,要求获得它的标题或是窗口名,怎么做呀?

解决方案 »

  1.   

    问题太奇怪了,怎么会有这样的需求。遍历窗口, 判断窗口类型。
    for i:=0 to Screen.FormCount-1 do
        screen.Forms[i].classtype得到窗口名:
     screen.forms[i].caption
      

  2.   

    var
      s:string;//窗口标题
    FindWindow(nil,s);
      

  3.   

    不是这个意思!是这样的:在程序运行过程中,当用户打开一个窗口时就触发一个事件,得到打开的窗口名及标题。  这个事件要自动触发,就像
    procedure Tmdi.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
      if Msg.message = WM_CREATE then 
      begin
        showmessage('打开了一个窗口');
      end;
    end;
    中的处理代码一样!!但是上面的代码不行,不能实现。
      

  4.   

    function GetActiveWindowText:string;
    var buffer:array[1..1000] of char;
    handler:hwnd;
    begin
     handler:=GetActiveWindow;
     GetWindowText(handler,@buffer,1000);
     result:=Strpas(@Buffer);
    end;
      

  5.   

    Application.OnIdle=...;
    这样可以吗?
      

  6.   

    哦,有些象有的个别论坛啊,可是你说的让我联想起了远程控制,或者是hook...
      

  7.   

    在你的主程序里边加入一个timer
    监测:
    i:=Screen.FormCount;
    if Screen.FormCount+1 了
    就findwindow(nil,s);
    得到窗口名及标题,或者窗口类别,保存到文件或者主程序里边了,这样可以了吗?
      

  8.   

    TO:rouqing(*柔情似水&冷酷到底&长发飘飘*) 
    "当用户打开一个窗口时就触发一个事件,得到打开的窗口名及标题",然后或者之前你的程序要做什么?是要接收信息还是保存?看来好像是个教学软件啊?得到之后就直接showmessage('标题')出来就好了!怎么做,就类似日志功能吧!
      

  9.   

    Form2.OnShow(..)
    begin
      ShowMessage(..);
    end;这个方法可不是很好,我这里没有delphi啊,不能帮你写了,不行就自定义一个消息处理吧,看看别的高手有没有好办法了
      

  10.   

    Form2.OnShow(..)
    begin
      GetWindowText(...);
      MainForm.Memo.lines.Add(..);
    end;
    是否可以?楼上的几个朋友写的函数也不错的,你可以借鉴一下了
      

  11.   

    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啊!!!!!!!!!!!!!
      

  12.   

    TO:rouqing(*柔情似水&冷酷到底&长发飘飘*) 我再照你写的试试看,谢谢你,谢谢大家!!