2/05/2006

Jiangsheng的CSDN Digest (Jan 21 2006)


CSDN 讨论总结系列:






inet控件下载ftp文件后,下载的文件被存放在IE缓存文件夹中,如何自动清除(VB 基础类)





http://vbnet.mvps.org/index.html?code/internet/deleteurlcache.htm


通过API访问IE Cache :

http://blog.csdn.net/technofantasy/archive/2002/03/29/2962.aspx





微软的MSWORD,MSEXCEL可以嵌入在IE中,Outlook可以吗? (VC/MFC ATL/ActiveX/COM )





Word and Excel are ActiveX Document servers which is why you can embed them within a web page.
Outlook is not an ActiveX Document server.





ATL的线程函数中 FIRE EVENT出错,其它类中FIRE EVENT 就OK ? (VC/MFC 进程/线程/DLL )





ATL和MFC都不是线程安全的
参考http://www.mvps.org/vcfaq/com/11.htm





以不同身份登陆域以获取不同的服务权限 (C++ Builder 基础类 )





如何可以做到不转换Windows用户的情况下,以另一个用户的身份访问域服务器,并且结束时可以注销该用户身份。
参看了一些资料,可能要用到LogonUser,DuplicateTokenEx,CreateProcessAsUser这些函数,有谁可以提供一些思路或上述函数的执行代码。谢谢!





你可以用CreateProcessAsUser函数另外启动一个进程,之后使用进程间通讯(http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp )的方法来控制启动的程序。用LogonUser、CreateProcessAsUser,要SE_TCB_NAME权限,且即使你是administrator,也很难在程序中得到要SE_TCB_NAME权限(我从未成功过)
建议用CreateProcessWithLogon.

其实,还有一个最简的方法,就是用系统的runas命令:
如:
runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""


你可以在控制面板->管理工具->本地安全设置->用户权利指派中将"以操作系统方式运行"赋给你要设SE_TCB_NAME权限的用户,这样你上面的程序应该可以运行,但有安全隐患,因为SE_TCB_NAME是系统的最高权限





请教一个多国语言字符串转换的问题 (VC/MFC 基础类 )





我的程序中要求一个功能,当从其他窗口,比如ie中,将一段文字拖到本窗口时,要接收到字符串并显示出来。
现在功能已经基本实现,拖过来英文,中文,日文,俄文,法文都没问题,但是德文却总有些字符显示乱码。
我试了其他的一些软件,qq和vc6都显示不正确,但是ie,msn,vs.net,office等都可以正确显示。
我想是我接收到字符串后没有做正确的转换,但是不明白该如何转换,接收到的字符串是以什么格式存储的。
希望有过类似经验的能指点一下,不胜感激。

