哼哼,这儿有谁敢自称高手?看看歪就歪狰狞的面孔!(300分)

  • 主题发起人 歪就歪
  • 开始时间
借鉴一下杀毒软件的时时监测器,如何?
 
另外,真想人家帮你,把你写的代码拿来,我想没人会从头试每一个API然后再解决你的问题的<br>
 
maybe i can help you<br>but i know i can't<br>just maybe
 
ZHAOYIPENG:谢谢,我也曾想把代码贴出来,但太长,如果确有人声明有时间、意愿<br>和能力帮我,我会自动把代码EMAIL给他。<br><br>小猪:谢谢,你的回答歪就歪翻译如下:<br><br>“也许我能帮助你”〖歪就歪鞠躬,心道:这回来的这家伙也许是跟救命稻草〗<br>“但我知道我不能”〖歪就歪直起身子〗<br>“仅仅是也许……”〖歪就歪重新鞠躬:谢谢帮助我刷新本题目〗<br><br>
 
这个问题应该到汇编的论坛去问,理论上delphi实现不了(就象用asp实现delphi的功能一样难)
 
哈,y9y,我是觉得这个问题不错,将她收藏了。<br>顺便开个玩笑。<br>分嘛,有的话最好,没也无所谓。<br>但如果你这问题被解答了,能告知解决方法将是我最感动的。
 
应该可以实现,<br>我没有精力去试,<br>不过我可以把我的理由写下来:<br>开一个dos窗口,运行edit<br>开一个资源管理器,随便找一个目录(如:c:/test),把它drag到任务栏上的dos窗口上(不要松手),<br>dos窗口打开,继续drag到edit的窗口中,<br>发现edit窗口可以接受所drag的东西,<br>手累了吗,<br>那就松开吧<br>可以看见,<br>字符串"c:/test"象打太极一样一个字符一个字符的蹦了出来。<br>注意,仔细观察可以发现edit的菜单同时晃个不停,<br>呵呵,看了几遍?<br>应该是看不出什么名堂的,<br>其实看这暂时是没什么用的,<br>关键要看哪呢?<br>不绕弯了,<br>我们再往上看一看,<br>看dos窗口上的paste按钮没有?<br>在我们松手时,<br>它自动弹下去了,<br>然后又弹回来了,<br>同时,我们所drag的字符串就被edit接收了<br>回顾一下:<br>1.drag一个路径或完整的路径和文件名到一个dos窗口里的edit中松开;<br>2.dos窗口的paste弹下;<br>3.edit的菜单狂晃不已;<br>4.所drag的字符串被自动输入到edit中。<br><br>于是,<br>我想能被windows本身实现的东西,我们一定也能实现,<br>不过是时间问题。<br><br>Good luck<br>
 
老歪,新的INT16应该是一个翻译——把Windows程序发送的命令转换为控制你原DOS程序<br>的按键序列,而不是要把按键吃掉,DOS程序当然能够得到了。
 
amo:<br>&nbsp; 你所看到的现象,实际上是EDIT与Windows配合完成的。而老歪的问题是那个DOS程序本身<br>不行而他又不想去改写...那当然就比较麻烦了。
 
