问:我想用VC做一个类似“词霸”的动态提示,当鼠标点上一个词
时,能弹出它的帮助。我知道可以用hook来监控鼠标,以得到它的
位置,但问题是该如何得到该位置处的文本?
|
答:这个问题相当复杂。而且词霸的实现也不单使用了hook技术,
这里只能大概说一下我自己的实现方法。我自己编写的程序使用16
位代码,首先接管TextOutEx等重要系统函数(类似在DOS下接管某
中断),然后在自己的处理函数中得到调用窗口句柄、对应文字和
坐标。当鼠标指向某处时,先取得该处窗口句柄,然后和内存中已
经保存的句柄进行比较,把符合要求坐标处的文字取出处理即可。
具体实现可以参考《未公开的Windows核心技术》一书,该书详细
地讲述了这种技术。
《电子与电脑》99年1期
|
问:我的光驱里无盘时,按弹出钮无法弹出。在资源管理器中的右
键菜单中选“弹出”多次只能弹出一次;用自动弹出软件
autojet.exe无论多少次都不能弹出光驱。而光驱里有光盘时,弹
出与关闭都很正常。请问这是怎么回事?另外,我想用Visual
C++ 实现光驱的弹出与关闭,应如何实现?
|
答:(1)
首先,如果您的光驱买回来就是这个样子,我不知道您的
第一张盘是如何放进去的(买回光驱的时候里面应该没有盘,按照
您的说法,光驱托盘无法弹出,也就没法放盘……)。所以我觉得
这有可能是光驱在使用中出现的故障,应该找出售光驱的厂商维修
或者更换。
(2) 如果您只是想用VC++来解决您光驱托盘无法弹出的问题,
那么我觉得您最好直接去维修光驱,因为这和您按弹出钮并没有什
么区别。如果您想了解编程实现,下面给出一种实现方法,即利用
MCI命令控制多媒体设备。首先是在您的程序中加入头文件:
#include
然后加入下面两个函数:
void CDEject()
{
MCI_SET_PARMS mciset;
mciSendCommand( wDevID, MCI_SET,
MCI_SET_DOOR_OPEN | MCI_SET_OFF,
( DWORD )( LPSTR ) &mciset );
}
void CDBack()
{
MCI_SET_PARMS mciset;
mciSendCommand( wDevID, MCI_SET,
MCI_SET_DOOR_CLOSED | MCI_SET_ON,
( DWORD )( LPSTR ) &mciset );
}
上面两个函数可以实现光驱托盘的弹出和收回。但是在使用这
两个函数之前,必须得到CD-ROM的设备ID号,这可以通过下面函数
来实现:
void GetAudioCDDevID()
{
MCI_OPEN_PARMS mciOpenParms;
mciOpenParms.lpstrDeviceType = "cdaudio";
if( mciSendCommand( 0, MCI_OPEN, MCI_OPEN_TYPE,
( DWORD )( LPVOID ) &mciOpenParms ) ) {
wDevID = 0;
return;
}
wDevID = mciOpenParms.wDeviceID;
}
这里,wDevID是CD-ROM的设备ID。在上面的例子里面它应该是
一个全局变量。需要注意的是,在程序运行结束的时候需要关闭该
设备以便其他程序能够接管它,具体实现是:
BOOL CloseCDDevice()
{
DWORD dwRes;
dwRes = mciSendCommand( wDevID, MCI_CLOSE, 0, 0 );
return ( !( ( BOOL ) dwRes) );
}
在具体实现的时候,一般按照:
GetAudioCDDevID();
CDEject(); // 或者CDBack();
CloseCDDevice();
的顺序来调用。
《电子与电脑》99年1期
|
问:我在NT上装了IIS3,
perl for win32。当我执行一个.pl程序时,浏览器显示出这样的错误:
"CGI错误
指定的CGI没有返回完全的HTTP页眉。它返回的页眉是:
**对不起,名字不能空着。
Please repost the name section of the guestbook.
Return to the Guest Book.**"
**号之间是这个.pl程序应该反馈的正确内容。
而我在NT的dos窗口下能正确地执行这个.pl程序。反馈的内容是:
<html><HEAD><TITLE>Missing
Name</TITLE></HEAD><BODY>
<FONT SIZE=5 COLOR=#996633><B>对不起,名字不能空着。</B></FONT>
<BR><BR>Please repost the name section of the
guestbook.<P>
Return to the <a
href="/samples/book.htm">Guest Book</a>.
</BODY></html>
看来这是个正确的html文件。是不是IIS没有看到我这个.pl文件的执行结果呢?您能帮我解
释吗?
|
答:在你的Perl程序输出之前加上这样一句:
print "Content-type: text/html\n\n";
这句话告诉IIS和浏览器,其后的内容是一个HTML文件。如果没有这一句,IIS(也包括一些
浏览器)往往不能正确处理CGI程序的输出内容。当然如果输出的不是一个HTML文件,而是其他类
型的内容,要根据HTTP的定义进行相应的修改。
《电子与电脑》98年12期
|
问:最近我听说了一些关于网上虚拟大学的情况,但了解得很少,很少见到详细报道的文章,希
望您能讲解一下。比如,目前有哪些大学开通了此类服务(国内的和国际的大学),他们的网
址、如何收费等详细情况。由于我没有MasterCard之类的卡,如何向国外大学付费?
|
答:目前的Internet虚拟大学正如当初电视发明后人们创立电视大学一样,在Internet上开展教
育活动正是利用了这一最新科技,并随着Internet的逐步普及而发展起来的。它们充分利用了WWW
的开放性和传输多媒体信息的特点,建立起拥有某方面专门内容的网点,并模仿大学的有关教学
机制,建立学生档案、设置课程、安排考试。目前国外有许多这方面网点,但由于收费一般采用
信用卡,而我国的银行还没有开办这方面的结算业务,所以目前唯一的方法是通过国外朋友替你
交费。国内这类的网点还不是很多,你可以先到Internet大学(http://www.iu.org.cn)或网际医
学虚拟大学(http://www.stic.gov.tw/stic/d/d19.htm)感受一下虚拟大学的味道。另外,你可以
通过中国教育科研网CERNET (http://www.cernet.edu.cn)关注这方面的信息,据我所知,国内许
多大学正在着手这方面的网点建设。
《电子与电脑》98年12期
|
问:请问如何用IPhone拨打到普通电话上进行通话?
|
答:在IPhone5版中提供有由PC向普通电话上呼叫的功能。要实现该功能,需要连接专门的
Internet到公共电话网络的网关,该网关用于将Internet上的数字呼叫转换为电话网的信号,它
由专门的IP服务供应商(ITSP: Internet Telephony Service
Provider)提供。在使用PC打普通电
话之前,要在服务提供商处注册并付费。然后通过本地ISP连接到Internet,输入对方的电话号码
(不同国家的国际电话收费不同,但一般远小于国际直拨)、网关服务器上注册的用户名和口
令,便可以建立到普通电话的连接,对方不会知道你是从PC上打过去的。由PC到电话的技术发展
势头强劲,国际上有专门的工业标准H.323v2。目前在中国只有香港有专门为IPhone5提供网关服
务的服务商,网址为http://www.biztrans.com。其他的国内电话网关服务主要针对的是
Net2Phone软件,你可以在http://www.net2phone.com.cn上获得详细的资料,并可以下载
Net2Phone,在国内许多城市都可以完成用户注册。
《电子与电脑》98年12期
|
问:我在使用Turbo
Browser98时发现如下问题:在预览窗口中显示Word文件时,只显示字符串;
对于txt文件,则英文的可正常显示、中文全为乱码。请问如何解决?
|
答:Turbo Browser是一个功能齐全的文件管理器,具有进行文件格式转换、预览、压缩等功能。
它支持多种文件格式,包括Word文档、电子表格、压缩文件、数据库文件、剪贴画等。Turbo
Browser可以直接预览这些文件的内容而不用启动相应的程序,这一功能是靠ActiveX技术来支持
的。你的问题应该是没有安装相应控件而导致的。要在Turbo
Browser中预览Office文档,需要安 装Office系统,并在Preview菜单中确认选中Use
ActiveX才行。需要注意的是,对于较大的DOC文 件,ActiveX方式会有些慢。至于文本中的中文,则应确保安装有中文系统并选择了正确的内码,
这样预览便不会出错。
《电子与电脑》98年12期
|
问:我在使用VC++
5.0编程时遇到了这样一个问题:我用AppWizard自动生成了一个视类为CRichEditView的工程,只在菜单中添加了一个命令。该命令的响应函数放在视类中,此函数中调用了GetRichEditCtrl()。ShowWindowText(String);其中String为一中文字符串,但编译运行后发现显示的是一堆乱码,不知该如何解决?
|
答:该问题涉及资源码的问题。应该使用字符串资源来进行中文字符操作。即先创立国别为P.R.C.的字符串资源文件,然后使用LoadString函数调用程序,随后可以进行对应显示。
|