在vb中如何调用windows本身的程序,

hinewly 2004-12-28 09:35:18
在vb中如何调用windows本身的程序,如ping或者telnet

并把结果输入到一个文件中!

有朋友说调用用shell 或ShellExecute来作,但兄弟是个新手,那位仁兄可以把写的更清楚一些。

先谢了!
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2004-12-28
  • 打赏
  • 举报
回复
使用SHELL+DOS命令+管道操作,输出到文本文件,读取该文本文件就可以了。
详细请参阅一下MSDN中的SHELL帮助和DOS命令吧。
b_nautilus 2004-12-28
  • 打赏
  • 举报
回复
学习
maskdata 2004-12-28
  • 打赏
  • 举报
回复
ping localhost >> c:\PingRes.txt
laviewpbt 2004-12-28
  • 打赏
  • 举报
回复
上面的代码就可以满足你的要求。
hinewly 2004-12-28
  • 打赏
  • 举报
回复
刚才写了一大段,还没有发表就丢失了!!!郁闷!

首先感谢上面这位兄弟写了那么多。

但我还没有搞太懂!(基础差!不过有恒心!)
现在我就想一步一步做出来
1、首先实现调用ping (ping localhost)并把结果输入到一个文件中(txt即可)
但是具体做饭不清楚,那位帮忙把详细的步骤写下来(最好给源代码,※有点过分!)
不过先谢谢了!甚至把源码发到信箱hinewly◎sohu。com
laviewpbt 2004-12-28
  • 打赏
  • 举报
回复
网上有一个利用管道技术调用DOS命令的程序,对于ping或者telnet、ipconfig等是有响应的,对于DIR等命令不行,自己下个看看。
类模块中(类模块取名为DOSOutputs)
Option Explicit
'函数CreatePipe创建一个匿名管道,返回管道输入与输出段的句柄
Private Declare Function CreatePipe Lib "kernel32" ( _
phReadPipe As Long, _
phWritePipe As Long, _
lpPipeAttributes As Any, _
ByVal nSize As Long) As Long
'用来读取由函数CretaProcessA创建的进程的管道中的数据
Private Declare Function ReadFile Lib "kernel32" ( _
ByVal hFile As Long, _
ByVal lpBuffer As String, _
ByVal nNumberOfBytesToRead As Long, _
lpNumberOfBytesRead As Long, _
ByVal lpOverlapped As Any) As Long

'安全等级结构
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Private Type STARTUPINFO
cb As Long
lpReserved As Long
lpDesktop As Long
lpTitle As Long
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

'创建一个进程
Private Declare Function CreateProcessA Lib "kernel32" ( _
ByVal lpApplicationName As Long, _
ByVal lpCommandLine As String, _
lpProcessAttributes As SECURITY_ATTRIBUTES, _
lpThreadAttributes As SECURITY_ATTRIBUTES, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, _
ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long

'关闭句柄
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hHandle As Long) As Long

'常量
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const STARTF_USESTDHANDLES = &H100&
Private Const STARTF_USESHOWWINDOW = &H1


Private mCommand As String
Private mOutputs As String

Public Event ReceiveOutputs(CommandOutputs As String)

Public Property Let CommandLine(DOSCommand As String)
mCommand = DOSCommand
End Property

Public Property Get CommandLine() As String
CommandLine = mCommand
End Property

Public Property Get Outputs()
Outputs = mOutputs
End Property

Public Function ExecuteCommand(Optional CommandLine As String) As String
Dim proc As PROCESS_INFORMATION
Dim ret As Long
Dim start As STARTUPINFO
Dim sa As SECURITY_ATTRIBUTES
Dim hReadPipe As Long
Dim hWritePipe As Long
Dim lngBytesread As Long
Dim strBuff As String * 256

'如果参数不为空则提交命令
If Len(CommandLine) > 0 Then
mCommand = CommandLine
End If
If Len(mCommand) = 0 Then
MsgBox "Command Line empty", vbCritical
Exit Function
End If

