如何编写一个能读取Powerbuilder的数据窗口中数据的程序
2005-03-10 09:48
661 查看
这里当然指一个程序读取另一个程序中数据窗口的数据。设想的方法有多种,简单的方法是向数据窗口传递消息啦!先看看这个:
转载自:http://www.mycgiserver.com/~unoksoftgroup/undocumented/undocumented_powerbuilder.html
通过测试发现使用Post(ll_dw_handle, 1305, 0, 0) ,可以使数据窗口弹出saveas的对话框,经过进一步的试验,发现wparam和lparam参数的含义分别是 :saveas type和 savefilename字符串的地址,所以我们就可以使用发送消息的方式使数据窗口内容保存为文本文件,然后读取文件就可以获取数据了。
我在同一pb程序中的测试代码:
Function integer SndMsg(long hWnd, long uMsg, long wp, &
ref string filename) library "user32.dll" Alias For "SendMessageA"
long ll_dw_handle
ll_dw_handle = handle(dw_1)
string s
s="c:/111.txt"
SndMsg(ll_dw_handle, 1305, 2, s)
以上程序只是在同一进程内测试通过,但是在Windows中,一个进程不能直接读取另一个进程的内存,所以如果将上述代码直接在两个程序间使用,会导致非法操作。因此要编写一个数据窗口外挂程序,还需要做更多的工作,这里建议使用DLL插入(利用setwindowlong或者hook)的方法,拦截dw的该消息,就可以为所欲为了。由于本人未作实际操作,就点到这里为止了。
[align=center]How to manipulate Datawindow without using datawindow functions.[/align] | [align=left]// I test only on PowerBuilder 6.5 build 444 long ll_dw_handle ll_dw_handle = handle(dw_1) [/align]
|
通过测试发现使用Post(ll_dw_handle, 1305, 0, 0) ,可以使数据窗口弹出saveas的对话框,经过进一步的试验,发现wparam和lparam参数的含义分别是 :saveas type和 savefilename字符串的地址,所以我们就可以使用发送消息的方式使数据窗口内容保存为文本文件,然后读取文件就可以获取数据了。
我在同一pb程序中的测试代码:
Function integer SndMsg(long hWnd, long uMsg, long wp, &
ref string filename) library "user32.dll" Alias For "SendMessageA"
long ll_dw_handle
ll_dw_handle = handle(dw_1)
string s
s="c:/111.txt"
SndMsg(ll_dw_handle, 1305, 2, s)
以上程序只是在同一进程内测试通过,但是在Windows中,一个进程不能直接读取另一个进程的内存,所以如果将上述代码直接在两个程序间使用,会导致非法操作。因此要编写一个数据窗口外挂程序,还需要做更多的工作,这里建议使用DLL插入(利用setwindowlong或者hook)的方法,拦截dw的该消息,就可以为所欲为了。由于本人未作实际操作,就点到这里为止了。
相关文章推荐
- 外部程序读取Powerbuilder的数据窗口数据的方法
- 自己编写的一个程序:读取XML格式的日志文件,并以一定的数据写入数据库中
- 如何在Win32窗口程序中发命令打开一个控制台,往里面打印(printf())输出一些数据
- C primer plus 第七章 练习6: 编写一个程序读取输入,直到#,并报告序列ei出现的次数。
- 用unity来写 二维数组编写程序定义一个二维数组arr,该数组一共有4行3列,如下表所示,请把下表中的所有对应数据利用赋值语句赋值到该二维数组arr中去arr 第0列第1列第2列第0行第1行第2行第
- 编写一个学生和教师数据输入和显示程序,学生数据有编号,姓名,班号,和成绩,教师数据有编号,姓名,职称和部门。要求将编号,姓名输入显示设计成一个类person,并作为学生数据类t和教师数据操作类的基类
- 编写一个程序 把输入作为字符流读取 直到遇到EOF 报告单词的平均字母数(图)
- 如何快速地编写和运行一个属于自己的 MapReduce 例子程序
- 本程序说明了如何建立一个可以接收UDP客户端数据的UDP 服务器
- 编写一个 火车站卖票程序--3个窗口同时售票
- 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- 队列和栈面试题(一)— 请编写一个程序,按升序对栈进行排序,要求最多只能使用一个额外的栈存放临时数据
- 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- 如何编写一个线程安全的程序或者函数库?
- 编写一个程序,输出学生已有的学号姓名成绩等数据并计算总人数和平均成绩
- [5.18]编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号、和成绩,教师数据有编号 姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类stud
- 考虑下列生成二进制的过程,编译器被用来生成单个单元的目标代码,链接器被用来将多个目标单元合并成一个程序二进制,链接器如何改变指令和数据到内存地址的绑定?需要什么信息从编译器传递给链接器,以协助完成链接
- 11.8 编写一个程序,有一个汽车类 vehicle,它具有一个需传递参数的构造函数,类 中的数据成员:车轮个数 wheels 和车重 weight 放在保护段中;小车类 car 是它的私有派生 类,
- C语言 编写一个程序从标准输入读取字符,并把他们写到标准输出。除了大写字母转换成小写字母之外,其他的原样输出。
- 编程 程序读取数据与SQL编写手记