bisonal23
驱动牛犊
驱动牛犊
  • 注册日期2005-01-11
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望40点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2242回复:11

如何提取地址栏中url的内容??有分送

楼主#
更多 发布于:2005-03-13 14:53
知道一个窗口的句柄,如何提取该窗口中地址栏内的url内容呢?我是新手,就给这么多分吧。谢谢
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2005-03-13 15:41
getwindowtext
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-13 16:58
getwindowtext

先枚举窗口句柄,再用这个函数,因为工具栏也是窗口
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bisonal23
驱动牛犊
驱动牛犊
  • 注册日期2005-01-11
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望40点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-13 17:35
能不能再具体点楼上的?谢谢了~~~地址栏的句柄是什么呢
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-13 17:51
能不能再具体点楼上的?谢谢了~~~地址栏的句柄是什么呢

难道要把代码写出来 :P
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bisonal23
驱动牛犊
驱动牛犊
  • 注册日期2005-01-11
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望40点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-13 18:58
[quote难道要把代码写出来 :P [/quote]
偶是菜鸟~~是用win32汇编写的程序,但是功底还是弱弱的~~~
不是偶懒~偶这两天一直捣弄这个~
郁闷哦~~
另外楼上三位,已经给你们分了:)
就是少了点

[编辑 -  3/13/05 by  bisonal23]
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
6楼#
发布于:2005-03-13 19:44
你不是已经有句柄了吗?
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
bisonal23
驱动牛犊
驱动牛犊
  • 注册日期2005-01-11
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望40点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-13 21:13
The GetWindowText function copies the text of the specified window\'s title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied.我现在只能通过GetActiveWindow得到当前窗口的句柄,但是如何得到地址栏控件的句柄呢???希望高手不惜赐教~3ks
bisonal23
驱动牛犊
驱动牛犊
  • 注册日期2005-01-11
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望40点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-13 21:14
[quote]getwindowtext

先枚举窗口句柄,再用这个函数,因为工具栏也是窗口 [/quote]
工具栏是控件吧~~~

[编辑 -  3/13/05 by  bisonal23]
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-03-13 22:53
The GetWindowText function copies the text of the specified window\'s title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied.我现在只能通过GetActiveWindow得到当前窗口的句柄,但是如何得到地址栏控件的句柄呢???希望高手不惜赐教~3ks

使用FindWindowEx、EnumWindows等函数来得到
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
makefriend8
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2014-06-27
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望111点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-03-14 11:10
说一句。任何控件都是窗体
bisonal23
驱动牛犊
驱动牛犊
  • 注册日期2005-01-11
  • 最后登录2009-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望40点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-03-15 14:27
已经搞定!谢谢大家
把自己的汇编代码贴出来,以后也许有人用得上
szIE db \'IEFrame\',0
szEdit db \'Edit\',0
hwnd dd ?
chClassName db 100 dup(?)  
_JustWind proc ;获取当前活动窗口
invoke GetForegroundWindow mov hwnd, eax  
lea edi, chClassName
invoke GetClassName, hwnd, edi, 100  
lea edi, chClassName
invoke lstrcmp, edi, offset szIE  
.if eax == 0
invoke EnumChildWindows, hwnd, _GetProc, 0
.end if
_JustWind endp  
_GetProc proc _hwnd, _lParam
local @buf[128]:byte  
invoke GetClassName, _hwnd, addr @buf, 128
invoke lstrcmp, addr @buf, offset szEdit
.if eax == 0
invoke SendMessage, _hwnd, WM_GETTEXT, 128, addr @buf .if eax > 0 ;将buf内容进行处理
.end if
.end if
 _GetProc endp
