可以实现的
相当于做一个简单的按键精灵,
先通过窗口名字找到这个窗口获取窗口的句柄,然后设置该全窗口的区域,向该窗口发送鼠标信息和键盘信息,就可以模拟点击按钮,选着下拉菜单,以及输入文本的功能。
以下是一个示例:
Private Declare Function FindWindow Lib "user32 " Alias "FindWindowA " (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32 " (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32 " Alias "GetWindowTextA " (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Const GW_HWNDNEXT = 2
Private Const GW_HWNDFIRST = 0
Private Declare Function SetWindowText Lib "user32 " Alias "SetWindowTextA " (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Const GW_CHILD = 5
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
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETTEXT = &HC
Private Const BN_CLICKED = 0
Private Const bm_click = &HF5
Private Const WM_SETFOCUS = &H7
Private Sub Command1_Click()
Dim h As Long, hChild As Long, i As Long
Dim str As String
’根据程序窗体的标题名字查找程序的句柄
h = FindWindow(vbNullString, "Test ") '得到程序
SendMessage hChild, WM_SETTEXT, 0, ByVal str ’设置文本
SendMessage h, WM_SETFOCUS, 0, 0 ‘设置焦点
SendMessage hChild, bm_click, 0, 0 '点击按钮
end sub
’获取指定的屏幕坐标上的控件的句柄
Private Sub PriCMouseHook_MouseMove(ByVal Button As Long, ByVal mX As Long, ByVal mY As Long)
'鼠标事件通知
Dim tmpStr As String 255, tmpI As Long, tmpJ As Long
Dim tmpStr2 As String
MeCaption = mX & ":" & mY '显示坐标
tmpI = WindowFromPoint(mX, mY)
labHwndCaption = tmpI '取得句柄
tmpJ = GetClassName(tmpI, tmpStr, Len(tmpStr) + 1) '获取类名
If tmpJ > 0 Then
labClassNameCaption = Mid(tmpStr, 1, tmpJ)
End If
If (Button And vbLeftButton) = 1 And InStr(1, labClassNameCaption, "listview", vbTextCompare) > 0 Then
'在这里判断下类名就不会有那个问题了,呵呵果然是注入的问题对别的类也去注入了:)
txtLVItemText = GetLVItemm(tmpI) '获取选中项内容
End If
End Sub
Shell 函数
执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
语法
Shell(pathname[,windowstyle])
Shell 函数的语法含有下面这些命名参数:
pathname 必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。
Windowstyle 可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。
windowstyle 命名参数有以下这些值:
常量 值 描述
vbHide 0 窗口被隐藏,且焦点会移到隐式窗口。
VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。
VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示。
VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。
VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。
VbMinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。
如果 Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误
public class Demo {
public static void main(String[] args) throws IOException {
String cmd = "notepadexe";//要打开的外部程序路径
Runtime runtime = RuntimegetRuntime();
Process p = runtimeexec(cmd);
}
}
以上为核心代码,自己可以把路径从外部传入,再打成一个可执行文件。
子程序名:系统_以管理员模式创建进程
在Vista/Win7及更高系统上,以管理员模式创建进程,成功返回真,失败返回假 警告:请勿放在 窗口创建完毕/首次被激活/死循环中
返回值类型:逻辑型
参数<1>的名称为“进程路径”,类型为“文本型”,允许接收空参数数据。注明:留空默认启动自身进程。
参数<2>的名称为“运行参数”,类型为“文本型”,允许接收空参数数据。注明:命令行参数。
1、直接给单元格添加程序的超链接
2、用VBA宏,代码如下:
Sub OpenEXE()Shell "C:\Program Files\WinRAR\WinRARexe", vbNormalFocus
End Sub
以上就是关于求用VB编程控制外部程序的可行性和详细思路步骤全部的内容,包括:求用VB编程控制外部程序的可行性和详细思路步骤、VB如何调用外部程序、如何用java运行外部程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)