拿分!怎样获得系统托盘的TOOLTIPS提示弹出窗口的句柄(100分)

  • 主题发起人 主题发起人 okmeet
  • 开始时间 开始时间
O

okmeet

Unregistered / Unconfirmed
GUEST, unregistred user!
例如XP的系统托盘中有一个音量图标,鼠标放上去一秒钟左右,会弹出一个<br>标题为“音量”的小窗口,怎样获得它的句柄?最好能给出可行代码(后台)<br>顺便能解释一下弹出提示窗口的特点
 
我没有用xp,但我想你可以用下面的代码是一下<br>function EnumFunc(Wnd: HWND; dd: longint): Bool; export; StdCall;<br>var<br>&nbsp; name,text:pchar;<br>begin<br>&nbsp; getmem(name,255);<br>&nbsp; getmem(text,255);<br>&nbsp; GetClassName(wnd,name,255);<br>&nbsp; GetWindowText(wnd,text,255);<br>&nbsp; if name='Edit' then<br>&nbsp; begin<br>&nbsp; &nbsp; //<br>&nbsp; end;<br>&nbsp; if name='Button' then <br>&nbsp; begin<br>&nbsp; &nbsp; //<br>&nbsp; end;<br>&nbsp; result:=true;<br>&nbsp; freemem(name);<br>&nbsp; freemem(text);<br>end;<br><br>function TMainFrm.FindDictWnd: HWND;<br>begin<br>&nbsp; EnumChildWindows(MainWnd,@EnumFunc,0);<br>end;
 
我枚举了,但是无法得到这类tooltips_class32(winsight察得)类型的popup窗口的句柄
 
目前的进展:<br>1。WINSIGHT可以查出POPUP提示窗口的TEXT来,但是无法用FINDWINDOW()、<br>FINDWINDOWEX()得到句柄;<br>SPY可以显示TOOLTIPS_CLASS32隶属于DESKTOP的,而WINSIGHT则显示为<br>SHELL_TRAYWND的POPUP子窗口,经枚举DESKTOP,可以发现TOOLTIPS_CLASS32<br>应是隶属于DESKTOP的,但是SPY无法显示窗口的TEXT,故无法用FINDWINDOW()、<br>FINDWINDOWEX()得到句柄;<br>真是奇怪,WINSIGHT怎么会犯这样的错误<br>2。正在试消息和WINDOWFROMPOINT<br>感谢MilkRoad
 
下面的代码可以枚举到win2000的点击音量托盘后弹出来的音量控制窗体。我想应该可以<br>枚举到你说的那个标题为“音量”的小窗口。<br><br>function EnumFunc(Wnd: HWND; dd: longint): Bool; export; StdCall;<br>var<br>&nbsp; name,text:pchar;<br>begin<br>&nbsp; getmem(name,255);<br>&nbsp; getmem(text,255);<br>&nbsp; GetClassName(wnd,name,255);<br>&nbsp; GetWindowText(wnd,text,255);<br>&nbsp; if (Pos('IME', name) = 0) then<br>&nbsp; &nbsp; &nbsp; &nbsp;frmFloat.Memo1.Lines.Add(name + ' &nbsp; ' + text);<br>&nbsp; result:=true;<br>&nbsp; freemem(name);<br>&nbsp; freemem(text);<br>end;<br><br>procedure TfrmFloat.Button2Click(Sender: TObject);<br>begin<br>&nbsp; memo1.Lines.Clear;<br>&nbsp; EnumWindows(@EnumFunc, 0);<br>end;
 
这个问题已基本解决<br>方法是POPUP窗口一弹出就为TOP窗口,用GETTOPWINDOW函数来获<br>的可能的句柄,然后发GETTEXT消息取文本内容,与已知的文本<br>标题比较看是不是所要的窗口<br>这是我目前成功的方法<br>
 
后退
顶部