求助XXXXXT应用程序之间传递字符串的最简单方法
金坷居士2012/09/25软件综合 IP:澳大利亚
最近本人在搞个程序,一个小功能是需要在程序开始时判断是否有已存在的实例在运行,如果有就告诉那个实例去打开文件(传递个字符串过去)然后结束当前实例.功能就是自动在一个MDI窗口中打开多个文档.
最开始我设想用DDE实现,忽然发现VB2010已经舍弃DDE了,大悲
后来又想到用写文件和注册表的方法,一想效率太低,用socket在没网卡的机子上就是个悲剧,而且这个程序和网络没关系,用socket容易触发防火墙的提示
然后我又用Sendmessage函数+Windows消息+内存映射文件,终于成功了,问题是现在需要.Net4.0支持,很多学校电脑只有.Net3.5,我演示的时候会悲剧......现在求助各位,如何用Sendmessage传递个字符串参数?wParam和lParam都是数字类型的,没法传递字符串,我试过传递指针和结构,都悲剧....

这是我的程序:



Public Class Form1
    <XXXXXXXXXXteropServices.DllImport("user32.dll", CharSet:=XXXXXXXXXXXXXXXXXXXXXXXXXXarSet.Unicode, entrypoint:="SendMessageW")> _
    Public Shared Function SendMessage(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As Integer) As Integer
    End Function
    Protected Overrides Sub DefWndProc(ByRef m As XXXXXXXXXXXXXXXXXrms.Message)
        Select Case XXXXg
            Case &H400
                If m.WParam = 3180 Then
                    Dim s As New XXXXXreamReader(XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeateOrOpen("asdn.open", 1024).CreateViewStream())
                    openfile(XXXXadToEnd)
                End If
            Case Else
                XXXXXXXXXfWndProc(m)
        End Select
    End Sub

    Sub openfile(f)
        Text = f
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        If XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXunt = 1 Then
            Dim Proc_List As Process() = XXXXXXXXXXtProcessesByName(XXXXXXXXXXtCurrentProcess().ProcessName)
            If Proc_List.Length > 1 Then
                For Each i As Process In Proc_List
                    If XXXX <> XXXXXXXXXXtCurrentProcess().Id Then
                        Dim s As New XXXXXreamWriter(XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXeateOrOpen("asdn.open", 1024).CreateViewStream())
                        s.Write(XXXXXXXXXXXXXXXXXXmandLineArgs(0))
                        s.Flush()
                        XXXXose()
                        SendMessage(XXXXinWindowHandle, &H400, 3180, 0)
                    End If
                Next
                XXXXXose()
            Else
                openfile(XXXXXXXXXXXXXXXXXXmandLineArgs(0))
            End If
        End If
    End Sub
End Class

来自:计算机科学 / 软件综合
15
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
phpskycn
12年4个月前 IP:未同步
454580
回 楼主(金坷居士) 的帖子
低效一点的方法:共享内存
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年4个月前 IP:未同步
454581
额没看清楚。。。。
可以试试调试API,直接控制EIP。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年4个月前 IP:未同步
454582
回 楼主(金坷居士) 的帖子
低效一点的方法:共享内存
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金星凌日
12年4个月前 IP:未同步
454638
把消息设置成WM_COPYDATA试试?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金坷居士作者
12年3个月前 IP:未同步
454650
回 3楼(phpskycn) 的帖子
各种蛋疼方法都是过了
最后采用一种叫做独立存储文件的东东
实际测试,效率不错,打开文件时察觉不到延时
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
w_b_b_w
12年3个月前 IP:未同步
454686
文件 +1
文件 +1
文件 +1
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
znnwe1
12年3个月前 IP:未同步
454896
回 楼主(金坷居士) 的帖子
只是传递字符串的话LZ可以试下剪切板
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
我说要有光
12年3个月前 IP:未同步
454900
古老经典的方法是用管道
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
znnwe1
12年3个月前 IP:未同步
455171
楼上正解,用邮槽也不错[s:178]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
.........
12年3个月前 IP:未同步
455181
管道不错,可能换了个名字,但是还是差不多
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年3个月前 IP:未同步
456395
楼主来说一下,可以传递数字,为何不能传递指针……

另外调用winAPI的语法不需要那么复杂

declare function SendMessage lib "user32" alias "SendMessageW" (byval something as whatever...
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年3个月前 IP:未同步
456419
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
lotusharley
12年3个月前 IP:未同步
458687
既然都用XXXXXt的了,可以试试.Net中的Remoting技术,不过好像也需要打开防火墙,能常情况下多还是用Socket的比较多。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ymdir
12年3个月前 IP:未同步
459119
'重载窗口消息处理,接收线程同步消息
    Protected Overrides Sub WndProc(ByRef m As XXXXXXXXXXXXXXXXXrms.Message)

        Select Case (XXXXg)
            Case WM_COPYDATA
                Dim mystr As COPYDATASTRUCT = New COPYDATASTRUCT
                Dim mytype As Type = XXXXXXXXtType
                mystr = CType(XXXXtLParam(mytype), COPYDATASTRUCT)

                console.writeline (mystr.lpdata)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
金坷居士
学者 机友 笔友
文章
170
回复
1711
学术分
11
2011/09/23注册,3个月5天前活动

怪哉!灵异的三极管电流流向! 这素一个在仿真的RCC电路,示波器上绿色的是集电极电流红色的是发射极电流。窝萌都知道发射姬电流素集电极电流和基极电流之和,所以讲道理发射极电流一定比集电极略大。可仿真结果刷了三观,Q1集电极电流一部分流经基极,然后流经Q2的C->E。

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}