如果都是HTTP格式的就很好办,加上NMHTTP控件,用GET或者POST来提交这个
连接,如果成功,在NMHTTP1Success的事件里就可以跟踪到,否则在NMHTTP1Failure里就可以跟踪到事件发生。
连接,如果成功,在NMHTTP1Success的事件里就可以跟踪到,否则在NMHTTP1Failure里就可以跟踪到事件发生。
解决方案 »
- 对不同窗体的语句能否统一?
- 再问为什么值写在控件里能返回数据,写在代码里运行却出错?
- 那位同仁可以给在下讲讲QQ的原理,如有代码更佳
- 万分火急:如何把图片存储到access中,并且如何根据记录正确显示access中的图片?
- 企业信息管理师
- ADO问题
- 调用函数指针为什么执行出错了?
- 帮我看看http://www.csdn.net/expert/topic/548/548682.xml?temp=.5898249
- 用ADO边结数据库如何加入一条记录
- 我需要自己做安装程序,请问各位大虾,如何装BDE(Delphi 5)
- CSDN的xml贴子怎么保存了以后察看啊????
- 各位老大.这个问题如何解决?谢了.
FileExists("绝对路径") //比如"\\192.168.0.193\fff\fff.txt"下面是别人一个在线更新的代码,看看有没帮助呢?
unit update_f;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TFlatGroupBoxUnit, TFlatButtonUnit, StdCtrls,
TFlatSpeedButtonUnit, TFlatEditUnit, TFlatMemoUnit, Psock, NMHttp,ShellAPI;type
TSimpleVersion=record
dwProductVersionMS: DWORD;
dwProductVersionLS: DWORD;
end;
TUpdate=record { Structure of update information }
Name:String[63];
Version:TSimpleVersion;
Date:TDate;
URL1:ShortString;
URL2:ShortString;
Update_Info:String;
end;
Tupdate_v = class(TForm)
FlatGroupBox2: TFlatGroupBox;
FlatGroupBox3: TFlatGroupBox;
FlatButton1: TFlatButton;
FlatButton2: TFlatButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
FlatMemo2: TFlatMemo;
FlatEdit1: TFlatEdit;
FlatSpeedButton1: TFlatSpeedButton;
NMHTTP1: TNMHTTP;
Label6: TLabel;
Label7: TLabel;
FlatMemo1: TFlatMemo;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
FlatSpeedButton2: TFlatSpeedButton;
FlatEdit2: TFlatEdit;
procedure FlatButton2Click(Sender: TObject);
procedure NMHTTP1Connect(Sender: TObject);
procedure NMHTTP1ConnectionFailed(Sender: TObject);
procedure NMHTTP1Disconnect(Sender: TObject);
procedure NMHTTP1HostResolved(Sender: TComponent);
procedure NMHTTP1Status(Sender: TComponent; Status: String);
procedure FlatButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FlatSpeedButton1Click(Sender: TObject);
procedure FlatSpeedButton2Click(Sender: TObject);
private
{ Private declarations }
Update_New, Update_Ori: TUpdate;
function AnalyseUpdate(Body: String; var Update: TUpdate): Boolean;
procedure DisplaySuggestion(b: Boolean);
public
{ Public declarations }
end;var
update_v: Tupdate_v;implementation
const update_text='http://127.0.0.1/update.txt';
{$R *.dfm}//取得当前使用版本的信息
function GetBuildInfo(FName:string):TSimpleVersion;
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
begin
VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
Result.dwProductVersionMS := dwFileVersionMS;
Result.dwProductVersionLS := dwFileVersionLS;
end;
FreeMem(VerInfo, VerInfoSize);
end;function SeparateVerStr(s:String):TSimpleVersion;
const
Separator = '.';
var
p:WORD;
v1,v2,v3,v4:WORD;
begin
if Length(s)=0 then Exit; p:=pos(Separator, s);
v1:=StrToInt(copy(s,1,p-1));
Delete(s,1,p);
p:=Pos(Separator,s);
v2:=StrToInt(copy(s,1,p-1));
Delete(s,1,p);
p:=Pos(Separator,s);
v3:=StrToInt(copy(s,1,p-1));
Delete(s,1,p);
v4:=StrToInt(s);
Result.dwProductVersionMS:=v1*$10000+v2;
Result.dwProductVersionLS:=v3*$10000+v4;
end;function Tupdate_v.AnalyseUpdate(Body:String;var Update:TUpdate):Boolean;
var
TmpStr,Ver:String;
function CenterStr(Src:String;Before,After:String):String;
var
Pos1,Pos2:WORD;
begin
Pos1:=Pos(Before,Src)+Length(Before);
Pos2:=Pos(After,Src);
Result:=Copy(Src,Pos1,Pos2-Pos1);
end;
begin
TmpStr:=CenterStr(Body,Format('[%s]',[LowerCase(Update_Ori.Name)]),Format('[/%s]',[LowerCase(Update_Ori.Name)]));
if TmpStr='' then Result:=False
else
begin
Ver:=CenterStr(TmpStr,'<ver>','</ver>');
Update.Version:=SeparateVerStr(Ver);
Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>'));
Update.URL1:=CenterStr(TmpStr,'<url1>','</url1>');
Update.URL2:=CenterStr(TmpStr,'<url2>','</url2>');
Update.Update_Info:=CenterStr(TmpStr,'<info>','</info>');
Result:=True;
FlatMemo1.Lines.Add('最新版本:'+Ver);
FlatMemo1.Lines.Add('发布日期:'+DateToStr(Update.Date));
FlatMemo1.Lines.Add('下载地址1:'+Update.URL1);
FlatMemo1.Lines.Add('下载地址2:'+Update.URL2);
end;
end;{ Compare tow versions whether need update, True stand for need }
function VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean;
begin
if (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) then
Result:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS
else Result:=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS;
end;procedure Tupdate_v.DisplaySuggestion(b:Boolean);
begin
FlatMemo1.Lines.Add('');
FlatMemo1.Lines.Add('青苔提示:');
if b then
begin
if VersionCheck(Update_Ori.Version,Update_New.Version) then
FlatMemo1.Lines.Add('找到一个更新的版本')
else
FlatMemo1.Lines.Add('对不起,青苔还未发布更新版本');
end else
begin
FlatMemo1.Lines.Add('查找版本更新情况失败,');
FlatMemo1.Lines.Add('请检查该版本是否正常,');
FlatMemo1.Lines.Add('或系统是否连上了Internet。');
end;
end;procedure Tupdate_v.FlatButton2Click(Sender: TObject);
begin
Close;
end;procedure Tupdate_v.NMHTTP1Connect(Sender: TObject);
begin
FlatMemo1.Lines.Add('已连接……');
end;procedure Tupdate_v.NMHTTP1ConnectionFailed(Sender: TObject);
begin
FlatMemo1.Lines.Add('连接失败!');
end;procedure Tupdate_v.NMHTTP1Disconnect(Sender: TObject);
begin
FlatMemo1.Lines.Add('断线中……');
end;procedure Tupdate_v.NMHTTP1HostResolved(Sender: TComponent);
begin
FlatMemo1.Lines.Add('正在解析地址……');
end;procedure Tupdate_v.NMHTTP1Status(Sender: TComponent; Status: String);
begin
FlatMemo1.Lines.Add(Status);
If NMHTTP1.ReplyNumber = 404 then
FlatMemo1.Lines.Add('更新文档没找到……');
end;procedure Tupdate_v.FlatButton1Click(Sender: TObject);
begin
FlatMemo1.Clear;
FlatMemo1.Lines.Add('系统消息:');
FlatMemo1.Lines.Add('开始查看更新信息……');
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
try
NMHTTP1.Get(update_text);
FlatMemo1.Lines.Add('');
FlatMemo1.Lines.Add('开始分析……');
if AnalyseUpdate(NMHTTP1.Body,Update_New) then
begin
Label6.Caption:=Format('%d.%d.%d.%d',[
Update_New.Version.dwProductVersionMS shr 16,
Update_New.Version.dwProductVersionMS and $FFFF,
Update_New.Version.dwProductVersionLS shr 16,
Update_New.Version.dwProductVersionLS and $FFFF
]);
FlatEdit1.Text:=Update_New.URL1;
FlatEdit2.Text:=Update_New.URL2;
Label7.Caption:=DateToStr(Update_New.Date);
FlatMemo2.Lines.Add(Update_New.Update_Info);
FlatMemo1.Lines.Add('已经分析成功!');
DisplaySuggestion(True);
end else
begin
FlatMemo1.Lines.Add('不能找到更新信息!');
FlatMemo1.Lines.Add('分析失败!');
DisplaySuggestion(False);
end;
except
DisplaySuggestion(False);
Application.MessageBox('程序更新失败!','提示',MB_OK);
end;
end;procedure Tupdate_v.FormCreate(Sender: TObject);
begin
Update_Ori.Name:='mosstools';
Update_Ori.Version:=GetBuildInfo(ParamStr(0));
Label8.Caption:=Format('%d.%d.%d.%d',[
Update_Ori.Version.dwProductVersionMS shr 16,
Update_Ori.Version.dwProductVersionMS and $FFFF,
Update_Ori.Version.dwProductVersionLS shr 16,
Update_Ori.Version.dwProductVersionLS and $FFFF
]);
end;procedure Tupdate_v.FlatSpeedButton1Click(Sender: TObject);
begin
if FlatEdit1.Text<>'' then
ShellExecute(Handle,nil,PChar(FlatEdit1.Text),nil,nil,SW_SHOWNORMAL);
end;procedure Tupdate_v.FlatSpeedButton2Click(Sender: TObject);
begin
if FlatEdit2.Text<>'' then
ShellExecute(Handle,nil,PChar(FlatEdit2.Text),nil,nil,SW_SHOWNORMAL);
end