5-8万年薪顶级嵌入式,京沪深就业地 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何将一个字符串的内容放到鼠标任意选择的编辑框里,比如:网页的表单等。

楼主xinxin()2002-03-08 21:10:36 在 VC/MFC / 基础类 提问

如题 问题点数:100、回复次数:29Top

1 楼neccui(PPC)回复于 2002-03-08 21:20:10 得分 0

取得该窗口的句柄,然后发送SetWindowText   消息就可以了吧。Top

2 楼xinxin()回复于 2002-03-08 21:26:03 得分 0

如何获取窗口句柄呢?Top

3 楼neccui(PPC)回复于 2002-03-08 21:31:28 得分 0

FindWindow,EnumWindowsTop

4 楼xinxin()回复于 2002-03-09 15:22:24 得分 0

还是不明白,问题是当前鼠标点击的edit   control是怎么确认其句柄呢?Top

5 楼prometheusphinx(白日梦)回复于 2002-03-11 16:23:25 得分 0

最简单的方法就是用keybd_event,当然,其前提条件就是这个edit   control要取得输入焦点。Top

6 楼prometheusphinx(白日梦)回复于 2002-03-11 16:25:47 得分 5

举个例子吧,  
  CString   ts   =   'sdfasdfsadfsadfsadfhdf)HGfdGH(+_eryer@$3#';  
   
  SHORT   Vk;  
  for   (int   j   =   0;   j   <   ts.GetLength();   j++)  
  {  
  Vk   =   VkKeyScan(ts[j]);  
  if   (Vk   >>   8   ==   1)  
  {  
  keybd_event(VK_SHIFT,   0,   0,   0);  
  keybd_event(Vk,   0,   0,   0);  
  keybd_event(Vk,   0,   KEYEVENTF_KEYUP,   0);  
  keybd_event(VK_SHIFT,   0,   KEYEVENTF_KEYUP,   0);  
  }  
  else  
  {  
  keybd_event(Vk,   0,   0,   0);  
  keybd_event(Vk,   0,   KEYEVENTF_KEYUP,   0);  
  }  
  }Top

7 楼xinxin()回复于 2002-03-15 19:21:54 得分 0

好象应该用鼠标事件来解决问题吧?  
  能告诉我捕捉鼠标事件后得到了字符串,但如果没有MessageBox()就不能将字符串送到我希望放的编辑框中的原因是什么?另外,为什么捕捉结束后想关闭捕捉功能会失败呢?Top

8 楼yongdu()回复于 2002-03-15 21:21:03 得分 5

对编辑框,它可以在进程间传递消息,所以  
  先SetCapture,再得到鼠标所指位置的句柄(有个api),再setwindowText  
  Top

9 楼wsa_socket()回复于 2002-03-15 21:39:00 得分 5

网页的表单不太好办吧,好像用到com接口Top

10 楼coffeefish(咖啡鱼)回复于 2002-03-15 21:43:33 得分 5

如果是ie的编辑框,以上方法是不行的  
  它用到com接口  
  不是想象的那么简单Top

11 楼xinxin()回复于 2002-03-17 20:40:42 得分 0

能SetCapture但不能ReleaseCapture是怎么会事呢?Top

12 楼rouser(流淌的小溪)回复于 2002-03-18 21:24:35 得分 5

WindowFromPoint  
  SetWindowText  
  Top

13 楼xinxin()回复于 2002-05-13 15:29:09 得分 0

至今为止,将前面的方法综合起来,还是不能完成我需要的功能。两个多月了没给大家分,实在是不好意思。但很希望能得到完整的解决方案后再结帖,希望能得到谅解。Top

14 楼kingzai(stevenzhu)回复于 2002-05-17 13:45:50 得分 10

这个可以分两种情况。  
  1。一种是普通的编辑框窗口,可以先得到它的窗口句柄后SendMessage(hwnd,  
  WM_SETTEXT,buf,0);  
  2.一种是IE窗口,可以先得到IhtmlDocument2指针,然后遍历表单元素后使用这个接口:  
  HRESULT   IHTMLElement::put_innerText(BSTR   v);  
  Top

15 楼xinxin()回复于 2002-05-18 15:03:24 得分 0