************************************************************
下面还有我找到的vc代码和dephi的
vc第一个
//buff ist the handel to IE Windows
char buffer[256];
HWND child;
HWND ie;
if(ie = ::FindWindow(\"IEFrame\",buff))
{
if(child = ::FindWindowEx(ie,0,\"WorkerW\",0))
{
if(child = ::FindWindowEx(child,0,\"ReBarWindow32\",0))
{
if(child = ::FindWindowEx(child,0,\"ComboBoxEx32\",0))
{
::SendMessage(child,WM_GETTEXT,255,(long)&buffer[0]);
CString test = buffer; AfxMessageBox(test);
}
}
}
}
vc第二个
首先说一下IE窗口中,地址栏窗口到底在哪里?,IE窗口的类型是\"IEFRAME\",
IEFRAME
    ---WorkerW
       ---RebarWindow32
          ---ComboBoxEx32   (就在这里了,根据它就可以取得地址)
             ---ComboBox     (根据它是不能取得地址的,为什么,我也不清楚,还望高手指教)             ---EDIT      (显示地址的编辑框,也可以由它取得)
   ---WorkerW  (另一个子窗口,但是没有自己的子窗口)
   ---Shell DocObject View  (真正的客户区,WebBrowse所在地,下面有众多的子窗口,层次也比较多)
   ---状态条子窗口

因此只要我们找到了地址栏所在的窗口就可以把它的文本取出来了。
下面是我的例子,取遍所有的顶层窗口,得到后用AfxMessageBox()把它显示出来,该段程序直接添加在OnButton()就可以了。

void CListenDlg::OnButton2()
{
   HWND hIE=::FindWindow(\"IEFRAME\",0); //获得第一个IE窗口
   HWND hbegin=hIE; //记录下来
   bool bnext=false;
   while(hIE)
  {
     TCHAR bb[200];
     //获取标题
     ::SendMessage(hIE,WM_GETTEXT,200,(LPARAM)bb);
     CString ss(bb);
     //注意:explorer也是使用的IE窗口,也含有地址栏,判断是不是正在浏览网页的真正IE窗口
     if(ss.Find(\"Microsoft Internet Explorer\")>0)  
     //一般情况下这样判断是可以的,除非你的IE被别人恶意修改了,呵呵
     {
bool bfind=false;

HWND hSub=::FindWindowEx(hIE,0,_T(\"WorkerW\"),0);//查找子窗口
while(hSub && !bfind)
{
   HWND hss=::FindWindowEx(hSub,0,_T(\"ReBarWindow32\"),0);
   while(hss && !bfind)
  {
//找到包含地址栏的窗口,取地址
HWND hs3=::FindWindowEx(hss,0,\"ComboBoxEx32\",0);

if(hs3)
{
bfind=true;
::SendMessage(hs3,WM_GETTEXT,200,(LPARAM)bb);
//::GetWindowText(hs3,bb,200);
AfxMessageBox(bb);
break;
}
  }
hSub=::FindWindowEx(hIE,hSub,_T(\"RebarWindow32\"),0);
}
     }
     hIE=::GetNextWindow(hIE,GW_HWNDNEXT);//按照z-序向下找
     //如果已经到最下边了,从hbegin开始向上找
     if(!hIE && !bnext)
     {
bnext=true;
hIE=::GetNextWindow(hbegin,GW_HWNDPREV);
      }
   }
}


delphi

function EnumChildWindowsProc(hwnd: Integer; lparam: Longint): Boolean; stdcall;
var
buffer: array[0..255] of char;
begin
Result := True;
GetClassName(hwnd,buffer,256);
if StrPas(Buffer)=\'Edit\' then
begin
SendMessage(hwnd,WM_GETTEXT,256,lparam);
Result:=False;
end;
end;
//SendMessage+WM_GETTEXT
procedure TForm1.Button1Click(Sender: TObject);
var
hwnd: Integer;
buffer: array[0..255] of char;
begin
hwnd := FindWindow(\'CabinetWClass\',nil);
if hwnd< > 0 then
begin
EnumChildWindows(hwnd,@EnumChildWindowsProc,Integer(@buffer[0]));
Caption := StrPas(buffer);
end;
end;




…***********************************************
最后感谢驱动网上各位高手的指点:)
游客

返回顶部