info.pas
上传用户:hbtcygglw
上传日期:2007-01-07
资源大小:281k
文件大小:4k
源码类别:

其他

开发平台:

Delphi

  1. unit info;
  2. interface
  3. uses Windows,SysUtils,dialogs,WinSock;
  4. type
  5. TFriendInfo=class
  6.     public
  7.     Id,Name:String;
  8.     strIp:String;
  9.     nIp:DWORD;
  10.     nPort:WORD;
  11.     nFaceNo:WORD;
  12.     end;
  13. //function GetFaceFileName(nFaceNo:WORD):string;
  14. function GetOICQUserName(Id:string):string;{overload;
  15. function GetOICQUserName(id:WORD):String;overload;}
  16. function MakeDirectMsgBuf(var buf:array of char;MsgId:WORD;SrcId:string;FaceNo:Integer;dte,Tme:TDateTime;Msg:String):integer;
  17. procedure SetSysParam;
  18. function GetLocalIP:String;
  19. var
  20. MyId:String;
  21. implementation
  22. uses SysCfg;
  23. function GetLocalIP : string;
  24. type
  25.     TaPInAddr = array [0..10] of PInAddr;
  26.     PaPInAddr = ^TaPInAddr;
  27. var
  28.     phe  : PHostEnt;
  29.     pptr : PaPInAddr;
  30.     Buffer : array [0..63] of char;
  31.     I    : Integer;
  32.     GInitData      : TWSADATA;
  33. begin
  34.     WSAStartup($101, GInitData);
  35.     Result := '';
  36.     GetHostName(Buffer, SizeOf(Buffer));
  37.     phe :=GetHostByName(buffer);
  38.     if phe = nil then Exit;
  39.     pptr := PaPInAddr(Phe^.h_addr_list);
  40.     I := 0;
  41.     while pptr^[I] <> nil do begin
  42.       result:=StrPas(inet_ntoa(pptr^[I]^));
  43.       Inc(I);
  44.     end;
  45.     WSACleanup;
  46. end;
  47. procedure SetSysParam;
  48. var
  49. dwVersion:DWORD;
  50. begin
  51. dwVersion:=GetVersion;
  52. if(dwVersion<$80000000)then
  53.     begin
  54.     TimeAMString:='';
  55.     TimePMString:='';
  56.     end;
  57. CurrencyString:='元';
  58. CurrencyFormat:=1;
  59. CurrencyDecimals:=2;
  60. NegCurrFormat:=5;
  61. ShortDateFormat:='yyyy-mm-dd';
  62. ShortTimeFormat:='HH:MM';
  63. LongTimeFormat:='HH:MM:SS';
  64. DateSeparator:='-';
  65. DecimalSeparator:='.';
  66. //LongDateFormat:='yyyy年mm月dd日';
  67. TimeSeparator:=':';
  68. end;
  69. function MakeDirectMsgBuf(var buf:array of char;MsgId:WORD;SrcId:string;FaceNo:Integer;dte,Tme:TDateTime;Msg:String):integer;
  70. var
  71. p,I,l:Integer;
  72. s:string;
  73. begin
  74. //header
  75. buf[0]:=chr(2);
  76. buf[1]:=chr(1);
  77. buf[2]:=chr(7);
  78. buf[3]:=chr(0);
  79. //cmd
  80. buf[4]:=chr($78);
  81. //Message Id
  82. buf[5]:=chr((MsgId and $ff00 )shr 8);
  83. buf[6]:=chr(MsgId and $00ff);
  84. p:=6;
  85. //Source Id
  86. l:=Length(SrcId);
  87. for i:=0 to l-1 do
  88.     begin
  89.     buf[7+i]:=SrcId[1+i];
  90.     p:=i+7;
  91.     end;
  92. Inc(p);
  93. buf[p]:=chr($1f);
  94. Inc(p);
  95. buf[p]:='0';
  96. Inc(p);
  97. buf[p]:=chr($1f);
  98. Inc(p);
  99. //Face no
  100. s:=IntTOStr(faceno);
  101. l:=length(s);
  102. for i:=0 to l-1 do
  103.     begin
  104.     buf[p]:=s[i+1];
  105.     Inc(p);
  106.     end;
  107. buf[p]:=chr($1f);
  108. Inc(p);
  109. //Date time
  110. s:=DateToStr(dte);
  111. l:=length(s);
  112. for i:=0 to l-1 do
  113.     begin
  114.     buf[p]:=s[i+1];
  115.     Inc(p);
  116.     end;
  117. buf[p]:=chr($1f);
  118. Inc(p);
  119. s:=TimeToStr(tme);
  120. l:=length(s);
  121. for i:=0 to l-1 do
  122.     begin
  123.     buf[p]:=s[i+1];
  124.     Inc(p);
  125.     end;
  126. buf[p]:=chr($1f);
  127. Inc(p);
  128. //msg
  129. l:=Length(msg);
  130. for i:=0 to l-1 do
  131.     begin
  132.     buf[p]:=msg[i+1];
  133.     Inc(p);
  134.     end;
  135. buf[p]:=chr(3);
  136. Result:=p+1;
  137. end;
  138. function GetCurrentUserId:String;
  139. begin
  140. //Result:='1934815';
  141. Result:=MyId;
  142. end;
  143. {function GetFaceFileName(nFaceNo:WORD):String;
  144. var
  145. f:TextFile;
  146. i:Integer;
  147. s:String;
  148. begin
  149. AssignFile(f,GetOICQPath+'faceface.ini');
  150. Reset(f);
  151. for i:=0 to nFaceNo do ReadLn(f,s);
  152. CloseFile(f);
  153. Result:=s;
  154. end;}
  155. function FindStrInBuffer(buffer:PChar;len:DWORD;str:String):DWORD;
  156. var
  157. l,p,o:DWORD;
  158. begin
  159. p:=0;
  160. o:=1;
  161. l:=length(str);
  162. Result:=$FFFFFFFF;
  163. while p<=len do
  164.     begin
  165.     if(buffer[p]<>str[o])then
  166.         begin
  167.         Inc(p);
  168.         o:=1;
  169.         end
  170.     else
  171.         begin
  172.         if(o>=l)then
  173.             begin
  174.             Result:=p-l;
  175.             break;
  176.             end;
  177.         Inc(p);
  178.         Inc(o);
  179.         end;
  180.     end;
  181. end;
  182. function GetOICQUserName(Id:string):string;
  183. var
  184. hFile,nFileLen:Integer;
  185. nOffset:DWORD;
  186. buffer:PChar;
  187. begin
  188. Result:='';
  189. hFile:=FileOpen(GOICQPath+''+GetCurrentUserId+'friends.v30',fmOpenRead);
  190. if(hFile>0)then
  191.     begin
  192.     nFileLen:=FileSeek(hFile,0,2);
  193.     FileSeek(hFile,0,0);
  194.     Buffer := PChar(AllocMem(nFileLen+ 1));
  195.     FileRead(hFile,Buffer^,nFileLen);
  196.     FileClose(hFile);
  197.     nOffset:=FindStrInBuffer(buffer,nFileLen,id);
  198.     if(nOffset<>$FFFFFFFF)then
  199.         begin
  200.         nOffset:=nOffset-61;
  201.         while (buffer[nOffset]<>chr(0))do
  202.             begin
  203.             Result:=Result+buffer[noffset];
  204.             Inc(nOffset);
  205.             end;
  206.         end
  207.     else Result:='Unknow';
  208.     end;
  209. end;
  210. {function GetOICQUserName(id:WORD):String;
  211. begin
  212. end;}
  213. end.