真不容易得到kingzai的回应。我急着解决的是IE的窗口,要想做的是一个网叶自动注册的功能。我没次上网都要用“融海Intranet登录系统”进行登陆,麻烦不说,没次敲键盘有可能让人看到密码,不太方便。就想做个自动注册的小程序,一运行就可以自动注册登陆(最好是自己打开规定的登陆网叶,自己添上注册名和密码最后又自动确认),不知道那位高手能指点迷津?Top

16 楼kingzai(stevenzhu)回复于 2002-05-18 19:49:35 得分 10

这个我可研究过,IE的登陆有好几种方法,一种是利用IE的COM接口,使用填充表单的方法。第二是使用WININET   POST表单的方法。这两种方法:可参考:  
  http://baizhuang.d2g.com/notes.asp?id=604  
  第三种嘛,可是我自己弄出来的,嘿嘿,直接敲入网址mail.sina.com.cn\logon.cgL&user=xxx&pwd=yyy&...类似这种其实可以直接登陆网站了,(要处理好密码的问题,否则从网址就可以看到了),具体你可以右键反击IE窗口查看网页的源文件就清楚了(主要处理FORM里的内容)Top

17 楼xinxin()回复于 2002-05-21 14:55:25 得分 0

我水平太低,第一种方法我一点也不明白。第二种的地址我暂时进不去。  
  请kingzai先按照第三种方法指点一下如何解决我的问题。因为登陆时地址栏里只有一个IP地址,不知道如何找到logon.cgi&user=...的格式问题,只好将整个代码拷贝过来,让kingzai给判断一下了。  
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title>融海Intranet登录系统</title>  
  <meta   name="GENERATOR"   content="Microsoft   FrontPage   3.0">  
  <meta   name="Microsoft   Theme"   content="none,   default">  
  <meta   name="Microsoft   Border"   content="none,   default">  
  </head>  
   
  <body   bgcolor="#008080">  
   
  <p   align="center"><font   face="宋体"   size="6"   color="#FFFF80"><strong>融海Intranet登录系统</strong></font>    
  </p>  
  <div   align="center"><center>  
   
  <table   border="5"   cellpadding="10"   cellspacing="30"   width="600"   height="330">  
      <tr>  
          <td><form   ACTION="/cgi-bin/scs_login.cgi"   METHOD="post">  
              <input   type="hidden"   name="language"   value="chinese"><div   align="center"><center><p>请输入您的帐号和密码</p>  
              </center></div><div   align="center"><center><p><font   color="#80FFFF">帐号:</font><input  
              TYPE="text"   size="10"   NAME="username">&nbsp;   <font   color="#80FFFF">密码:</font><input  
              TYPE="password"   size="10"   NAME="password">   </p>  
              </center></div><div   align="center"><center><p>请选择所需的操作</p>  
              </center></div><div   align="center"><center><p> <input   TYPE="radio"   NAME="radio"  
              VALUE="logon"   checked><font   color="#80FFFF">上网操作</font>   <input   TYPE="radio"  
              NAME="radio"   VALUE="logoff"><font   color="#80FFFF">下网操作</font>   <input   TYPE="radio"  
              NAME="radio"   VALUE="changepass"><font   color="#80FFFF">修改密码</font>   <input  
              TYPE="radio"   NAME="radio"   VALUE="sumdata"><font   color="#80FFFF">流量查询</font></p>  
              </center></div><div   align="center"><center><p><font   color="#80FFFF">新密码:</font><input  
              TYPE="password"   size="10"   NAME="newpassword">&nbsp;   <font   color="#80FFFF">新密码确认:</font><input  
              TYPE="password"   size="10"   NAME="newpassword2">   </p>  
              </center></div><div   align="center"><center><p><font   color="#80FFFF">请选择要查询的月份:</font><select  
              name="SearchMonth"   size="1">  
                  <option>   一月份   </option>  
                  <option>   二月份   </option>  
                  <option>   三月份   </option>  
                  <option>   四月份   </option>  
                  <option>   五月份   </option>  
                  <option>   六月份   </option>  
                  <option>   七月份   </option>  
                  <option>   八月份   </option>  
                  <option>   九月份   </option>  
                  <option>   十月份   </option>  
                  <option>   十一月份   </option>  
                  <option>   十二月份   </option>  
              </select>   </p>  
              </center></div><div   align="center"><center><p><input   TYPE="submit"   VALUE="     确认     ">   <input  
              TYPE="reset"   VALUE="     取消     ">   </p>  
              </center></div>  
          </form>  
          </td>  
      </tr>  
  </table>  
  </center></div>  
   
  <p   align="center"><font   color="#FF8000"><big><strong>北京融海诚信咨询有限公司</strong></big></font></p>  
   
  <p   align="center"><a   href="login-english.html">英文界面</a></p>  
  </body>  
  </html>  
   
   
  我用如下格式测试失败,找不到该页。http://10.1.0.5/cgi-bin/scs_login.cgi&username="myname"&password="mypassword"&radio="logon"  
  Top

