可将要传的数据写入一个文件中吧
不知道copymemory是否可以
不知道copymemory是否可以
解决方案 »
- 一个SQL语句的写法
- 哪位高手可以帮忙做音乐闯关的系统,有尝的。
- VB中这种情况要怎么设置代码?
- 如何得到Ado连接服务器中的 数据库和表信息
- !!怎样做一个类似输入法中软键盘那样的窗体,总在最前边,又没有焦点,还能接受输入???!!!
- VB 写 ActiveX DLL 的问题, 50 分求解
- 关于JET数据引擎的问题
- 我快急死了!帮帮忙
- 为什么我每次关机时总会说有一个或两个用户在正在对话?
- 救命!那位高手知道,怎样查看office文档?
- 请教:把mshflexgrid表导进excel后,只有数据,没有表格线,如何在代码中实现表格线。
- treeview控件的afterlabeledit事件中如果string参数为空,如何使选中的再进入编辑状态,谢谢!
那就是如果你想调动两个“蚂蚁”为您效力是不可能的——它总会把新运行的关闭。 而“蚂蚁”程序的妙处就在于:在重复运行“蚂蚁”时它不仅拒绝运行,而且能把已经运
行的“蚂蚁”激活,这样用上面的程序就无能为力了。但事实上实现拒绝运行并激活已运行的
程序有多种方法: 1、用FindWindow函数得到已经运行窗体的句柄(HWND),然后用SetActiveWindow等API函
数将其激活。其缺点也很明显,那就是没法传递参数。 2、用FindWindow函数得到已运行窗体的句柄后用SendMessage的方法给窗体传送一个自定义
消息(附带参数),然后在窗体中拦截并进行处理,但这样做要修改窗体的标准消息处理
程序,用在VC,BC或DELPHI编写的程序中还行,但在VB中工作量太大,并且容易发生“一
般保护行错误”使VB崩溃,不太可取(当然,如果你有足够的信心和不怕崩溃的精神,也
可以试一下 ^_^ )。 3、使用DDE技术。 所谓DDE技术,就是动态数据交换技术。也许你很奇怪,这与本文所讨论的内容有什么相干的?
且听我慢慢讲来。
为了实现拒绝运行并把已经运行的程序激活并实现各种功能,我们可以先用本文开头提到的方
法,检测一下程序有没有被运行过,如果没有,就正常运行,如果已经被运行过,就打通与它的
DDE通道,传给它一个(或一些)数据,然后由已经运行的程序对数据进行处理,再去实现各种
“意想不到”的功能,这时也许就有人对这你的程序喊:“酷、酷……” ^_^
好了,耳听为虚,眼见为实,下面让我们动点真格的。 打开VB,新建一个工程,选择菜单中的“工程->工程1 属性”,把工程名称改为“P1”(我爱
偷懒,能短则短 ^_^ ),把已有的一个窗体的“LinkTopic”属性改为“FormDDE”,把“LinkMode”
属性改为“1 - Source”,添加一个PictureBox控件作为DDE执行控件,命名为picDDE。然后添加一个
TextBox控件,命名为“txtInfo”,并把“MultiLine”属性设置为“True”,以便显示多行文本,作为
消息显示控件。最后在窗体代码区输入以下代码:
Const COMMANDLINE = "CommandLine=" 注释: 还是为了省事,定义一个常量Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
Static lngCount As Long
Dim Info As StringInfo = txtInfo.Text 注释: 保留原有信息Select Case CmdStr 注释: CmdStr 是DDE程序传送过来的参数
Case "Max"
Me.WindowState = 2
Info = Info + vbNewLine + "窗体已被最大化"
Case "ShowTime"
Info = Info + vbNewLine + "最后一次运行这个程序的时间是:" + Str(Now)
Case "Count"
lngCount = lngCount + 1
Info = Info + vbNewLine + "你已经第" + Str(lngCount) + "次重复调用这个程序。" _
+ vbNewLine + "但怕您不多给工资,所以只运行了一个 ^_^"
End SelectIf Left(CmdStr, Len(COMMANDLINE)) = COMMANDLINE Then
Info = Info + vbNewLine + "新程序曾以命令行形式运行" + vbNewLine + "命令行为:" _
+ vbNewLine + Right(CmdStr, Len(CmdStr) - Len(COMMANDLINE))
End IftxtInfo.Text = Info 注释: 把信息显示出来Cancel = False
End Sub 以上代码来自: SourceCode Explorer(源代码数据库)
复制时间: 2002-05-27 17:23:37
当前版本: 1.0.690
作者: Shawls
个人主页: Http://Shawls.Yeah.Net
E-Mail: [email protected]
QQ: 9181729
我是小山,我喜欢VB,现在在学习C#和.net的相关知识 欢迎您使用: SourceCode Explorer(源代码数据库)
当前版本: 1.0.690
作者: Shawls
来自: Http://www.dapha.net
个人主页: Http://Shawls.Yeah.Net
Dim t As Long
picDDE.LinkMode = 0 注释:--
picDDE.LinkTopic = "P1|FormDDE" 注释: |______连接DDE程序并发送数据/参数
picDDE.LinkMode = 2 注释: | “|”为管道符,是“退格键”旁边的竖线,
picDDE.LinkExecute Msg 注释:-- 不是字母或数字!t = picDDE.LinkTimeout 注释:--
picDDE.LinkTimeout = 1 注释: |______终止DDE通道。当然,也可以用别的方法
picDDE.LinkMode = 0 注释: | 这里用的是超时强制终止的方法
picDDE.LinkTimeout = t 注释:--
End Sub
Private Sub Form_Load()
If App.PrevInstance Then 注释: 程序是否已经运行 Me.LinkTopic = "" 注释: 这两行用于清除新运行的程序的DDE服务器属性,
Me.LinkMode = 0 注释: 否则在连接DDE程序时会出乱子的 LinkAndSendMessage "Max" 注释:--
LinkAndSendMessage "Count" 注释: |-----连接DDE接受程序并传送数据/参数
LinkAndSendMessage "ShowTime" 注释:-- If Command <> "" Then 注释: 如果有命令行参数,就传递过去
LinkAndSendMessage COMMANDLINE + Command
End If
End 注释: 结束新程序的运行
End If
End Sub
测试一下:
把工程“P1”编译成EXE文件(设名称为 P1.EXE )
1、打开“我的电脑”,找到 P1.EXE 并执行。可以看到程序正常运行了。
2、再运行一次,这次新程序没有运行成功,而原来运行的程序却被最大化了,而且文本框中有以下
字符:窗体已被最大化
你已经第 1次重复调用这个程序。
但怕您不多给工资,所以只运行了一个 ^_^
最后一次运行这个程序的时间是:00-2-6 7:11:01 3、打开 MS-DOS方式 ,用命令行方式再次运行程序,如 “P1 How Are You?”
这时原来运行的程序文本框中又多了几行字:窗体已被最大化
你已经第 2次重复调用这个程序。
但怕您不多给工资,所以只运行了一个 ^_^
最后一次运行这个程序的时间是:00-2-6 7:14:32
新程序曾以命令行形式运行
命令行为:
How Are You?OK,运行完全正确,然后你就可以把它应用的你的程序中了。当然,这只是一些个人心得,如有疏漏之出,还请各位大虾指正。
以上代码来自: SourceCode Explorer(源代码数据库)
复制时间: 2002-05-27 17:23:46
当前版本: 1.0.690
作者: Shawls
个人主页: Http://Shawls.Yeah.Net
E-Mail: [email protected]
QQ: 9181729
我是小山,我喜欢VB,现在在学习C#和.net的相关知识 欢迎您使用: SourceCode Explorer(源代码数据库)
当前版本: 1.0.690
作者: Shawls
来自: Http://www.dapha.net
个人主页: Http://Shawls.Yeah.Net
E-Mail: [email protected]
private Declare Function GlobalLock Lib "kernel32" (byval hMem as Long) as Longprivate Declare Function GlobalSize Lib "kernel32" (byval hMem as Long) as Longprivate Declare Function GlobalUnlock Lib "kernel32" (byval hMem as Long) as Longprivate 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 Longprivate Declare Function GlobalFree Lib "kernel32" (byval hMem as Long) as Long
private mMyData() as Byte0D
private mMyDataSize as Long
private mHmem as Long
0Apublic 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
0A CopyMemory mMyData(0), byval lPtr, mMyDataSize0D
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
0A lPtr = GlobalLock(hMemHandle)
If lPtr > 0 then0D
CopyMemory byval lPtr, mMyData(0), lSize
0A Call GlobalUnlock(hMemHandle)
End If
End If
End If
End Sub
以上代码来自: SourceCode Explorer(源代码数据库)
复制时间: 2002-05-27 17:25:09
当前版本: 1.0.690
作者: Shawls
个人主页: Http://Shawls.Yeah.Net
E-Mail: [email protected]
QQ: 9181729
我是小山,我喜欢VB,现在在学习C#和.net的相关知识 欢迎您使用: SourceCode Explorer(源代码数据库)
当前版本: 1.0.690
作者: Shawls
来自: Http://www.dapha.net
个人主页: Http://Shawls.Yeah.Net
E-Mail: ShawFile@163.