1、首先是使用Flags时的疑惑:INTERNET_FLAG_HYPERLINK
INTERNET_FLAG_NEED_FILE
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_PRAGMA_NOCACHE
INTERNET_FLAG_RELOAD
INTERNET_FLAG_RESYNCHRONIZE如果我只想从Cache读取,我该使用什么标志?如果我不想从Cache读取,我是使用INTERNET_FLAG_RELOAD还是INTERNET_FLAG_PRAGMA_NOCACHE?还是同时使用?那么INTERNET_FLAG_NO_CACHE_WRITE是否应该加上呢?还有INTERNET_FLAG_HYPERLINK、INTERNET_FLAG_RESYNCHRONIZE 在决定自动更新时应该使用哪一个?INTERNET_FLAG_NEED_FILE起到什么作用?2、我在程序中使用多线程,有的线程下载网页只从Cache读取,有的需要每次读取更新网页。在使用时,刚运行时工作正常,可是运行了一段时间之后,发现后者读到的总是Cache中的内容,即无法自动更新。这到底是怎么回事?我也使用了像 INTERNET_FLAG_RELOAD 这样的标志,为什么好像不管用了呢?难道是多个线程之间相互干扰?不知大家有无这方面的经验,麻烦指点一二。
INTERNET_FLAG_NEED_FILE
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_PRAGMA_NOCACHE
INTERNET_FLAG_RELOAD
INTERNET_FLAG_RESYNCHRONIZE如果我只想从Cache读取,我该使用什么标志?如果我不想从Cache读取,我是使用INTERNET_FLAG_RELOAD还是INTERNET_FLAG_PRAGMA_NOCACHE?还是同时使用?那么INTERNET_FLAG_NO_CACHE_WRITE是否应该加上呢?还有INTERNET_FLAG_HYPERLINK、INTERNET_FLAG_RESYNCHRONIZE 在决定自动更新时应该使用哪一个?INTERNET_FLAG_NEED_FILE起到什么作用?2、我在程序中使用多线程,有的线程下载网页只从Cache读取,有的需要每次读取更新网页。在使用时,刚运行时工作正常,可是运行了一段时间之后,发现后者读到的总是Cache中的内容,即无法自动更新。这到底是怎么回事?我也使用了像 INTERNET_FLAG_RELOAD 这样的标志,为什么好像不管用了呢?难道是多个线程之间相互干扰?不知大家有无这方面的经验,麻烦指点一二。
解决方案 »
- 有个3MB的数组,int64的. 放数据库/txt还是直接用数组呢?
- 在cxgrid中如何将0值显示为空
- 有哪个大虾能给一个计算时间的代码
- 请问如何响应TabControl上的按钮点击事件!如:OnDoubleClick!
- 怎样把Oracle消息传递给Dephi
- 未过滤的异常的自定义处理程序
- ■■[HOT]: 关于提高CSDN访问速度的若干决议 ■■
- 可执行程序或者DLL中的资源怎样提取呢?
- chm格式的帮助哪为大虾知道用什么工具作的!help!!!!!
- 哪们大侠有DELPHI写的三层结构的东东,??
- 请问TControl(Components[I]).Name是什么类型的?
- 散分---求一公司名
var
hNet,hServer: HINTERNET;
strURL: String;
begin
strURL := 'http://www.yahoo.net'; { Open an internet session }
hNet := InternetOpen('Project1', // Agent
INTERNET_OPEN_TYPE_PRECONFIG, // ①AccessType
nil, // ProxyName
nil, // ProxyBypass
0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE
{Agent contains the name of the application or entity calling the
Internet functions} { See if connection handle is valid }
if hNet = nil then
begin
ShowMessage('Unable to get access to WinInet.Dll');
Exit;
end; { Connect to the Http Server }
hServer := InternetOpenURL(hNet, // Handle from InternetOpen
PChar(strURL), // Http server
nil, //header
0, //headers Length
INTERNET_FLAG_RAW_DATA,// ②flag
0); // User defined number for callback
if hServer = nil then
begin
InternetCloseHandle(hNet);
ShowMessage(Format('Host "%s" is not available',[strURL]));
Exit;
end
else begin
ShowMessage(Format('Host "%s" is OK',[strURL]));
end;
{...}
end;対上述的説明:
①AccessType
{ access types for InternetOpen }
const
INTERNET_OPEN_TYPE_PRECONFIG = 0; { use registry configuration }
{$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG}
INTERNET_OPEN_TYPE_DIRECT = 1; { direct to net }
{$EXTERNALSYM INTERNET_OPEN_TYPE_DIRECT}
INTERNET_OPEN_TYPE_PROXY = 3; { via named proxy }
{$EXTERNALSYM INTERNET_OPEN_TYPE_PROXY}
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4; { prevent using java/script/INS }
{$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY}②flag
{ flags for InternetOpenUrl: }
INTERNET_FLAG_RAW_DATA = $40000000; { receive the item as raw data }
{$EXTERNALSYM INTERNET_FLAG_RAW_DATA}
INTERNET_FLAG_EXISTING_CONNECT = $20000000; { do not create new connection object }
{$EXTERNALSYM INTERNET_FLAG_EXISTING_CONNECT}
同時「InternetOpenUrl」用「INTERNET_FLAG_RAW_DATA」 也不行嗎?
need to somehow tell IE to re-read the registry settings.
Does anyone know of an API call or message that will do this? } uses
WinInet; procedure IE_Reread_Registry_Settings;
var
HInet: HINTERNET;
begin
hInet := InternetOpen(PChar('YourAppName'), INTERNET_OPEN_TYPE_DIRECT,
nil, nil, INTERNET_FLAG_OFFLINE);
try
if hInet <> nil then
InternetSetOption(hInet, INTERNET_OPTION_SETTINGS_CHANGED, nil, 0);
finally
InternetCloseHandle(hInet);
end;
end; (注:給出一個「InternetSetOption」的例、強制増加「additional cache flags」
若要「INTERNET_FLAG_NO_CACHE_WRITE」、要用到「InternetSetOption」
我没用過、NI自己試試看...)