zoukankan      html  css  js  c++  java
  • 如何获取对话框句柄?spy++

      用SPY++观察:  
      这是个MDI程序,最外层MDI主框架的窗口名称已知-“MDIMainFrame”   ---A  
      然后,其下有个   Class   Name   为:MDIClient   的窗口   -----------B  
      然后,其下有个   标题为:“hSDIClient”的窗口     ------------C  
      然后,其下有个   Class   Name   为:AfxFrameOrView70   的窗口     -------D  
      然后,其下有个   Class   Name   为:SysListView32   的窗口   ---------E   
        
     

      hTemp=FindWindowEx(GetDesktopWindow(),0,"MDIMainFrame","");  
      hTemp=FindWindowEx(hTemp,0,"MDIClient","");  
      hTemp=FindWindowEx(hTemp,0,NULL,"hSDIClient");  
      hTemp=FindWindowEx(hTemp,0,"AfxFrameOrView70","");  
      hTemp=FindWindowEx(hTemp,0,"SysListView32","");  

      在VB6中如何自动获取“另存为”对话框句柄?

    Private   Declare   Function   FindWindow   Lib   "user32"   Alias   "FindWindowA"   (ByVal   lpClassName   As   String,   ByVal   lpWindowName   As   String)   As   Long  
      'Private   Declare   Function   ShowWindow   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   nCmdShow   As   Long)   As   Long  
      Private   Declare   Function   SetWindowPos   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   hWndInsertAfter   As   Long,   ByVal   X   As   Long,   ByVal   Y   As   Long,   ByVal   cx   As   Long,   ByVal   cy   As   Long,   ByVal   wFlags   As   Long)   As   Long  
       
      Private   Const   HWND_BOTTOM   =   1  
      Private   Const   SWP_SHOWWINDOW   =   &H40  
      Private   Const   SWP_HIDEWINDOW   =   &H80  
       
       
      Private   Sub   Command1_Click()  
              Dim   h1,   h2,   Point   As   Long  
                       
              Shell   "NotePad",   vbNormalFocus             '打开记事本  
              h1   =   FindWindow("Notepad",   "无标题   -   记事本")  
              'ShowWindow   h1,   0                                         '隐藏记事本窗口  
              SetWindowPos   h1,   HWND_BOTTOM,   -100,   -100,   0,   0,   SWP_HIDEWINDOW  
               
              SendKeys   "PowerBASIC中国",   True           '键入一些字符  
              SendKeys   "%FA",   True                                 '打开另存为对话框  
               
              h2   =   FindWindow("#32770",   "另存为")   '获取另存为对话框句柄  
              'ShowWindow   h2,   0                                         '隐藏另存为对话框  
              SetWindowPos   h2,   HWND_BOTTOM,   -100,   -100,   0,   0,   SWP_HIDEWINDOW  
               
              SendKeys   "C:\PowerBASIC.txt",   True     '输入文件名  
              SendKeys   "{TAB}{TAB}",   True                   '将焦点定位到保存按钮上  
              SendKeys   "{ENTER}",   True                         '回车  
              SendKeys   "%(FX)",   True                             '退出记事本  
              MsgBox   "您的文件已经保存到   C:\PowerBASIC.txt   中!"  
               
      End   Sub  

    问题:sendmessage需要对话框句柄,但是对话框没有title,并且还是隐藏的,用Findwindow的不到句柄,请问大家怎样才能获得该对话框的句柄?
    ;Wn)Gb!S O!B{0answer:水利博客,yW]s H*[

    *{H T ]0|U5W @0find title=""的对话框水利博客 ~i uk)Aaf'd3Y

    (x}:A[ B/v0[(o.P,\(T0//////////////////////////////////////

    M"S5TB8N(a`+M4[0 水利博客X*YPKh7}iSw

    如何获得一对话框里text,与按钮的句柄,并对按钮发送点击动作.水利博客;b']$X,t2N(e,{#OC e

    水利博客9D]m`9FO

    Public  Declare  Function  GetDlgItem  Lib  "user32"  Alias  "GetDlgItem"  (ByVal  hDlg  As  Long,  ByVal  nIDDlgItem  As  Long)  As  Long  
    `'S i,x1cCD0{0 水利博客1^:`/|~O
    该函数检索指定的对话框中的控件句柄  
    /}4EM5Ul.b0 水利博客gW.?7bxSG+|
    如果函数调用成功则返回值为给定控件的窗口句柄。如果函数调用失败,则返回值为NULL,表示为一个无效的对话框句柄或一个不存在的控件。若想获得更多错误信息,请调用GetLastError函数。  水利博客gRY%g{;B
     
    Mi?Ih"U? HYL0o)W0hDlg:标识含有控件的对话框。  
    Qx%E,w8f;S[_r0nlDDlgltem:指定将被检索的控件的ID。

    )bu!du#J7N?0 水利博客5iTJ1`d4n8G6X)]*S

    可以通过使用任何父子窗口对来使用GetDlgltem函数,而不仅只是对话框。只要hDlg参数指定一个父窗口,且子窗口有一个独立的标识符(象CreateWindow中hMenu参数指定的或创建子窗口的CreateWindowEx指定的那样),GetDlgltem就会返回一个有效的句柄到子窗口。  水利博客I&fj_q*g

    水利博客r?lpM

    ///////////////////////////////////////水利博客 ba|q&TN8[6e

    B5Tw0zU5\7` vV0怎样获得当前活动对话框的句柄? 水利博客 H tUK-Jb

    水利博客c8Y&a'aBRl

    水利博客)I+[\4lN7d@
    GetActiveWindow(),获取当前线程负责处理消息的窗口
    ?b&K/rE^3gua[[BGx0GetForegroundWindow(), 获取全局的输入焦点窗口。就是你键入的字符出现在的那个窗口。
    'D2dW)Cc\ I*L]0对话框也是窗口,一样方法。 水利博客6ye#whUVAD

    水利博客FoXQ!V0` V

    ///////////////////////////////////

    P(Lx7Yq8Q0

    QL-s&I6tA%hx0知道一个对话框上的某个edit控件的句柄,想知道该对话框的句柄,可以怎么做呢?

    mCAX5Chla0 水利博客!Hp3XS#J E8YT1p7i

    本来想用GetWindow获取edit控件的GW_OWNER窗口的句柄就是该对话框,可是发现,edit控件的父窗口   为NULL
    Zo'@9e+BSz0还能有什么别的方法吗?水利博客e-X~F'cC$B}E

    Ud"I"z,TV0N6B0U0
    )r9t$h |NZ#B7{n0该对话框是通过向导创建的一个基于对话框的MFC程序,然后在对话框中用资源管理器拖放了几个EDIT

    q5T3VjzKD s`0 水利博客u t$N;{^ mq;] s)?B

    控件上去。其他什么也没有做。水利博客.U]N"Vv`-zxI

    水利博客:qI cdi

    使用spy++,发现该对话框有2个子窗口,即系统自动创建的“OK”和“CANCEL”按钮,而我拖放上水利博客%T6b(Y~[ Iu:_

    水利博客-uT U#x&c;XI

    去的EDIT控件并没有成为该对话框的子窗口。

    qF e.J:H0 水利博客1I }7~{:{ dQ!?

    有什么办法可以获得对话框的句柄呢?
    M#EPze#a]0 水利博客q*p F|7WkH

    水利博客/h dMx-h#kM)EG

    也就是说,有没有类似GetDlgItem反过来,由ITEM获取dlg的方法?
    -b!o4p6tu0tv PZ0 水利博客U#H'F*Q`I
     
    DEH0fO Z0GetParent
    ~m:_G%k"V)CQ;B0 水利博客;h/aw+[G\.@VH
    CWnd* wnd = (CWnd*)m_edit1.GetParent();
    %S^+U(]5Q0wnd->m_hWnd //句柄

    -D X.V3i#YSaD[0 水利博客9C'T$o%?!xJ

    ////////////////////////////////////////////////水利博客@kK-@;]CM*M A&N/wf

    h2V D2zg?p0 

    !Fq j)X9f&Ye%Yk"`0

  • 相关阅读:
    String和StringBuilder和StringBuffer
    多态
    组件
    反向代理
    基础知识
    reflection
    v-model 与 v-bind:model
    tomcat端口占用问题
    socket
    简要概括内存机制
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1373762.html
Copyright © 2011-2022 走看看