用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的不到句柄,请问大家怎样才能获得该对话框的句柄?
answer:
find title=""的对话框
//////////////////////////////////////
如何获得一对话框里text,与按钮的句柄,并对按钮发送点击动作.
Public Declare Function GetDlgItem Lib "user32" Alias "GetDlgItem" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
该函数检索指定的对话框中的控件句柄
如果函数调用成功则返回值为给定控件的窗口句柄。如果函数调用失败,则返回值为NULL,表示为一个无效的对话框句柄或一个不存在的控件。若想获得更多错误信息,请调用GetLastError函数。
hDlg:标识含有控件的对话框。
nlDDlgltem:指定将被检索的控件的ID。
可以通过使用任何父子窗口对来使用GetDlgltem函数,而不仅只是对话框。只要hDlg参数指定一个父窗口,且子窗口有一个独立的标识符(象CreateWindow中hMenu参数指定的或创建子窗口的CreateWindowEx指定的那样),GetDlgltem就会返回一个有效的句柄到子窗口。
///////////////////////////////////////
怎样获得当前活动对话框的句柄?
GetActiveWindow(),获取当前线程负责处理消息的窗口
GetForegroundWindow(), 获取全局的输入焦点窗口。就是你键入的字符出现在的那个窗口。
对话框也是窗口,一样方法。
///////////////////////////////////
知道一个对话框上的某个edit控件的句柄,想知道该对话框的句柄,可以怎么做呢?
本来想用GetWindow获取edit控件的GW_OWNER窗口的句柄就是该对话框,可是发现,edit控件的父窗口 为NULL
还能有什么别的方法吗?
该对话框是通过向导创建的一个基于对话框的MFC程序,然后在对话框中用资源管理器拖放了几个EDIT
控件上去。其他什么也没有做。
使用spy++,发现该对话框有2个子窗口,即系统自动创建的“OK”和“CANCEL”按钮,而我拖放上
去的EDIT控件并没有成为该对话框的子窗口。
有什么办法可以获得对话框的句柄呢?
也就是说,有没有类似GetDlgItem反过来,由ITEM获取dlg的方法?
GetParent
CWnd* wnd = (CWnd*)m_edit1.GetParent();
wnd->m_hWnd //句柄
////////////////////////////////////////////////