龙丹:<br><br>对,经过我反复考虑,现在我也怀疑,我程序的问题很可能是出在这里:<br><br>目前WINDOW程序成功的把键盘的按键送到CONSOLE的输入BUFFER里了,DOS程<br>序如果是READLN,那么能顺利的从INPUT BUFFER里读到这些键值。但如果是<br>菜单形式的程序,可能有于某种原因,而没有收到这些键值。<br><br>所谓某种原因,估计是DOS程序里,菜单响应按键是用的键盘中断响应,而<br>READLN只是一个单纯的等待输入。由于CONSOLE的INPUT BUFFER里的东西不<br>会去触发DOS的键盘中断,所以EDIT.com没有动作……<br><br>要解决这问题,似乎光有WINDOW的编程能里还不够,还要有高深的对DOS系统<br>的理解。对此,我不在行。<br><br>至于你说的TSR程序截取键盘中断,我非常怀疑(恕我直言),因为我觉得<br>CONSOLE的INPUT BUFFER里的按键的SCAN CODE(扫描码?)根本不会触发<br>DOS的键盘中断。<br><br>而且,我也很怀疑,在CONSOLE里运行的DOS,其中断到底如何实现。我觉得<br>对中断的处理一定与过去单纯DOS系统的中断大不相同。这是因为,每一个<br>CONSOLE程序,都将被分配其独立的内存,包括低端的中断表(甚至完全不<br>再是DOS的中断向量表〕。你可以尝试在一个CONSOLE里运行一个TSR,它不<br>对另外一个CONSOLE起任何作用。如果你真是成功的修改了中断向量表,那<br>系统估计多半要乱套了。<br><br>当然,这有点说远了,我的想法是,你提的方案“不适合”的原因是:WINDOWS<br>程序向CONSOLE的INPUT BUFFER里写入的键值不会导致DOS的中断响应。<br><br><br>AMO:<br>“应该可以实现,我没有精力去试”,谢谢了,高手们都这么说!可惜,不是<br>歪就歪嘴上不积德,您的回答没说到点儿上:<br><br>你举的例子不过就是简单的CLIPBOARD的功能,用CLIPBOARD在WINDOWS和DOS<br>之间传递信息,是一件很容易的事,我们的旧版程序就用过这方法。<br><br><br>所有人:<br><br>事到如今,我也不怕落得没人理,只一个人在这儿哼哼的下场了,我要说的是,<br>也是重申的是:<br><br>有胆量敢在:“这儿有谁敢自称高手”这贴子下回答的高手们,请给出个可行的<br>代码出来。花1000分也好,3000分也好,倾家荡产也好,歪就歪心服口服。否则,<br>请让网管在三年后来收这个贴子吧!<br><br>红铜县里没好人!大富翁里无高手!<br><br>歪就歪砸场子来了!哇呀呀呀呀呀………
 
y9y:<br>&nbsp; 你钻到牛角了。换个角度看问题把!
 
不行,我宁肯倾家荡产,也得……除非能证明这法子根本就走不通!<br><br>我砸!我砸!<br><br>歪就歪乱舞着烧火棍,把大富翁闹得天翻地覆,高手们四下逃窜,无影无踪。<br>
 
有一点,我不太明白,你为什么非要用WriteConsoleInput不可呢,不能够采用别的通讯方式吗?<br>
 
歪就歪:我有一个方案不知行不行:<br>做一个TSR截获DOS的中断的键盘输入功能。<br>你的Windows程序照常发数据,在TSR中将收到的数据转换为可写到键盘缓冲区数据后写到键盘缓冲区,这样Edit应该可以<br>收到了。<br>
 
呵呵,<br>不是amo摆酷,实在没时间为y9y打工;(,<br>不过我还是认为可以实现,<br>走tsr的路希望不大,<br>不如走vxd之类的路,<br>哪位有空的去研究一下VKD(Virtual Keyboard Device )<br>看看它的说明:<br>The virtual keyboard device virtualizes keyboard input, <br>supports Windows shell hotkeys, <br>provides for pasting text into a virtual machine, <br>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>and manages keyboard input when in message mode.<br>看看它提供的服务:<br>The VKD provides the following services: <br>VKD_API_Force_Key <br>VKD_API_Get_Version <br>VKD_Cancel_Hot_Key_State <br>VKD_Cancel_Paste <br>VKD_Define_Hot_Key <br>VKD_Define_Paste_Mode <br>VKD_Disable_Keyboard <br>VKD_Enable_Keyboard <br>VKD_Filter_Keyboard_Input <br>VKD_Flush_Msg_Key_Queue <br>VKD_Force_Keys <br>VKD_Get_Kbd_Owner <br>VKD_Get_Msg_Key <br>VKD_Get_Shift_State <br>VKD_Get_Version <br>VKD_Local_Disable_Hot_Key <br>VKD_Local_Enable_Hot_Key <br>VKD_Peek_Msg_Key <br>VKD_Put_Byte <br>VKD_Reflect_Hot_Key <br>VKD_Remove_Hot_Key <br>VKD_Set_Shift_State <br>VKD_Start_Paste <br><br>再看MSDN中有这样的例子:<br>When a Windows-based application calls the virtual keyboard device (VKD) service<br>&nbsp;VKD_API_Force_Key to simulate keystrokes into a virtual 8086-mode MS-DOS session <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ &nbsp; &nbsp;<br>without requesting a simulated change in shift state, Windows crashes. <br><br>看看VKD_API_Force_Key:<br>Forces a key into a virtual machine as if it were typed on the keyboard.<br>&nbsp;Because the VKD scans these forced keys for hot keys, <br>forcing VKD hot keys is allowed. Uses Flags.<br>&nbsp;Clears the carry flag upon success, sets it upon failure. <br><br>所以,<br>如果使用VXD你的问题是可以解决的,<br>不过......<br>amo现在是没空帮你解决了;-)<br>求人不如求已,<br>自己想办法吧<br><br>y9y是不是找到点感觉了?
 
呵呵,高手我不是。只是来听听,不知可否?<br>(高手的事你不懂,还是躲得远远吧,·#¥·%¥#¥……)
 
抱歉,各位,因为时差的关系,我回覆的晚了。<br><br>龙丹:似乎只有这一条路了,不然我无法得到CONSOLE显示的内容<br><br>HEXI:你的想法和龙丹的相同,见前述。<br><br>AUTUMN:唉,似乎没有别的办法,我的DOS程序集五年的代码,全是针对硬件<br>的,我不会VXD,无法在WINDOW平台上实现和硬件打交道的能力,只有保留这些<br>DOS程序,通过CONSOLE控制它。整个系统是这样的:<br><br>[WINDOW程序] &lt;=X=&gt; [DOS程序] &lt;==&gt; [在计算机扩张槽内插入的HOST PC,DOS系统]<br>我要实现的是标X处的能力。<br><br><br>AMO:<br>高手不愧为高手,连VXD都搬出来了。谢谢你提供的资料,我读了。对我来讲,VXD<br>的境界已经超出了我的智力。1000分要一段能够运行的VXD代码,也实在是赤裸裸<br>的无耻的剥削,不,我没权力要求你为我打工。<br><br>但我有句不甘心的话:<br><br>就如总有WINDOWS得题目被告知用HOOK来实现一样,也总有些难题,最终我被告<br>知用VXD,当然,还有一个办法就是可以进入系统零级,做你任何想作的事。武功<br>到了那个境界,自然是心之所欲,招之所指。自然可以向武林后辈教导什么“无招<br>破有招”。<br><br>可对于我这样水平的人,这些几乎成为标准答案的招术/办法解决不了什么问题,<br>因为我实在需要一个符合自己能力的解决方案。<br><br>你可以问问,大富翁里,有几个是把VXD玩的转的?还是歪就歪年迈色衰,做了几<br>年的DLEPHI程序员,竟然连VXD都不会编?<br><br>求人自然不如求己,歪子要是能用VXD解决这问题,自然一根烧火棍,打遍天下,<br>何必要出这1000分。老实讲,那DOS程序就是因为和硬件打交道,我没有能力用<br>VXD技术把它从DOS传到WINDOW上,才不得不有了这个CONSOLE,才有了这问题。<br><br>真诚的感谢你的一番辛苦,我实在不该说上述的歪话,只是,呵呵,希望你别<br>介意。<br><br>风清扬拿着歪就歪的烧火棍,随意的比试,道:“心随意动,意再剑先,此乃<br>VXD的精要所在。。。你再试一次”,歪就歪战战惊惊接过棍子,学着挥出,却<br>是一招苍松迎客,气的风清扬大骂:“bendan!”<br>
 
y9y,试一下用delphi1写程序,用嵌入式汇编直接写键盘中断int 16h(记不清了,好象是这个)<br>,我记得以前看TP6的turbo vision 类库,它就没用dos中断,用的是bios中断int 16h来读<br>键盘缓冲区,int 16h是硬件中断,不知道delphi5编译的让不让运行,你试一下吧<br>反正怎么瞧你都象一匹死马了:))
 
歪就歪,<br>&nbsp; &nbsp; 前三步你都过了么,为什么我试了一下,老是出问题。能不能把你的代码给我邮<br>一份(如果可以,不胜感激。mailto:JJams_King@263.net)。<br>&nbsp; &nbsp; 至于你的情况,我现在只能凑凑热闹猜一猜。不知道会不会是扫描码的问题。我<br>觉得像edit这样的程序,一般都是直接拿扫描码的,可以看看在WriteConsoleInput时<br>给的扫描码是不是正确的。<br>&nbsp; &nbsp; 祝你好运!
 
歪就歪, 不用TSR/VXD,太吓人了<br>请看这里,好象人家只用 VB 和一点 C 就行了,<br>http://www.developersdomain.com/vb/articles/redirectpipe.htm<br><br>ps.请留下或email给我您的电话。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
885
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
570
import
I
顶部