我接收的代码大致如下:
BOOL CTmp3View::OnDrop(COleDataObject *pDataObject, DROPEFFECT dropEffect, CPoint point)
{
STGMEDIUM stgm;
FORMATETC fm = {CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
char* cpData = NULL;
DWORD dwSize = 0;

//得到数据和数据的字节数
pDataObject->GetData(CF_TEXT, &stgm, &fm);
cpData = (char*)GlobalLock(stgm.hGlobal);
dwSize = GlobalSize(stgm.hGlobal);

//处理数据并显示
... ---->> //我想这里应该对cpData有所处理

return CView::OnDrop(pDataObject, dropEffect, point);
}





CF_UNICODETEXT





vc6+ado+access删除表内所有记录时, 如何复位自动增加的整型字型至0? (VC/MFC 基础类)






也就是说, 再次增加记录时, 自动增加的整型字段从1开始计数, 而非紧接原序号.





需要重构数据库。参见http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odeopg/html/deovrencryptingdatabase.asp





Access数据库函数问题(C++ Builder 数据库及相关技术 )





使用Access数据库,用MS Access建一个查询Table1_View,SQL语句如下:
SELECT MyName, StrReverse(MyName) AS ReMyName FROM Table1 ORDER BY StrReverse(MyName)

在MS Access中运行正常,可以打开Table1_View记录集,但要在C Builder中打开这个记录集时,返回错误信息:表达式中‘StrReverse’函数未定义。

请问是什么原因?如何解决?





Access中不支持从外部直接访问这个函数。参考http://support.microsoft.com/?kbid=210439





于OCX调用方面的问题(.NET技术 VB.NET)





我现在有一个用DELPHI做的OCX控件,用VB.net开发一个网站,需要使用它显示特定图形,图的数据是从服务器中的某个目录中获取的,应当如何做?
我通过工具栏增加OCX后,其Runat属性是灰的,服务器脚本中不能使用;我通过项目引用后使用CREATOBJECT的方法能创建,但又无法与页网中放置的控件联系起来,这是为啥呀????
OCX是不是不能做为服务器端组件运行?如果不能的话,那要实现我的想法的话有何高招??





在客户端显示图形的OCX为什么要在server上运行?
自己写个user control封装一下<Object>代码就可以了





如何获得网页中的元素位置信息 (VC/MFC HTML/XML )





打开一个网页,浏览器知道图片对应的位置,知道一个表的对应位置,现在我要在程序中解析一个页面中的每个元素的坐标信息,应该用那个组件啊,





http://blog.csdn.net/jiangsheng/archive/2003/11/09/3795.aspx

You can also determine the location, width, and height of an object by using a combination of the IHTMLElement::offsetLeft, IHTMLElement::offsetTop, IHTMLElement::offsetHeight, and IHTMLElement::offsetWidth properties. These numeric properties specify the physical coordinates and dimensions of the object relative to the object's offset parent.

For more information about how to access the dimension and location of objects on the page through the Dynamic HTML (DHTML) Document Object Model (DOM), see Measuring Element Dimension and Location.

http://msdn.microsoft.com/workshop/author/om/measuring.asp





IPicture中get_Width得到的OLE_XSIZE_HIMETRIC到底是什么含义(VC/MFC 图形处理/算法 )





MSDN里解释如下:
OLE_XSIZE_HIMETRIC (long) The width of the picture

照片的宽度?
我使用一幅640*480的图片,得到的width、height分别为16933、12700。
请问这个数值有什么实际的含义?





phisical size of the picture converted into HIMETRIC
reference:
http://msdn.microsoft.com/msdnmag/issues/01/10/c/
http://msdn.microsoft.com/library/en-us/gdi/cordspac_3qsz.asp





使用CListCtrl显示大批量缩略图(VC/MFC 界面 )


不想删除ClistCtrl的自定义数据,该怎么办?






由于工作需要大批量显示SolidWorks文件的缩略图(一万个左右),我现在使用的是虚CListCtrl既style = LVS_ICON|LVS_ALIGNTOP|LVS_OWNERDATA|WS_VISIBLE|WS_BORDER|WS_CHILD|LVS_SINGLESEL, 对于SolidWorks文件可以读成bitmap,由于文件太多内存存不下,我现在想利用文件缓存,来缓存我生成的这些bitmap,有没有这样的方法,最好有例子.


我看了vcmute(横秋)有关这方面的解释提道了IExtractImage,不知道能解决我的问提吗?
http://community.csdn.net/Expert/topic/4134/4134216.xm8l?temp=.4045069
提供的连接没打开.





既然用了虚拟列表,一次显示的缩略图也不会超过几百个吧,这样对内存的需求就减少了很多。至于缓存,不需要加载所有的缩略图,使用后马上释放掉就可以了,利用双缓冲,绘制到一个内存DC上,刷新的时候再调取需要的缩略图。


我用LV_ITEM Item的方式insert到一个list,其中new了一个自己的在doc中定义的数据结构,这个结构由于在其他地方还要用到,所以当 clistctrl有更新时不能删除,但要更新一个ClistCtrl必须先调用clistctrl::deleteallitem,在 ClistCtrl::OnDeleteitem中就要删除条目才能将新增加的item给加进去,现在我只想更新条目,由想留住自己的在doc中定义的数据结构供下次调用,请问ClistCtrl有没有什么函数只清空显示区域,而不删除我的数据结构?

难道我只得定义两个结构吗?一个用于list显示,一个用于list历史数据得保存?





http://blog.csdn.net/jiangsheng/archive/2003/11/20/3796.aspx


虚列表没有自己的数据,你需要自己把数据排好之后通知虚列表更新显示。文件大小可以用用IShellFolder2::GetDetailsEx获得


对于你需要的排序,你可以用CRT的qsort函数。使用IShellFolder::EnumObjects的原因是性能。用Win32的 FindAPI的话,在函数返回之前会搜索完整个目录,但是用虚列表的话,可以只获取正在显示的文件的信息(当然,在我的代码中还缓存了文件列表的开头和末尾,这是用户经常查看的位置)。



这个示例没有在空闲时释放缓存,你可以自己决定缓存的大小上限,然后改写PrepCache函数。


你也可以使用资源管理起来显示图片http://www.codeproject.com/shell/thumbextract.asp





请问在 VBscript 中如何调用 windows API ?有现成的ActiveX封装吗?(VC/MFC ATL/ActiveX/COM )





我想使用脚本语言做一些自动操作其他应用程序界面的东西,有点类似 rational robot
首先想到了 wsh 和 vbs, 但是好像 vbs 中不能直接调用 PostMessageA 之类的 API 函数,
借贵宝地问一下:
1. 是否有现成的 ActiveX 封装了 windows API ?
2. 除了使用robot之类的商业软件,您是否有更好的方法建议我?





try host implementation instead
see http://blog.csdn.net/jiangsheng/archive/2003/11/09/3795.aspx
That is basically imposing scripting support to an MDI version of MFCIE.





DLL中的DoDataExchange (VC/MFC 基础类 )





我程序中加载了两个DLL,都封装了窗口类,并且都影射了控件变量
只加载其中的一个没问题,可是两个都加上之后,在DoDataExchange的时候就会出错
通过GetDlgItem也找不到该控件,这是为什么?





sounds like resource conflict.
Reference:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;150121





ActiveX和DLL利用回调通讯,如何在回调中产生事件(VC/MFC ATL/ActiveX/COM)





我要调用一个DLL进行一些工作,调用和返回不在一个线程中。所以我使用回调函数的方法返回数据。联系DLL的是一个ActiveX控件,因为我使用了回调函数,所以我必须向DLL提供一个静态函数地址。而我要在这个回调函数中产生一个事件,ATL的事件是在类中生成的,我无法在静态函数中调用。





You can use an IDispatch parameter instead of a callback function (in other words, event handler), and call IDispatch::Invoke to call the function (in other words, fire the event), which calls your function indirectly in its implementation. A typical example is AJAX (Asynchronous javascript and XML).



COM 支持连接点对象的啊,功能类似回调函数。
继承 IDISPATCH 做一个出接口就行了,很方便的





用wininet做个多线程的浏览器。线程少的时候正常,多至30的时候锁死(VC/MFC 进程/线程/DLL )





主线程浏览网页,根据网页里的图片联机,产生子线程,下载玩就自动清除。
当多至30的时候就都挤死在chttpfile::sendrequest了。对底层网络访问控制是由ntdll完成的。





INFO: WinInet Limits Connections Per Server
http://support.microsoft.com/kb/q183110/





如何在VC,BC环境下获取按键(C/C++ C语言 )





我有TC版的一个五子棋游戏,现在必须要在VC环境或BC环境下编译。
但是TC下有bios.h,和很多相关的函数,比如bioskey来获得按键内容。
而这个头文件在VC,BC上是没有的。请问在VC环境,BC环境下有相应功能的替代函数么?
或者告诉我,如果要获得上,下,左,右,enter,space按键,在VC环境,BC环境怎么做?

注:我这里的VC,BC并不是MFC等等,只是一个C++编译环境。





这些都是Borland的库函数。你可以自己实现这些函数。举例来说,你可以用getch来获取按键,或者处理WM_KEYDOWN消息。没有gotoxy的话,不过你可以自己写一个:

#include <windows.h>
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
 


windows 下面,你想取得按键信息。处理 WM_KEYDOWN 消息就行了。例如:
case WM_KEYDOWN:
switch(wParam):
{
case VK_RETURN://回车
.........
}
上下左右键分别是VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT
Enter, Space键分别是VK_RETURN,VK_SPACE

只要处理这些消息就可以了。






怎么获得iframe中的内容?(VC/MFC HTML/XML)





当一个页面中的iframe内容来自另外一个网站的时候,通过IHTMLFramesCollection2。item获得 IHTMLWindow2指针,然后调用IHTMLWindow2::get_document获得的总是空指针。同样的情况出现在遨游浏览器的 viewPage插件里。在这种情况下,viewpage得不到ifram中的链接。
同过得到ifram内容的url,再navigate(url)似乎可以,但是有没有不用再次连接的方法呢?





基于IE的安全性设定,跨框架的DHTML访问可能被拒绝。参见Internet Explorer的安全设置。


No comments: