O okmeet Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-22 #1 例如XP的系统托盘中有一个音量图标,鼠标放上去一秒钟左右,会弹出一个<br>标题为“音量”的小窗口,怎样获得它的句柄?最好能给出可行代码(后台)<br>顺便能解释一下弹出提示窗口的特点
M MilkRoad Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-22 #2 我没有用xp,但我想你可以用下面的代码是一下<br>function EnumFunc(Wnd: HWND; dd: longint): Bool; export; StdCall;<br>var<br> name,textchar;<br>begin<br> getmem(name,255);<br> getmem(text,255);<br> GetClassName(wnd,name,255);<br> GetWindowText(wnd,text,255);<br> if name='Edit' then<br> begin<br> //<br> end;<br> if name='Button' then <br> begin<br> //<br> end;<br> result:=true;<br> freemem(name);<br> freemem(text);<br>end;<br><br>function TMainFrm.FindDictWnd: HWND;<br>begin<br> EnumChildWindows(MainWnd,@EnumFunc,0);<br>end;
我没有用xp,但我想你可以用下面的代码是一下<br>function EnumFunc(Wnd: HWND; dd: longint): Bool; export; StdCall;<br>var<br> name,textchar;<br>begin<br> getmem(name,255);<br> getmem(text,255);<br> GetClassName(wnd,name,255);<br> GetWindowText(wnd,text,255);<br> if name='Edit' then<br> begin<br> //<br> end;<br> if name='Button' then <br> begin<br> //<br> end;<br> result:=true;<br> freemem(name);<br> freemem(text);<br>end;<br><br>function TMainFrm.FindDictWnd: HWND;<br>begin<br> EnumChildWindows(MainWnd,@EnumFunc,0);<br>end;
O okmeet Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-22 #4 我枚举了,但是无法得到这类tooltips_class32(winsight察得)类型的popup窗口的句柄
O okmeet Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-22 #5 目前的进展:<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
目前的进展:<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
M MilkRoad Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-26 #6 下面的代码可以枚举到win2000的点击音量托盘后弹出来的音量控制窗体。我想应该可以<br>枚举到你说的那个标题为“音量”的小窗口。<br><br>function EnumFunc(Wnd: HWND; dd: longint): Bool; export; StdCall;<br>var<br> name,textchar;<br>begin<br> getmem(name,255);<br> getmem(text,255);<br> GetClassName(wnd,name,255);<br> GetWindowText(wnd,text,255);<br> if (Pos('IME', name) = 0) then<br> frmFloat.Memo1.Lines.Add(name + ' ' + text);<br> result:=true;<br> freemem(name);<br> freemem(text);<br>end;<br><br>procedure TfrmFloat.Button2Click(Sender: TObject);<br>begin<br> memo1.Lines.Clear;<br> EnumWindows(@EnumFunc, 0);<br>end;
下面的代码可以枚举到win2000的点击音量托盘后弹出来的音量控制窗体。我想应该可以<br>枚举到你说的那个标题为“音量”的小窗口。<br><br>function EnumFunc(Wnd: HWND; dd: longint): Bool; export; StdCall;<br>var<br> name,textchar;<br>begin<br> getmem(name,255);<br> getmem(text,255);<br> GetClassName(wnd,name,255);<br> GetWindowText(wnd,text,255);<br> if (Pos('IME', name) = 0) then<br> frmFloat.Memo1.Lines.Add(name + ' ' + text);<br> result:=true;<br> freemem(name);<br> freemem(text);<br>end;<br><br>procedure TfrmFloat.Button2Click(Sender: TObject);<br>begin<br> memo1.Lines.Clear;<br> EnumWindows(@EnumFunc, 0);<br>end;
O okmeet Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-15 #7 这个问题已基本解决<br>方法是POPUP窗口一弹出就为TOP窗口,用GETTOPWINDOW函数来获<br>的可能的句柄,然后发GETTEXT消息取文本内容,与已知的文本<br>标题比较看是不是所要的窗口<br>这是我目前成功的方法<br>
这个问题已基本解决<br>方法是POPUP窗口一弹出就为TOP窗口,用GETTOPWINDOW函数来获<br>的可能的句柄,然后发GETTEXT消息取文本内容,与已知的文本<br>标题比较看是不是所要的窗口<br>这是我目前成功的方法<br>