wu_07的专栏

山不在高,有仙则灵&您不小心清空了回收站?没问题,再把硬盘上的文件删除一部分,回收站不就又满了吗?

用户操作
[即时聊天] [发私信] [加为好友]
吴涛ID:wu_07
38645次访问,排名2961好友0人,关注者8
wu_07的文章
原创 45 篇
翻译 4 篇
转载 8 篇
评论 5 篇
wu_07的公告
Google
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
hcz202202:好东西
顶下!
cjdyt:确实比较乱,但总算看得懂
CONLONG:lz写的挺好!!!
figeonline:寫的太亂了。
不知你自己看了什么感覺
文章分类
收藏
相册
blog图片
jsf
SWT
传送门
Java● 咖啡馆 -- JSF中文论坛
我的源码
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky

原创 PB程序间传递字符串变量收藏

新一篇: pb中动态创建浏览器的OLE对象 | 旧一篇: 表面上是label,实际上也是Memo

PB程序间传递字符串变量

我们知道可以用Send ( handle, message#, lowword, long )函数完成不同程序窗口间的消息传递,其中最后两个参数为long型,因此可以利用这两个参数来传递数字型的变量。如果想传递的是字符串呢?由于每个进程都有自己独立的内存地址和内存空间,因此不可能直接通过访问变量地址的方法得到变量。

下面给出pb的方法:

source程序:

外部函数:

Function ulong GetCurrentProcessId() LIBRARY "kernel32.dll"

Function integer SndMsg(long hWnd, long uMsg, long url, &
     ref blob info) library "user32.dll" Alias For "SendMessageA

constant long PBM_CUSTOM01 = 1024

程序:

IF il_hTarget <= 0 THEN findTarget() //找接受变量的窗口,主要用findwindow实现
IF il_hTarget > 0 THEN
 String ls_len
 //组成一个要发送的字符串
 url+= " "+info+" "+String(srctype)+" "+String(offlinetype)
 //计算整个要发送字符的长度,并转化为长度为10的字符串
 ls_len = String(Len(url))
 IF Len(ls_len) < 10 THEN
  ls_len = Space(10 - Len(ls_len))+ls_len
 END IF
 //转化为blob并发送
 Blob lb_snd
 lb_snd = Blob(ls_len+url)
 SndMsg(il_hTarget, PBM_CUSTOM01 +9,getcurrentprocessID(),lb_snd)
END IF

 

target程序:

外部函数:

Function ulong OpenProcess(ulong dwDesiredAccess,ulong bInheritHandle,ulong dwProcessId) LIBRARY "kernel32.dll"
Function ulong ReadProcessMemoryStr(ulong hProcess,long lpBaseAddress,ref string lpBuffer,ulong nSize,ref long lpNumberOfBytesWritten) LIBRARY "kernel32.dll" Alias for "ReadProcessMemory"
Function ulong ReadProcessMemoryBlob(ulong hProcess,long lpBaseAddress,ref blob lpBuffer,ulong nSize,ref long lpNumberOfBytesWritten) LIBRARY "kernel32.dll" Alias for "ReadProcessMemory"
FUNCTION ulong CloseHandle(ulong hObject) LIBRARY "kernel32.dll"

事件pbm_custom10:

If (wparam = 0) Or (lparam = 0) THEN RETURN

Long ll_null
SetNull(ll_null)

Long processhnd
CONSTANT Long  PROCESS_VM_READ = 16

processhnd = openprocess(PROCESS_VM_READ,0,wparam);
//读取发送进程的内存数据
String ls_size
Long ll_size
ls_size = Space(10) //数据的大小
ReadProcessMemoryStr(processhnd,lparam,ls_size,10,ll_null)
ll_size = Long(Trim(ls_size))

Blob lb_data
lb_data = Blob(String(Space(ll_size)))

ReadProcessMemoryBlob(processhnd,lparam+10,lb_data,ll_size,ll_null)

string ls_data

ls_data = String(lb_data) //好啦,收到礼物了

CloseHandle(processhnd)


 

发表于 @ 2004年11月26日 17:07:00|评论(loading...)|编辑

新一篇: pb中动态创建浏览器的OLE对象 | 旧一篇: 表面上是label,实际上也是Memo

评论

#Balloonman2002 发表于2005-01-24 20:16:00  IP:
TrackBack来自《如何跨进程发送字符串?(收藏)》

Ping Back来自:blog.csdn.net
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © wu_07