求助!各位大侠,在vb中怎么实现两个exe文件之间参数的传递!!

guoshaoning 2005-01-18 09:01:26
怎么才能实现,在第一个exe文件中点击某个按纽时,把一个参数传给这个按纽调用的另一个exe.

例如:在第一个exe中有两个按纽分别为[你好]和[我很好],点击[你好]按纽时调出第二个exe并显示"你好!",点击[我很好]也调出第二个exe并显示"我很好".
谢谢大家帮忙!
...全文
275 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsftest 2005-03-31
  • 打赏
  • 举报
回复
如果楼主只想实现上面的简单要求,只需要在第二个exe里用command检测第一个exe程序shell过来的参数就可以了。。。

Command 函数


返回命令行的参数部分,该命令行用于装入 Microsoft Visual Basic 或 Visual Basic 开发的可执行程序。

语法

Command

说明

当从命令行装入 Visual Basic 时,/cmd 之后的命令行的任何部分作为命令行的参数传递给程序。下面的示例中,cmdlineargs 代表 Command 函数返回的参数信息。

VB /cmd cmdlineargs

对于使用 Visual Basic 开发并编译为 .exe 文件的应用程序,Command 返回出现在命令行中应用程序名之后的任何参数。例如:

MyApp cmdlineargs

想知道如何在正在使用的应用程序的用户界面中改变命令行参数,请搜寻关于“命令行参数”的帮助。



Command 函数示例
本示例在某个函数中用 Command 函数获得命令行参数,并将命令行参数以 Variant 类型之数组返回。

Function GetCommandLine(Optional MaxArgs)
'声明变量。
Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs
'检查是否提供了 MaxArgs 参数。
If IsMissing(MaxArgs) Then MaxArgs = 10
' 使数组的大小合适。
ReDim ArgArray(MaxArgs)
NumArgs = 0: InArg = False
'取得命令行参数。
CmdLine = Command()
CmdLnLen = Len(CmdLine)
'以一次一个字符的方式取出命令行参数。
For I = 1 To CmdLnLen
C = Mid(CmdLine, I, 1)
'检测是否为 space 或 tab。
If (C <> " " And C <> vbTab) Then
'若既不是 space 键,也不是 tab 键,
'则检测是否为参数内含之字符。
If Not InArg Then
'新的参数。
'检测参数是否过多。
If NumArgs = MaxArgs Then Exit For
NumArgs = NumArgs + 1
InArg = True
End If
'将字符连接到当前参数中。
ArgArray(NumArgs) = ArgArray(NumArgs) & C
Else
'找到 space 或 tab。
'将 InArg 标志设置成 False。
InArg = False
End If
Next I
'调整数组大小使其刚好符合参数个数。
ReDim Preserve ArgArray(NumArgs)
'将数组返回。
GetCommandLine = ArgArray()
End Function

cxl82116 2005-03-30
  • 打赏
  • 举报
回复
有两种比较好的方法
1。用WM_COPYDATA,你可以到Google上去搜,时间问题,我不再写例子。
2。用HWND_BROADCAST,发全局消息,这个MSDN上有例子。
另外,
可以考虑以下方法,如果有大量数据的话,
1。CreateNamedPipe,后用两个File读写
2。用共享内存区的方法。
lang_csdn 2005-01-29
  • 打赏
  • 举报
回复
工程1
Option Explicit

Private Sub LinkAndSendMessage(ByVal Msg As String)
Dim t As Long
picDDE.LinkMode = 0
picDDE.LinkTopic = "工程2|Form1"
picDDE.LinkMode = 2
picDDE.LinkExecute Msg

t = picDDE.LinkTimeout
picDDE.LinkTimeout = 1
picDDE.LinkMode = 0
picDDE.LinkTimeout = t
End Sub

Private Sub Command1_Click()
LinkAndSendMessage "你好"
End Sub

Private Sub Command2_Click()
LinkAndSendMessage "我很好"
End Sub

工程2
Option Explicit

Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
MsgBox CmdStr
Cancel = 0
End Sub

padin 2005-01-28
  • 打赏
  • 举报
回复
还有一个简单方法COPYDATA消息,启动第二个程序是将自己的一个窗体句柄作为命令行传给它,只传是启动时一次利用命令行就可以了,但是要求第二个程序也是你写的,因为需要写响应的代码
Rex_love_Burger 2005-01-20
  • 打赏
  • 举报
回复
关注
tian9246 2005-01-19
  • 打赏
  • 举报
回复
内存映射。
  • 打赏
  • 举报
回复
用内存共享实现EXE通信的例子:

'\\ Global memory management functions
private Declare Function GlobalLock Lib "kernel32" (byval hMem as Long) as Long

private Declare Function GlobalSize Lib "kernel32" (byval hMem as Long) as Long

private Declare Function GlobalUnlock Lib "kernel32" (byval hMem as Long) as Long

private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest as Any, lpvSource as Any, byval cbCopy as Long)

private Declare Function GlobalAlloc Lib "kernel32" (byval wFlags as Long, byval dwBytes as Long) as Long

private Declare Function GlobalFree Lib "kernel32" (byval hMem as Long) as Long
private mMyData() as Byte
private mMyDataSize as Long
private mHmem as Long


public Enum enGlobalmemoryAllocationConstants
GMEM_FIXED = &H0
GMEM_DISCARDABLE = &H100
GMEM_MOVEABLE = &H2
GMEM_NOCOMPACT = &H10
GMEM_NODISCARD = &H20
GMEM_ZEROINIT = &H40
End Enum
'**************************************
' Name: Global memory
' Description:Allows you to read and wri
' te global memory blocks, which in turn a
' llows you to pass big chunks of data bet
' ween applications easily.
' By: Duncan Jones
'
'
' Inputs:None
'


'\\ --[CopyFromHandle]---------------------------
'\\ Copies the data from a global memory handle
'\\ to a private byte array copy
'\\ ---------------------------------------------

public Sub CopyFromHandle(byval hMemHandle as Long)
Dim lRet as Long
Dim lPtr as Long
lRet = GlobalSize(hMemHandle)


If lRet > 0 then
mMyDataSize = lRet
lPtr = GlobalLock(hMemHandle)


If lPtr > 0 then
ReDim mMyData(0 to mMyDataSize - 1) as Byte
CopyMemory mMyData(0), byval lPtr, mMyDataSize
Call GlobalUnlock(hMemHandle)
End If
End If
End Sub
'\\ --[CopyToHandle]-----------------------------
'\\ Copies the private data to a memory handle
'\\ passed in
'\\ ---------------------------------------------

public Sub CopyToHandle(byval hMemHandle as Long)
Dim lSize as Long
Dim lPtr as Long
'\\ Don't copy if its empty


If Not (mMyDataSize = 0) then
lSize = GlobalSize(hMemHandle)
'\\ Don't attempt to copy if zero size..

If lSize > 0 then
lPtr = GlobalLock(hMemHandle)
If lPtr > 0 then
CopyMemory byval lPtr, mMyData(0), lSize
Call GlobalUnlock(hMemHandle)
End If
End If
End If
End Sub
qyii 2005-01-19
  • 打赏
  • 举报
回复
命名管道!!去搜
pikachu8guan 2005-01-19
  • 打赏
  • 举报
回复
内存数据共享
熊超 同志的代码里面有写过 你可以查一下啊
viena 2005-01-18
  • 打赏
  • 举报
回复
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
xiaohuasz 2005-01-18
  • 打赏
  • 举报
回复
参考http://www.china-askpro.com/msg8/qa44.shtml

1,486

社区成员

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

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