请教:Win32API函数SetWindowText怎样更新编辑框的内容

violing 2000-09-01 07:06:00
我编写一个程序来更改另一个应用程序窗口Form1中的一个可读写的编辑框中的内容:
(Form1的hWnd已知为h,编辑框的hWnd为h1,mystring为PChar变量)


mystring:='TestMyString'+#0;
SetWindowText(h1,mystring);
GetWindowText(h1,dispstring);
SetForegroundWindow(h);

取得的结果dispstring和mystring的的确确是相同的,但Form1的相应编辑框的显示总是仍为原来的值。立即运行Form1,结果表明编辑框中的内容没有被改变。如果换编辑框为命令按钮却没有问题。这是为什么呢,百思不得其解。而且,如果Form1是自己本身,且编辑框是自己窗口的一个子窗口(编辑框),这样做也没有问题。

怎样才能作到更改其它程序窗口中编辑框中的内容呢?请专家指教,十分感激。
...全文
558 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
violing 2000-09-06
  • 打赏
  • 举报
回复
to:charles_zdm

请问您说的是不是JournalPlayback和JournalRecord型的Hook?能给我一个例子吗?
另外,用CreateRemoteThread(。。。)远程创立线程能不能也给我一个例子?

谢谢!
charles_zdm 2000-09-05
  • 打赏
  • 举报
回复
你如果是一个进程修改另一个进程的text内容的话,不能简单的调用这几个函数。
最重要的是先打破进程墙,使你的程序进入的别人的进程。
有三种方法:
1:使用钩子函数。
2:如果是NT的话,修改注册表,将你写的.dll文件静态加入的每一个进程中。
3:用CreateRemoteThread(。。。)远程创立线程到另一个进程中。
进入了别人的进程想做什么,都可以了。
violing 2000-09-05
  • 打赏
  • 举报
回复
很抱歉,没有人能回答出来,不好意思了。唉,可惜呀,所谓的专家们,你们都怎么了....?????
violing 2000-09-04
  • 打赏
  • 举报
回复
没有人能解决这个问题了吗?
请各位高手畅所欲言......
violing 2000-09-04
  • 打赏
  • 举报
回复
没有能解决这个问题了吗?
请各位高手畅所欲言......
violing 2000-09-03
  • 打赏
  • 举报
回复
感谢斑竹jll的回答。但是,有疑问,问题也没有解决:

1、如果说Text属性是受保护的,那如何解释VB中的SendKeys函数呢。这个函数可以传送任何字符串,包括汉字字符串到另外的窗口中的任何部件(包括编辑框)。

2、有什么办法才能实现这种功能?(API的keybd_event或者SendMessage(hWnd,WM_KEYDOWN,nVirtKey,1)函数可以发送键盘上的所有字符和控制键,但不能发送汉字等双字节字符,因为它们没有virtual-key code虚拟键码)

3、VB的SendKey真是一个好用的东西,但在Delphi中如何实现呢?Delphi的光盘中的\Info\Extras\SendKeys目录,有一个实现的例子来模拟它,其它都行,但就是不能发送汉字,所以说它不是一个真正的VB式的SendKeys!

4、难道M$就是M$,Windows永远是它不倒的旗帜,而且永远“老子天下第一”???

5、万不得已,只好用VB作一个OCX,当中就只有一个方法,就是调用VB函数SendKeys,但惭愧的是Delphi我是才学习不久,也就一两个月吧,我不知道Delphi怎样去用这个OCX,试了多次,都搞不懂,请高手指点一二,将不胜感激...
jll 2000-09-02
  • 打赏
  • 举报
回复
1、编辑框中显示的字符串对应于Text属性,而按钮的标题对应于Caption属性。
2、Text属性是受保护的,因此无法从别的程序种访问。如果该编辑框在自己的当前窗口(如Form1)内,那么根据Delphi中OOP的封装特点,访问Text属性是允许的!因此就会出现你提到的第二种情况...

1,183

社区成员

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

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