VB如何调用外部程序

VB如何调用外部程序,第1张

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 函数不能打开命名的程序,则会产生错误

使用Shell函数来调用外部的应用程序。

Shell 函数

执行一个可执行文件,返回一个 Variant

(Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。

Shell 函数示例

本示例使用 Shell 函数来完成一个用户指定的应用程序。

' 将第二个参数值设成 1,可让该程序以正常大小的窗口完成,并且拥有焦点。

Dim RetVal

RetVal = Shell("C:\WINDOWS\system32\CALCEXE", 1)   ' 完成Calculator。

累死

真TM难搞

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

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 LB_GETCOUNT = &H18B

Private Const LB_GETTEXT = &H189

Private Const LB_GETTEXTLEN = &H18A

Private Sub Command1_Click()

Dim hWindow As Long, hList As Long

hWindow = FindWindow("ThunderFormDC", "我的窗口标题")

'DebugPrint hWindow

If hWindow = 0 Then Exit Sub

hList = FindWindowEx(hWindow, 0, "ThunderListBox", vbNullString)

'DebugPrint hList

If hList = 0 Then Exit Sub

Dim ListCount As Long

ListCount = SendMessage(hList, LB_GETCOUNT, 0, 0)

'DebugPrint ListCount

If ListCount = 0 Then Exit Sub

Dim i As Long, ItemText As String, ItemLen As Long, AllText As String

For i = 0 To ListCount - 1

ItemLen = SendMessage(hList, LB_GETTEXTLEN, i, 0)

ItemText = Space(ItemLen)

SendMessage hList, LB_GETTEXT, i, ByVal ItemText

'DebugPrint ItemText

AllText = AllText & ItemText & vbCrLf

Next

Text1Text = AllText

End Sub

Private Sub Form_Load()

For i = 1 To 9

List1AddItem String(i, CStr(i))

Next

End Sub

窗体上放一个listbox一个textbox一个commandbutton

textbox的MultiLine设为True

原理是先用findwindow按窗口标题找到窗口句柄,然后用findwindoex找到该窗体的listbox控件句柄(必须是VB程序,类名不对找不到的),然后sendmesssage给它,把内容传回来

我给楼主害惨了,说让写成txt文件,我懒得写,那就按楼主次要求写进自己的listbox,这可晕死,我就是放了第二个listbox才搞到现在啊,findwindowex先找到第二个,里面空的,当然失败啦,晕死我了这一晚上

现在是写进textbox里了,其他部分自己改吧

===============

晕了晕了,记得把窗体caption改成“我的窗口标题”,因为是靠窗体名字找的嘛

你用时就要把代码中的“我的窗口标题”改成你要得到list内容的那个窗口的标题了

'获取控件的内容

Option Explicit

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_GETTEXT = &HD

Private Const WM_GETTEXTLENGTH = &HEPublic Function GetTextString(ByVal lyHwnd As Long) As String

Dim GetS As String

Dim SLen As Long

SLen = SendMessage(lyHwnd, WM_GETTEXTLENGTH, 0, 0)

If SLen = 0 Then Exit Function

SLen = SLen + 1

GetS = Space(SLen)

SLen = SendMessage(lyHwnd, WM_GETTEXT, SLen, ByVal GetS)

GetTextString = Left(GetS, SLen)

End Function 控件的句柄你应该能获取到,所以不说了

希望下面这个对您有所帮助:

利用vb *** 作一个外部程序的窗体上的按钮可以用到控制鼠标的API函数。

Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long

'而仅仅有这个函数是不够的,还需要定义一个type格式的自定义变量。定义为:

Private Type POINTAPI

X As Long

Y As Long

End Type

'它用于存放鼠标的位置(屏幕上的位置)。

'获得鼠标在屏幕上的位置要用到另一个函数:GetCursorPos,它的功能是获得屏幕上鼠标的坐标。

'它的声明如下:

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

举个例子,放置1个Command控件,并且复制它,粘贴,点确定生成一控件数组。

Private Sub Command1_Click(Index As Integer)

Dim msX, msY As Long

Dim Pos As POINTAPI

a = GetCursorPos(Pos)

Select Case Index

Case 0 'up

msY = PosY - 15

msX = PosX

Case 1 'left

msX = PosX - 15

msY = PosY

Case 2 'down

msY = PosY + 15

msX = PosX

Case 3 'right

msX = PosX + 15

msY = PosY

Case Else

Exit Sub

End Select

a = SetCursorPos(msX, msY) '这个是利用API移动鼠标

End Sub

mouse_event

声明

Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

说明

模拟一次鼠标事件

参数表

参数 类型及说明

dwFlags Long,下述标志的一个组合

MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元

MOUSEEVENTF_MOVE 移动鼠标

MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下

MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起

MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下

MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下

MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下

MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下

dx Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动

dy Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动

cButtons Long,未使用

dwExtraInfo Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序

注解

进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度

以上就是关于VB如何调用外部程序全部的内容,包括:VB如何调用外部程序、如何用VB调用外部的应用程序、用VB获取外部程序List1的item内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10107099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存