'创建管道
sa.nLength = Len(sa)
sa.bInheritHandle = 1&
sa.lpSecurityDescriptor = 0&
ret = CreatePipe(hReadPipe, hWritePipe, sa, 0)

If ret = 0 Then '错误返回
MsgBox "CreatePipe failed. Error: " & Err.LastDllError, vbCritical
Exit Function
End If
start.cb = Len(start)
start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
'设置标准输出设备和出错设备to相同的管道句柄
start.hStdOutput = hWritePipe
start.hStdError = hWritePipe
'创建进程
ret& = CreateProcessA(0&, mCommand, sa, sa, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

If ret <> 1 Then

MsgBox "File or command not found", vbCritical
Exit Function
End If
ret = CloseHandle(hWritePipe)
mOutputs = ""
Do
ret = ReadFile(hReadPipe, strBuff, 256, lngBytesread, 0&)
mOutputs = mOutputs & Left(strBuff, lngBytesread)
RaiseEvent ReceiveOutputs(Left(strBuff, lngBytesread))
Loop While ret <> 0
ret = CloseHandle(proc.hProcess)
ret = CloseHandle(proc.hThread)
ret = CloseHandle(hReadPipe)
ExecuteCommand = mOutputs
End Function
窗体中,两个textbox,两个按钮

Option Explicit
Private WithEvents objDOS As DOSOutputs
Private Sub cmdExecute_Click()
On Error GoTo errore
objDOS.CommandLine = txtCommand.Text
objDOS.ExecuteCommand
Exit Sub
errore:
MsgBox (Err.Description & " - " & Err.Source & " - " & CStr(Err.Number))
End Sub

Private Sub cmdExit_Click()
Set objDOS = Nothing
End
End Sub

Private Sub Form_Load()
Set objDOS = New DOSOutputs
End Sub

Private Sub objDOS_ReceiveOutputs(CommandOutputs As String)
txtOutputs.Text = txtOutputs.Text & CommandOutputs
End Sub

Private Sub txtOutputs_Change()
txtOutputs.SelStart = Len(txtOutputs.Text)
End Sub

既然结果可以输出到text中 ,就可以输入到文件中,有兴趣自己改一下。

taosin 2004-12-28
  • 打赏
  • 举报
回复
Shell "文件路径"
pweixing 2004-12-28
  • 打赏
  • 举报
回复
如果仅仅是调用一个应用程序的话,用shell就好了:
shell "pp.path & "\" &app.exe "
但是如果想把结果输入的一个文本中的话就有点麻烦了,如果应用程序的运行结果仅仅是输出到屏幕的话,比如dir,那么只要在shell后面的命令行里面加上一个参数:
shell "dir >1.txt"
如果应用程序运行的结果不仅仅是输出到屏幕,比如你说的telnet,那么这种方法就不能实现了。
加密狗系列—软件狗 面向单机环境的低成本加密方案   软件狗是使用在计算机并行口和USB口上的用于软件保护的硬件产品。软件狗采用端口噪声技术,提供100字节的掉电保护存储器,具备反跟踪能力,是经济实用软件保护解决方案的首选。软件狗开发套件有两种选型:并口型和USB型。软件开发商可以采用多种方法保护软件,防止软件被非法拷贝使用。软件狗开发套件由:软件狗、加密接口、开发商工具等组成。 1.软件狗 软件狗指安装在并口上或 USB 口上的硬件狗。软件狗是一个可编程、可读写的存储设备,具有 100 个字节的数据存储区。如果软件狗插在计算机上,您可以通过相应的加密接口函数或开发商工具对软件狗进行访问。 2.加密接口 软件狗开发套件提供的加密接口是一套包含各种开发语言的程序接口模块,可以嵌在程序的源代码。您可以在您程序使用软件狗开发套件提供的加密接口对软件狗进行操作。 3.开发商工具(DogEdt32.EXE) 软件狗开发商工具可以使开发商方便地对软件狗存储区进行编辑、读取系列号以及连续初始化等操作。 工作原理: 开发商程序通过调用软件狗开发套件提供的接口模块对软件狗操作,软件狗响应该操作并通过接口模块将相应数据返回给开发商程序。开发商程序可以对返回值进行判定并采取相应的动作。如果返回无效的响应,表明没有正确的软件狗,开发商可以将应用程序终止运行。 简要示意如下: 软件狗开发套件提供了两种加密方案:使用 Obj 、 DLL 、 ActiveX 控件或者直接使用外壳工具,请根据您的需求选择方案。 加密方案一:使用 Obj 、 DLL 、 ActiveX 控件 Obj 、 DLL 、 ActiveX 控件提供了操作软件狗的接口函数,您可以直接在应用程序的源代码里加入这些接口函数的调用,来保护您的一个或者多个软件,然后重新编译您的应用程序。 由您来设置应用程序调用加密接口的次数以及没有发现软件狗采取的措施。原则上您调用、设置的加密接口越多将更有利于阻止潜在破坏您的软件保护。 加密方案二:使用外壳工具 使用外壳工具对软件保护是一种快速、简单的保护方案。它不象使用接口函数需要对源代码进行改动,而是自动给您的可执行应用程序加了一个保护层。在程序开始运行和运行当会自动地访问软件狗是否存在。假如软件狗不存在,用户将看到一个错误提示,该应用程序将不能运行。 产品特点: 软件狗开发套件适用于 DOS 、 Windows 3X/9X/ME/NT/2000/XP 、 Linux 操作系统,支持几乎所有主流编程语言、开发工具。软件狗的主要特点如下: 数据交换随机噪声技术 有效地对抗逻辑分析仪及各种调试工具的攻击,完全禁止软件仿真程序模拟并口的数据。 迷宫技术 在 RC-DL 函数入口和出口之间包含大量复杂的判断跳转干扰代码,动态改变执行次序,提升 RC-DL 的抗跟踪能力。 时间闸 硬件狗内部设有时间闸,各种操作必须在规定的时间内完成。硬件狗正常操作用时很短,但跟踪时用时较长,超过规定时间,硬件狗将返回错误结果。 AS 技术 API 函数调用与 SHELL 外壳加密相结合的方式,同时使用能够达到极高的加密强度。 RC-DL 开发套件在外壳加密工具调用的 API 函数建立了对应关系。这样处理后,程序调用的 API 函数只有在有外壳的情况下才能正确运行,而外壳本身隐蔽了对 API 函数的调用。 抗共享 可以通过编程的方式实现对抗并口共享器。 存储器 提供 100 字节掉电保持数据存储区供开发商存放关键数据、配置参数等信息,可通过 RC-DL 开发商工具或接口函数对存储区进行读写。 改良的硬件驱动程序 驱动程序的安装及发布更加方便、快捷,开发商只需使用 InstDrv.exe 安装驱动程序,硬件即可正常工作。 崭新的硬件狗编辑工具 DogEdt32.exe 集成了原有 DogEdt32.exe 、 Reveal.exe 、 Convert.exe 三个工具,并新增错误码查询功能,令硬件狗编辑调试过程更趋简捷、顺畅。 高强度动态库加密方式 在原有加密方式基础上,新增 C 语言高强度动态库加密方式,并有效运用动态库认证安全机制,确保动态库调用具有无与伦比的安全可靠性。 支持 ActiveX 控件 开发商可以在网页VB 、 VC 使用 ActiveX 控件对硬件狗进行操作。 Linux 模块 提供了针对 Linux 内核 2.2 和 2.4 版本驱动程序,开发商可以使用 Linux 模块保护运行于 Linux 操作系统上的应用程序。 新增功能: 软件狗开发套件 3.0 版新增功能在软件狗开发套件 V3.0 ,新增了与原并口硬件完全兼容的 UDA 型 USB 软件狗。 USB 软件狗也提供了 100 字节的用户存储区。新的开发商工具( DogEdt32.EXE )或接口函数既可以老的并口硬件,也可以对新的 USB 硬件进行操作。 已安装了软件狗开发套件 V2.1 的老用户如要使用 UDA 型 USB 软件狗,必须重新安装软件狗开发套件 V3.0 ,以安装 UDA 型 USB 软件狗的驱动程序并更新开发套件的 OBJ 。 开发商如果使用 WIN32 模块,在 Windows98 或更高版本( WindowsME/2K/XP )下既可以使用 USB 软件狗也可以使用并口软件狗。目前暂不提供 USB 软件狗在 Windows NT4 上的驱动程序,即在 Windows NT4 操作系统上,目前只能使用并口软件狗。 在安装 Linux2.4 以上内核的 Linux 系统,既可以使用并口软件狗也可以使用 USB 软件狗。 WIN16 、 DOS16 、 DOS32 模块本次没有改动,仍只支持并口软件狗。 软件狗开发套件 目前最新版本为 v3.0 支持并口硬件 RC-DL (现已更名为 PDL ) , 支持 USB 口硬件 UDA 适用语言环境: 并口型软件狗: DOS16: C , C++, FORTRAN, ASM, Pascal, BASIC ( BASCOM, Quick,True, Turbo ) , FOXPRO, Clipper, Foxbase, Dbase, EXE/COM 文件;DOS32: C, C++ ( High, NDP, Watcom ), FORTRAN ( NDP, PowerStation,Watcom) , EXP 文件; Win16: C, C++ ( Borland, Visual ), Visual BASIC, FOXPRO, PowerBuilder,Delphi Win32: C, C++ ( Visual, Borland, C++Builder, MFC ), FORTRAN ( LAHEY,PowerStation, Visual ), Java, VisualBasic, VisualFoxpro, PowerBuilder,Delphi,JavaScript, VBScript, VBA, InstallShield, AutoCAD, .NET 等。 Linux: C, C++, Java USB 型软件狗: Win32: C, C++ ( Visual, Borland, C++Builder, MFC), FORTRAN ( LAHEY, PowerStation, Visual ), Java, VisualBasic, VisualFoxpro, PowerBuilder, Delphi , JavaScript, VBScript, VBA, InstallShield, AutoCAD, .NET 等等。 Linux: C, C++, Java 适用操作系统: 并口型软件狗: DOS , Windows 3.x / 9x / ME / NT / 2000 / XP / Sever 2003 LINUX (Red hat 内核 2.2 / 2.4) USB 型软件狗: Windows 98 / ME / 2000 / XP / Sever 2003 LINUX (Red hat 内核 2.2 / 2.4) 开发商升级注意事项: 并口 RC-DL (现已更名为 PDL )型软件狗的软件软件狗开发套件 V3.0 与原 DJ/DK 完全兼容,即使用软件狗开发套件 V3.0 的驱动程序、模块及工具,可以正常操作 DJ/DK 型软件狗。所以建议使用原 DJ/DK 软件的开发商将您的驱动程序、模块及工具全部用软件狗开发套件 V3.0 (光盘版)套件升级。 如果您仍旧使用原有的 DI/DJ/DK 驱动程序、模块及工具,在 DOS 、 Windows 9X/NT/2000 下对 RC-DL 只能做读操作,写操作将失败。如果您不想改动已发行的软件,而还要使用 RC-DL 型软件狗,只升级驱动程序也可以,但您的程序必须是 WIN32 程序。如果您加密的程序是 DOS16 、 DOS32 或 WIN16 程序,您必须升级新的模块及工具,否则将无法对 RC-DL 型软件狗进行写操作。 使用方法: 1.对 EXE 文件 ( 或 COM 文件 ), 利用配套软件的 EXE 文件加密工具加密。 2 对数据库文件 (PRC 、 FOX 、 APP 、 DBF), 利用配套软件的加密工具加密。 3 对于 C 语言及其它编译型语言,配套软件提供可链接的模块文件 (OBJ 文件 ) , 模块文件提供两个函数 :(1) 写数据 ; ⑵读数据。开发商可在要加密软件的源码加入适当的调用语句,对软件狗进行读写操作,以确定对应的软件狗是否存在,从而决定程序是否继续运行。对加入软件狗函数调用的源程序编译后,链接时加上软件狗的模块文件 (OBJ) 即可。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