Blue
Red
Green
Orange
Voilet
Slate
Dark

DOS应用程序怎么向Win95应用程序发消息(100分)

D

doubt

Unregistered / Unconfirmed
GUEST, unregistred user!
两个Win95应用程序之间发送消息可以轻松搞定。
但在同一个Win95操作系统下DOS应用程序怎么向Win95应用程序发消息?
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
具体一点行吗?
 
D

doubt

Unregistered / Unconfirmed
GUEST, unregistred user!
待我详细道来,

事情是这样的:
  有一个老DOS程序,因需要现要在Win95下运行,
并且运行在前台。与此同时,Win95还在后台运行了一
个Delphi编写的Win95程序。
  这个DOS程序接受用户的输入,并且会时不时向这
个后台的Win95程序发送一个字串,然后Win95根据这个
字串完成某特定功能。
  这是一个DOS程序跟Win95程序通讯的问题,好象用
DPMI和Vxd可以干,但如何具体的干?

  如此这般,有无良方?
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么又是VXD我被他搞的头都大了如果你的程序实时性
要求不高我有另一个方法,也不错非常简单!
你的dos程序往一个特定的文件里面写入一些"命令"
类似于WINDOWS的消息,然后在DELPHI中的程序中设
一个定时器,检查这个特定的文件,看是否有"命令"到达
如果有的话,清掉、或记录"命令",执行任务!
 
L

littlegrass

Unregistered / Unconfirmed
GUEST, unregistred user!
看这样行不行:
在内存或在指定文件中建立一个共享队列区域,存放来自DOS和Win
程序的信息,信息规则可以自己定义。两个程序都能对信息队列进行读
写操作,以实现两类程序的信息交换。
 
L

littlegrass

Unregistered / Unconfirmed
GUEST, unregistred user!
看这样行不行:
在内存或在指定文件中建立一个共享队列区域,存放来自DOS和Win
程序的信息,信息规则可以自己定义。两个程序都能对信息队列进行读
写操作,以实现两类程序的信息交换。
 
D

doubt

Unregistered / Unconfirmed
GUEST, unregistred user!
;实时性要求高,Win95程序要在1ms内响应,何况明明Win95程序是个服务程序, 被动接受消息, 但现在要改称客户程序, 主动查询信息, 有降低Win95性能的嫌疑。
有没有更好的方案?

 另:用共享内存怎么做?是用DPMI吗? Win95如何获取Dos数据区的地址?
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
Littlegrass:这不是和我的方法一样吗!
我前些日天刚刚收到一位大虾转给我的
HOOK的例子,但是不能用,不知道对你有用没?
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
定时器的间隔小一点不就行了!
Win95代替DOS是必然的,要照顾DOS即使有降低Win95性能的嫌疑
只要能解决问题,只好牺牲点资源了
 
D

doubt

Unregistered / Unconfirmed
GUEST, unregistred user!
唐兄的方案简单好用,在下可勉强接受。

不过好像Dephi的定时器不能达到1ms, 何况Win95高频访问文件(<1ms),这 . . .

今后会考虑改到Win95下,但这个DOS程序现在要急用,这也没有办法,

呼唤更好的方案!
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
Help in Delphi about Interval:
Use Interval to specify any cardinal value as the interval between OnTimer events. The default value is 1000 (one second).
共享一块内存中要比访问文件快的多,不过
就要麻烦的多了!:)
 
L

littlegrass

Unregistered / Unconfirmed
GUEST, unregistred user!
应该是一样的思想。
刚才见到'...VXD...'就没敢继续往下看,于是就写了我的想法! ^_^
 
P

pegasus

Unregistered / Unconfirmed
GUEST, unregistred user!
不用定时器, 还是用"文件系统变化通知"比较好, Win32程序监
视DOS程序的输出文件, 当文件变化时, 让操作系统通知您,
如果您嫌磁盘文件还不够及时, 那么就把文件放在虚拟盘上,
行了吧?!
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
文件变化的消息能捕获得到吗?
即使能也是Win32的消息可以,
DOS的能吗?
 
A

aimingoo

Unregistered / Unconfirmed
GUEST, unregistred user!
哎呀,这么个问题不会这么麻烦嘛。
在Win32中有一个MessagesHook,这意味着每一个消息都会经过这个钩子
的过滤。一个钩子程序接受的参数主要有hWnd和其它参数。而每一个dos
进程都有hWnd的,所以也不成问题。接下来,钩子程序是一个.DLL,在
DOS程序中,是有方法调用.DLL中的例程的。所以,没有问题了。

实现方法:
1. 写一个钩子程序,钩挂MessagesHook,监视CustomMessageID,并处理
相关的操作。
2. 在DOS程序中取出进程hWnd,并向系统发出CustomMessageID
3. OK.
 
D

doubt

Unregistered / Unconfirmed
GUEST, unregistred user!
>2. 在DOS程序中取出进程hWnd,
Dos怎么取hWnd? 是中断调用吗?

>并向系统发出CustomMessageID
Dos 怎么发CustomMessageID?

另外我的DOS程序是用Borland Pascal 7写的
可没有PostMessage之类的东东
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
aimingoo:
有例子让大家研究一下吗?
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
hi doubt:
程序解决的怎样了!
 
D

doubt

Unregistered / Unconfirmed
GUEST, unregistred user!
让我再看看
 
P

pegasus

Unregistered / Unconfirmed
GUEST, unregistred user!
>文件变化的消息能捕获得到吗?
>即使能也是Win32的消息可以,
>DOS的能吗?

Dos application writes its requests to file,
and Win32 application monitor the change of filesystem, (just need
monitor that file only) so that when the file changes, it can response
to the content of that file, :)

DOS application needs know nothing about messages.
 

Similar threads

D
回复
0
查看
742
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部 底部