18 楼kingzai(stevenzhu)回复于 2002-05-21 16:20:20 得分 25

你使用这种直接敲入URL的安全性太低。很容易就在网页中留下了痕迹。帐户和密码很容易就被看到了。我教你一种方法:  
  写一个ActiveX控件,把帐号和密码放到这个控件里,最后在网页中进行调用。  
  然后自己定制网页,把ocx给加载进去。  
  <form   method="post"   name="frm"   target="_blank">                                                
  <select   name=flag   size=1    
  <option   value="163net">163@163.net</option>  
  <input   name=user   type=hidden><input   name=pass   type=hidden>//根据163的网页源文件可查找到。  
  。。。。  
  <object   id="MailLogon"   classid="clsid:5506F257-467D-4847-8605-8F861AFBBEEA"  
                                                      codebase="MailLogon.OCX"   width="100"   height="40"   align="absmiddle">  
                  <param   name="_Version"   value="65536">  
                  <param   name="_ExtentX"   value="8467">  
                  <param   name="_ExtentY"   value="11924">  
                  <param   name="_StockProps"   value="0">  
              </object>  
                                                  </form>  
  例子:登陆163邮箱:  
  自己用javascript语句写一个函数:  
  function   enter_mail(){          
  if(frm.flag.value=="163net")  
  {                       frm.action="http://bjcgi.163.net/cgi/login.cgi";//163.net  
  if(frm.MailLogon.Logon("1"))  
  {  
  frm.user.value=frm.MailLogon.user;  
  frm.pass.value=frm.MailLogon.password;  
  }  
  frm.submit();  
  }  
  这种方法基本上可以应付大多数情况了。Top

19 楼xinxin()回复于 2002-05-24 17:19:36 得分 0

我还没消化完。Top

20 楼kingzai(stevenzhu)回复于 2002-05-24 17:28:43 得分 0

其实相对简单的就算第一种了,使用COM接口Top

21 楼xinxin()回复于 2002-05-25 17:13:24 得分 0

写一个ActiveX控件,把帐号和密码放到这个控件里,最后在网页中进行调用。  
  然后自己定制网页,把ocx给加载进去。  
   
  这句话我怎么也搞不明白。可能我得先找ActiveX方面的资料看看才能搞明白了。  
  我一次也没用过COM,顺便我也找资料看看再请教吧。  
  上面的地址看来是不通了,总进不去。Top

22 楼kingzai(stevenzhu)回复于 2002-05-25 17:42:56 得分 0

顺便说一句,以上方法都没有通用性。也就是说,登陆某个网站必须专门去编写代码。Top

23 楼xinxin()回复于 2002-05-26 15:04:14 得分 0

大体看了一下MSDN里的automation中的部分内容,英语水平太低,理解的还不理想。根据现在明白的那点感觉,kingzai提供的html语言就是activex   client部分,应该从这里调用activex   object。下面的语句好象是定义了一个object:  
  <object   id="MailLogon"   classid="clsid:5506F257-467D-4847-8605-8F861AFBBEEA"   codebase="MailLogon.OCX"   width="100"   height="40"   align="absmiddle">  
                  <param   name="_Version"   value="65536">  
                  <param   name="_ExtentX"   value="8467">  
                  <param   name="_ExtentY"   value="11924">  
                  <param   name="_StockProps"   value="0">  
  </object>  
   
  我不明白的地方是classid从哪里来?MailLogon.OCX放在什么地方?最后enter_mail()在什么时机被调用的?麻烦kingzai能大体指点一下。看来还是没有搞明白,还得再研究automation中的细节部分。  
  Top

24 楼wanlucky(博博)回复于 2002-05-26 15:47:39 得分 25

:对于Web页上的Edit控件的情况,如下  
   
  假设pHtmlView为指向当前Web页的视图指针  
  IHTMLDocument2   *   pDoc   =   NULL;  
  IHTMLElementCollection     *   pAllElem   =   NULL;  
  IHTMLElement   *pElem   =   NULL;  
  IHTMLInputTextElement   *   pInput   =   NULL;  
  VARIANT   name;  
  long   p;  
  BSTR   bstrSrc;  
   
   
  name.vt   =   VT_I4;  
  pDoc   =   (IHTMLDocument2*)(pHtmlView->GetHtmlDocument());  
  if(pDoc!=NULL)  
  {  
  pDoc->get_all(&pAllElem);  
  if(pAllElem!=NULL)  
  {  
  pAllElem->get_length(&p);  
  if(p>0)  
  {  
  //get   all   input  
  for(int   i=0;   i<p;   i++)  
  {  
                                                                                                                name.vt=VT_I4;  
  name.lVal   =   i;  
  if(pAllElem->item(name,   name,   (LPDISPATCH*)&pElem)==S_OK)  
  {  
  if(pElem   !=   NULL)  
  {  
  pElem->QueryInterface(&pInput);  
  if(pInput!=NULL)  
  {  
  pInput->get_name(&bstrSrc);  
  CString   s(bstrSrc);  
  SysFreeString(bstrSrc);  
   
  if   (s.Compare(name)==0)   //这个字符串就是网  
  //页上那个编辑框控件的name(也就是网页源码中的那个edit中的name),因为  
  //你要做的是自动注册,所以第一次你肯定先要手动注册,所以第一次可以  
  //用这个方法(也就是现在列出来的这段代码,只要把下面的put_value改成  
  //get_value,这样就得到了手动注册的内容content,以及相对应的edit控件  
  //的name,  
    pInput->put_value(content);  
  CString   value(bstrSrc);  
  SysFreeString(bstrSrc);  
   
   
  inputs++;  
   
  pInput->Release();  
  pInput   =   NULL;  
  }  
   
  pElem->Release();  
  pElem   =   NULL;  
  }  
  }  
  }  
  }  
  pAllElem->Release();  
   
  if(inputs>0)  
  AfxMessageBox(IDS_SAVEDFORM);  
  }  
  pDoc->Release();  
  }Top

25 楼xinxin()回复于 2002-05-27 12:05:58 得分 0

将博博的程序拷下来调试一下。不过还没调试就发现程序中用了CString,CString只能在MFC里使用,而我习惯使用SDK。感觉上HtmlView似乎也要在MFC里使用。Top

26 楼xinxin()回复于 2002-05-27 12:12:35 得分 0

另外,自己写的程序中的pHtmlView怎么指向外部的注册网页的?我非常不明白。我以前用前面网友说的WindowFromPoint,可鼠标点到注册网页后就失去了控制。Top

27 楼wanlucky(博博)回复于 2002-05-28 14:35:20 得分 5

你可以  
  对于上面你说的情况用SetCapture()来捕获鼠标就可以了.Top

28 楼xinxin()回复于 2002-05-28 15:33:47 得分 0

想起来了,我用过SetCapture(),但动作结束后释放不了。Top

29 楼xinxin()回复于 2002-05-31 13:59:45 得分 0

虽然没有给出完整的解决方案,而我这个笨脑袋也想不出怎么能整合出一个好用的,但我现在也不急着用了。给大家辛苦分吧。Top

相关问题

  • 怎样比较从表单输入的字符串和从数据库中取出的字符串?
  • 急急急!!!,获取鼠标点击的字符串,在线等
  • 请问有这样一个字符串,怎么将其放到字符串数组中
  • 怎么把字符串的值放到剪粘板中??
  • 将xml以xslt转换后存放到一个字符串中
  • C/S中数据库连接字符串放到哪里?
  • 如何判断从表单提交的数据是字符串还是数字?
  • 如何实现将表单内容存进一个字符串数组变量?
  • 如何实现将表单内容存进一个字符串数组变量?
  • 用form表单提交字符串问题?在线等待!谢谢!

关键词

  • .net
  • 密码
  • 选择
  • 融海
  • 操作

得分解答快速导航

  • 帖主:xinxin
  • prometheusphinx
  • yongdu
  • wsa_socket
  • coffeefish
  • rouser
  • kingzai
  • kingzai
  • kingzai
  • wanlucky
  • wanlucky

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
x 提问