Option Explicit
Private Declare Function GetMenu Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetMenuItemID Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSubMenu Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long'定义延迟
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'模拟键盘输入声明
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)Private Const WM_COMMAND As Long = &H111
Private Sub Command1_Click()
Dim h1 As Long, h2 As Long, id As Long
Dim h3 As Long, OK As Long
h1 = FindWindow(vbNullString, "无标题 - 记事本") '记事本的句柄
Debug.Print h1
h2 = GetMenu(h1)
h2 = GetSubMenu(h2, 0) '文件"菜单的句柄 改变后面的0,就可以得到不同菜单的句柄
id = GetMenuItemID(h2, 3) '子菜單"另保存""的ID
SendMessage h1, WM_COMMAND, id, ByVal 0&
'延迟3秒
Call Sleep(3000)
'控制弹出窗口
'h3 = FindWindow(vbNullString, "记事本") '记事本弹出窗口的句柄
'OK = GetMenuItemID(h3, 0)
'SendMessage h3, WM_COMMAND, OK, ByVal 0&
h3 = FindWindow(vbNullString, "另存为") '记事本弹出窗口“另存为”的句柄
'SendMessage h3, "1", , ByVal 0&
Const VK_Tab = &H9
Const VK_Return = &H13
Call keybd_event(VK_Tab, 0, 0, 0) '模拟键盘输入Tab
Sleep 50 '两次相同按键的模拟输入间要人工延迟
Call keybd_event(VK_Tab, 0, 0, 0) '模拟键盘输入Tab
Call keybd_event(VK_Return, 0, 0, 0) '模拟键盘输入Enter
End Sub我用上面这段代码,希望实现一下功能:(在已经手动打开一个未命名的记事本文档的前提下)
1.通过单击Command1按钮能够自动选中“未命名-记事本”程序的“程序”菜单的“另存为”选项;(已实现)
2.在弹出的“另存为”窗口中自动填入某一文件名(可以是流水号)然后保存(仍未完成);
请问:
在VB中该如何控制其它程序的弹出窗口呢?
Private Declare Function GetMenu Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetMenuItemID Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSubMenu Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long'定义延迟
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'模拟键盘输入声明
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)Private Const WM_COMMAND As Long = &H111
Private Sub Command1_Click()
Dim h1 As Long, h2 As Long, id As Long
Dim h3 As Long, OK As Long
h1 = FindWindow(vbNullString, "无标题 - 记事本") '记事本的句柄
Debug.Print h1
h2 = GetMenu(h1)
h2 = GetSubMenu(h2, 0) '文件"菜单的句柄 改变后面的0,就可以得到不同菜单的句柄
id = GetMenuItemID(h2, 3) '子菜單"另保存""的ID
SendMessage h1, WM_COMMAND, id, ByVal 0&
'延迟3秒
Call Sleep(3000)
'控制弹出窗口
'h3 = FindWindow(vbNullString, "记事本") '记事本弹出窗口的句柄
'OK = GetMenuItemID(h3, 0)
'SendMessage h3, WM_COMMAND, OK, ByVal 0&
h3 = FindWindow(vbNullString, "另存为") '记事本弹出窗口“另存为”的句柄
'SendMessage h3, "1", , ByVal 0&
Const VK_Tab = &H9
Const VK_Return = &H13
Call keybd_event(VK_Tab, 0, 0, 0) '模拟键盘输入Tab
Sleep 50 '两次相同按键的模拟输入间要人工延迟
Call keybd_event(VK_Tab, 0, 0, 0) '模拟键盘输入Tab
Call keybd_event(VK_Return, 0, 0, 0) '模拟键盘输入Enter
End Sub我用上面这段代码,希望实现一下功能:(在已经手动打开一个未命名的记事本文档的前提下)
1.通过单击Command1按钮能够自动选中“未命名-记事本”程序的“程序”菜单的“另存为”选项;(已实现)
2.在弹出的“另存为”窗口中自动填入某一文件名(可以是流水号)然后保存(仍未完成);
请问:
在VB中该如何控制其它程序的弹出窗口呢?
解决方案 »
- 變量Count2不能實現增加
- 怎么更改应用程序exe的图标啊?
- 赚分...
- 有没有这样的控件,通过X,Y,Z三个坐标定位一个点,再对这个点赋值,
- 请帮忙看看我的代码,求好心人帮忙
- 各位高手,有谁知道怎么把本地数据库里的数据反映到另一个机子的窗体上去.(注意,窗体不能联在本地数据库.)
- 头疼死了,制作的安装程序安装后不能完全实现功能,请各位大虾指点迷津!100分
- 目录树怎么打开本地文件?
- 有没有谁有vb套打问题的代码或或翻译一下Dephi程序
- 如何在VB的数据(报表)设计器中运用编程代码实现连接?
- 下面一段关于MAPI 控件的使用,为什么MAPIMessages1.AttachmentCount总是返回0 ?哪位大侠帮我分析一下,谢谢
- vb6怎样连接SQL SERVER数据库
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long【别名】
FindWindowExA【说明】
在窗口列表中寻找与指定条件相符的第一个子窗口 【返回值】
Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 【参数表】
hWnd1 ---------- Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) hWnd2 ---------- Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索 lpsz1 ---------- String,欲搜索的类名。零表示忽略 lpsz2 ---------- String,欲搜索的类名。零表示忽略