如何获取对话框句柄?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

转载于:https://www.cnblogs.com/chenbg2001/archive/2009/01/11/1373762.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值