home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Source / Vcl / URLMON.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-01-26  |  30.3 KB  |  655 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Runtime Library                  }
  5. {       URL Moniker support interface unit              }
  6. {                                                       }
  7. {       Copyright (C) 1997,98 Inprise Corporation       }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit UrlMon;
  12.  
  13. {$WEAKPACKAGEUNIT}
  14.  
  15. interface
  16.  
  17. uses Windows, ActiveX;
  18.  
  19. const
  20.   UseUI: Boolean = True;
  21.  
  22.   BINDVERB_GET       = $00000000;       // default action
  23.     {$EXTERNALSYM BINDVERB_GET       }
  24.   BINDVERB_POST      = $00000001;       // post verb
  25.     {$EXTERNALSYM BINDVERB_POST      }
  26.   BINDVERB_PUT       = $00000002;       // put verb
  27.     {$EXTERNALSYM BINDVERB_PUT       }
  28.   BINDVERB_CUSTOM    = $00000003;       // custom verb
  29.     {$EXTERNALSYM BINDVERB_CUSTOM    }
  30.  
  31.   BINDINFOF_URLENCODESTGMEDDATA   = $00000001;       // url encode the stgmed data
  32.     {$EXTERNALSYM BINDINFOF_URLENCODESTGMEDDATA   }
  33.   BINDINFOF_URLENCODEDEXTRAINFO   = $00000002;       // url encode the extra info
  34.     {$EXTERNALSYM BINDINFOF_URLENCODEDEXTRAINFO   }
  35.  
  36.   // flags that describe the type of transaction that caller wants
  37.   BINDF_ASYNCHRONOUS              = $00000001;
  38.     {$EXTERNALSYM BINDF_ASYNCHRONOUS              }
  39.   BINDF_ASYNCSTORAGE              = $00000002;
  40.     {$EXTERNALSYM BINDF_ASYNCSTORAGE              }
  41.   BINDF_NOPROGRESSIVERENDERING    = $00000004;
  42.     {$EXTERNALSYM BINDF_NOPROGRESSIVERENDERING    }
  43.   BINDF_OFFLINEOPERATION          = $00000008;
  44.     {$EXTERNALSYM BINDF_OFFLINEOPERATION          }
  45.   BINDF_GETNEWESTVERSION          = $00000010;
  46.     {$EXTERNALSYM BINDF_GETNEWESTVERSION          }
  47.   BINDF_NOWRITECACHE              = $00000020;
  48.     {$EXTERNALSYM BINDF_NOWRITECACHE              }
  49.   BINDF_NEEDFILE                  = $00000040;
  50.     {$EXTERNALSYM BINDF_NEEDFILE                  }
  51.   BINDF_PULLDATA                  = $00000080;
  52.     {$EXTERNALSYM BINDF_PULLDATA                  }
  53.   BINDF_IGNORESECURITYPROBLEM     = $00000100;
  54.     {$EXTERNALSYM BINDF_IGNORESECURITYPROBLEM     }
  55.   BINDF_RESYNCHRONIZE             = $00000200;
  56.     {$EXTERNALSYM BINDF_RESYNCHRONIZE             }
  57.   BINDF_HYPERLINK                 = $00000400;
  58.     {$EXTERNALSYM BINDF_HYPERLINK                 }
  59.   BINDF_NO_UI                      = $00000800;
  60.     {$EXTERNALSYM BINDF_NO_UI                      }
  61.   BINDF_SILENTOPERATION              = $00001000;
  62.     {$EXTERNALSYM BINDF_SILENTOPERATION              }
  63.   BINDF_PRAGMA_NO_CACHE              = $00002000;
  64.     {$EXTERNALSYM BINDF_PRAGMA_NO_CACHE              }
  65.   BINDF_FREE_THREADED              = $00010000;
  66.     {$EXTERNALSYM BINDF_FREE_THREADED              }
  67.   BINDF_DIRECT_READ              = $00020000;
  68.     {$EXTERNALSYM BINDF_DIRECT_READ              }
  69.   BINDF_FORMS_SUBMIT              = $00040000;
  70.     {$EXTERNALSYM BINDF_FORMS_SUBMIT              }
  71.   BINDF_GETFROMCACHE_IF_NET_FAIL  = $00080000;
  72.     {$EXTERNALSYM BINDF_GETFROMCACHE_IF_NET_FAIL  }
  73.   // backward compatibility:
  74.   BINDF_INLINESGETNEWESTVERSION   = $10000000; //  need to remove from SDK
  75.     {$EXTERNALSYM BINDF_INLINESGETNEWESTVERSION   }
  76.   BINDF_INLINESRESYNCHRONIZE      = $20000000; // need to remove from SDK
  77.     {$EXTERNALSYM BINDF_INLINESRESYNCHRONIZE      }
  78.   BINDF_CONTAINER_NOWRITECACHE    = $40000000; // need to remove from SDK
  79.     {$EXTERNALSYM BINDF_CONTAINER_NOWRITECACHE    }
  80.   BINDF_DONTUSECACHE   = BINDF_GETNEWESTVERSION;
  81.     {$EXTERNALSYM BINDF_DONTUSECACHE   }
  82.   BINDF_DONTPUTINCACHE = BINDF_NOWRITECACHE;
  83.     {$EXTERNALSYM BINDF_DONTPUTINCACHE }
  84.   BINDF_NOCOPYDATA     = BINDF_PULLDATA;
  85.     {$EXTERNALSYM BINDF_NOCOPYDATA     }
  86.  
  87.   // Data notification flags
  88.   BSCF_FIRSTDATANOTIFICATION          = $00000001;
  89.     {$EXTERNALSYM BSCF_FIRSTDATANOTIFICATION          }
  90.   BSCF_INTERMEDIATEDATANOTIFICATION   = $00000002;
  91.     {$EXTERNALSYM BSCF_INTERMEDIATEDATANOTIFICATION   }
  92.   BSCF_LASTDATANOTIFICATION           = $00000004;
  93.     {$EXTERNALSYM BSCF_LASTDATANOTIFICATION           }
  94.  
  95.   BINDSTATUS_FINDINGRESOURCE          = 1;
  96.     {$EXTERNALSYM BINDSTATUS_FINDINGRESOURCE          }
  97.   BINDSTATUS_CONNECTING               = 2;
  98.     {$EXTERNALSYM BINDSTATUS_CONNECTING               }
  99.   BINDSTATUS_REDIRECTING              = 3;
  100.     {$EXTERNALSYM BINDSTATUS_REDIRECTING              }
  101.   BINDSTATUS_BEGINDOWNLOADDATA        = 4;
  102.     {$EXTERNALSYM BINDSTATUS_BEGINDOWNLOADDATA        }
  103.   BINDSTATUS_DOWNLOADINGDATA          = 5;
  104.     {$EXTERNALSYM BINDSTATUS_DOWNLOADINGDATA          }
  105.   BINDSTATUS_ENDDOWNLOADDATA          = 6;
  106.     {$EXTERNALSYM BINDSTATUS_ENDDOWNLOADDATA          }
  107.   BINDSTATUS_BEGINDOWNLOADCOMPONENTS  = 7;
  108.     {$EXTERNALSYM BINDSTATUS_BEGINDOWNLOADCOMPONENTS  }
  109.   BINDSTATUS_INSTALLINGCOMPONENTS     = 8;
  110.     {$EXTERNALSYM BINDSTATUS_INSTALLINGCOMPONENTS     }
  111.   BINDSTATUS_ENDDOWNLOADCOMPONENTS    = 9;
  112.     {$EXTERNALSYM BINDSTATUS_ENDDOWNLOADCOMPONENTS    }
  113.   BINDSTATUS_USINGCACHEDCOPY          = 10;
  114.     {$EXTERNALSYM BINDSTATUS_USINGCACHEDCOPY          }
  115.   BINDSTATUS_SENDINGREQUEST           = 11;
  116.     {$EXTERNALSYM BINDSTATUS_SENDINGREQUEST           }
  117.   BINDSTATUS_CLASSIDAVAILABLE         = 12;
  118.     {$EXTERNALSYM BINDSTATUS_CLASSIDAVAILABLE         }
  119.   BINDSTATUS_MIMETYPEAVAILABLE        = 13;
  120.     {$EXTERNALSYM BINDSTATUS_MIMETYPEAVAILABLE        }
  121.   BINDSTATUS_CACHEFILENAMEAVAILABLE   = 14;
  122.     {$EXTERNALSYM BINDSTATUS_CACHEFILENAMEAVAILABLE   }
  123.  
  124.   SZ_URLCONTEXT: PWideChar = 'URL Context';
  125.     {$EXTERNALSYM SZ_URLCONTEXT}
  126.   SZ_ASYNC_CALLEE: PWideChar = 'AsyncCallee';
  127.     {$EXTERNALSYM SZ_ASYNC_CALLEE}
  128.   MKSYS_URLMONIKER = 6;
  129.     {$EXTERNALSYM MKSYS_URLMONIKER }
  130.  
  131.   { URLMON-specific defines for UrlMkSetSessionOption() above }
  132.   URLMON_OPTION_USERAGENT     = $10000001;
  133.     {$EXTERNALSYM URLMON_OPTION_USERAGENT     }
  134.  
  135.   CF_NULL                     = 0;
  136.     {$EXTERNALSYM CF_NULL                     }
  137.   CFSTR_MIME_NULL             = 0;
  138.     {$EXTERNALSYM CFSTR_MIME_NULL             }
  139.   CFSTR_MIME_TEXT             = 'text/plain';
  140.     {$EXTERNALSYM CFSTR_MIME_TEXT             }
  141.   CFSTR_MIME_RICHTEXT         = 'text/richtext';
  142.     {$EXTERNALSYM CFSTR_MIME_RICHTEXT         }
  143.   CFSTR_MIME_X_BITMAP         = 'image/x-xbitmap';
  144.     {$EXTERNALSYM CFSTR_MIME_X_BITMAP         }
  145.   CFSTR_MIME_POSTSCRIPT       = 'application/postscript';
  146.     {$EXTERNALSYM CFSTR_MIME_POSTSCRIPT       }
  147.   CFSTR_MIME_AIFF             = 'audio/aiff';
  148.     {$EXTERNALSYM CFSTR_MIME_AIFF             }
  149.   CFSTR_MIME_BASICAUDIO       = 'audio/basic';
  150.     {$EXTERNALSYM CFSTR_MIME_BASICAUDIO       }
  151.   CFSTR_MIME_WAV              = 'audio/wav';
  152.     {$EXTERNALSYM CFSTR_MIME_WAV              }
  153.   CFSTR_MIME_X_WAV            = 'audio/x-wav';
  154.     {$EXTERNALSYM CFSTR_MIME_X_WAV            }
  155.   CFSTR_MIME_GIF              = 'image/gif';
  156.     {$EXTERNALSYM CFSTR_MIME_GIF              }
  157.   CFSTR_MIME_PJPEG            = 'image/pjpeg';
  158.     {$EXTERNALSYM CFSTR_MIME_PJPEG            }
  159.   CFSTR_MIME_JPEG             = 'image/jpeg';
  160.     {$EXTERNALSYM CFSTR_MIME_JPEG             }
  161.   CFSTR_MIME_TIFF             = 'image/tiff';
  162.     {$EXTERNALSYM CFSTR_MIME_TIFF             }
  163.   CFSTR_MIME_X_PNG            = 'image/x-png';
  164.     {$EXTERNALSYM CFSTR_MIME_X_PNG            }
  165.   CFSTR_MIME_BMP              = 'image/bmp';
  166.     {$EXTERNALSYM CFSTR_MIME_BMP              }
  167.   CFSTR_MIME_X_ART            = 'image/x-jg';
  168.     {$EXTERNALSYM CFSTR_MIME_X_ART            }
  169.   CFSTR_MIME_AVI              = 'video/avi';
  170.     {$EXTERNALSYM CFSTR_MIME_AVI              }
  171.   CFSTR_MIME_MPEG             = 'video/mpeg';
  172.     {$EXTERNALSYM CFSTR_MIME_MPEG             }
  173.   CFSTR_MIME_FRACTALS         = 'application/fractals';
  174.     {$EXTERNALSYM CFSTR_MIME_FRACTALS         }
  175.   CFSTR_MIME_RAWDATA          = 'application/octet-stream';
  176.     {$EXTERNALSYM CFSTR_MIME_RAWDATA          }
  177.   CFSTR_MIME_RAWDATASTRM      = 'application/octet-stream';
  178.     {$EXTERNALSYM CFSTR_MIME_RAWDATASTRM      }
  179.   CFSTR_MIME_PDF              = 'application/pdf';
  180.     {$EXTERNALSYM CFSTR_MIME_PDF              }
  181.   CFSTR_MIME_X_AIFF           = 'audio/x-aiff';
  182.     {$EXTERNALSYM CFSTR_MIME_X_AIFF           }
  183.   CFSTR_MIME_X_REALAUDIO      = 'audio/x-pn-realaudio';
  184.     {$EXTERNALSYM CFSTR_MIME_X_REALAUDIO      }
  185.   CFSTR_MIME_XBM              = 'image/xbm';
  186.     {$EXTERNALSYM CFSTR_MIME_XBM              }
  187.   CFSTR_MIME_QUICKTIME        = 'video/quicktime';
  188.     {$EXTERNALSYM CFSTR_MIME_QUICKTIME        }
  189.   CFSTR_MIME_X_MSVIDEO        = 'video/x-msvideo';
  190.     {$EXTERNALSYM CFSTR_MIME_X_MSVIDEO        }
  191.   CFSTR_MIME_X_SGI_MOVIE      = 'video/x-sgi-movie';
  192.     {$EXTERNALSYM CFSTR_MIME_X_SGI_MOVIE      }
  193.   CFSTR_MIME_HTML             = 'text/html';
  194.     {$EXTERNALSYM CFSTR_MIME_HTML             }
  195.  
  196.   { MessageId: MK_S_ASYNCHRONOUS                                              }
  197.   { MessageText: Operation is successful, but will complete asynchronously.   }
  198.   MK_S_ASYNCHRONOUS = $000401E8;
  199.     {$EXTERNALSYM MK_S_ASYNCHRONOUS }
  200.   S_ASYNCHRONOUS    = MK_S_ASYNCHRONOUS;
  201.     {$EXTERNALSYM S_ASYNCHRONOUS    }
  202.   E_PENDING         = $8000000A;
  203.     {$EXTERNALSYM E_PENDING         }
  204.  
  205.   { WinINet and protocol specific errors are mapped to one of the following   }
  206.   { error which are returned in IBSC::OnStopBinding                           }
  207.   INET_E_INVALID_URL               : HResult = $800C0002;
  208.     {$EXTERNALSYM INET_E_INVALID_URL               }
  209.   INET_E_NO_SESSION                : HResult = $800C0003;
  210.     {$EXTERNALSYM INET_E_NO_SESSION                }
  211.   INET_E_CANNOT_CONNECT            : HResult = $800C0004;
  212.     {$EXTERNALSYM INET_E_CANNOT_CONNECT            }
  213.   INET_E_RESOURCE_NOT_FOUND        : HResult = $800C0005;
  214.     {$EXTERNALSYM INET_E_RESOURCE_NOT_FOUND        }
  215.   INET_E_OBJECT_NOT_FOUND          : HResult = $800C0006;
  216.     {$EXTERNALSYM INET_E_OBJECT_NOT_FOUND          }
  217.   INET_E_DATA_NOT_AVAILABLE        : HResult = $800C0007;
  218.     {$EXTERNALSYM INET_E_DATA_NOT_AVAILABLE        }
  219.   INET_E_DOWNLOAD_FAILURE          : HResult = $800C0008;
  220.     {$EXTERNALSYM INET_E_DOWNLOAD_FAILURE          }
  221.   INET_E_AUTHENTICATION_REQUIRED   : HResult = $800C0009;
  222.     {$EXTERNALSYM INET_E_AUTHENTICATION_REQUIRED   }
  223.   INET_E_NO_VALID_MEDIA            : HResult = $800C000A;
  224.     {$EXTERNALSYM INET_E_NO_VALID_MEDIA            }
  225.   INET_E_CONNECTION_TIMEOUT        : HResult = $800C000B;
  226.     {$EXTERNALSYM INET_E_CONNECTION_TIMEOUT        }
  227.   INET_E_INVALID_REQUEST           : HResult = $800C000C;
  228.     {$EXTERNALSYM INET_E_INVALID_REQUEST           }
  229.   INET_E_UNKNOWN_PROTOCOL          : HResult = $800C000D;
  230.     {$EXTERNALSYM INET_E_UNKNOWN_PROTOCOL          }
  231.   INET_E_SECURITY_PROBLEM          : HResult = $800C000E;
  232.     {$EXTERNALSYM INET_E_SECURITY_PROBLEM          }
  233.   INET_E_CANNOT_LOAD_DATA          : HResult = $800C000F;
  234.     {$EXTERNALSYM INET_E_CANNOT_LOAD_DATA          }
  235.   INET_E_CANNOT_INSTANTIATE_OBJECT : HResult = $800C0010;
  236.     {$EXTERNALSYM INET_E_CANNOT_INSTANTIATE_OBJECT }
  237.   INET_E_ERROR_FIRST               : HResult = $800C0002;
  238.     {$EXTERNALSYM INET_E_ERROR_FIRST               }
  239.   INET_E_ERROR_LAST                : HResult = $800C0010;
  240.     {$EXTERNALSYM INET_E_ERROR_LAST                }
  241.                                      // (INET_E_CANNOT_INSTANTIATE_OBJECT)
  242.  
  243.   { These are for backwards compatibility with previous URLMON versions }
  244.   { Flags for the UrlDownloadToCacheFile                                                                    }
  245.   URLOSTRM_USECACHEDCOPY_ONLY = $1;   // Only get from cache
  246.     {$EXTERNALSYM URLOSTRM_USECACHEDCOPY_ONLY }
  247.   URLOSTRM_USECACHEDCOPY      = $2;   // Get from cache if available else download
  248.     {$EXTERNALSYM URLOSTRM_USECACHEDCOPY      }
  249.   URLOSTRM_GETNEWESTVERSION   = $3;   // Get new version only. But put it in cache too
  250.     {$EXTERNALSYM URLOSTRM_GETNEWESTVERSION   }
  251.  
  252.   // GUIDs for interfaces declared in this unit
  253.   IID_IPersistMoniker: TGUID = (
  254.     D1:$79eac9c9;D2:$baf9;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  255.   IID_IBindProtocol: TGUID = (
  256.     D1:$79eac9cd;D2:$baf9;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  257.   IID_IBinding: TGUID = (
  258.     D1:$79eac9c0;D2:$baf9;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  259.   IID_IBindStatusCallback: TGUID = (
  260.     D1:$79eac9c1;D2:$baf9;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  261.   IID_IAuthenticate: TGUID = (
  262.     D1:$79eac9d0;D2:$baf9;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  263.   IID_HttpNegotiate: TGUID = (
  264.     D1:$79eac9d2;D2:$baf9;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  265.   IID_IWindowForBindingUI: TGUID = (
  266.     D1:$79eac9d5;D2:$bafa;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  267.   IID_ICodeInstall: TGUID = (
  268.     D1:$79eac9d1;D2:$baf9;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  269.   IID_IWinInetInfo: TGUID = (
  270.     D1:$79eac9d6;D2:$bafa;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  271.   IID_IHttpSecurity: TGUID = (
  272.     D1:$79eac9d7;D2:$bafa;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  273.   IID_IWinInetHttpInfo: TGUID = (
  274.     D1:$79eac9d8;D2:$bafa;D3:$11ce;D4:($8c,$82,$00,$aa,$00,$4b,$a9,$0b));
  275.   IID_IBindHost: TGUID = (
  276.     D1:$fc4801a1;D2:$2ba9;D3:$11cf;D4:($a2,$29,$00,$aa,$00,$3d,$73,$52));
  277.  
  278. type
  279.   PBindInfo = ^TBindInfo;
  280.   TBindInfo = packed record
  281.     cbSize: Longint;
  282.     szExtraInfo: PWideChar;  // e.g. string added to the URL string [range byte]
  283.     stgmedData: TStgMedium;  // e.g. put or post data
  284.     grfBindInfoF: DWORD;     // e.g. how meddata should be treaded
  285.     dwBindVerb: DWORD;       // e.g. put, post, ...
  286.     szCustomVerb: PWideChar; // e.g. custom verb
  287.     cbstgmedData: Longint;   // size of data in stgmedData
  288.   end;
  289.  
  290.   PRemBindInfo = ^TRemBindInfo;
  291.   TRemBindInfo = packed record
  292.     cbSize: Cardinal;
  293.     szExtraInfo: PWideChar;
  294.     grfBindInfoF: DWORD;
  295.     dwBindVerb: DWORD;
  296.     szCustomVerb: PWideChar;
  297.     cbstgmedData: DWORD;
  298.   end;
  299.  
  300.   PRemFormatEtc = ^TRemFormatEtc;
  301.   TRemFormatEtc = packed record
  302.     cfFormat: DWORD;
  303.     ptd: DWORD;
  304.     dwAspect: DWORD;
  305.     lindex: Longint;
  306.     tymed: DWORD;
  307.   end;
  308.  
  309.   PCIP_Status = ^TCip_Status;
  310.   TCIP_Status = (CIP_DISK_FULL, CIP_ACCESS_DENIED, CIP_NEWER_VERSION_EXISTS,
  311.     CIP_OLDER_VERSION_EXISTS, CIP_NAME_CONFLICT,
  312.     CIP_TRUST_VERIFICATION_COMPONENT_MISSING,
  313.     CIP_EXE_SELF_REGISTERATION_TIMEOUT, CIP_UNSAFE_TO_ABORT, CIP_NEED_REBOOT);
  314.  
  315.   IPersistMoniker = interface
  316.     ['{79eac9c9-baf9-11ce-8c82-00aa004ba90b}']
  317.     function GetClassID(out pClassID: TCLSID): HRESULT; stdcall;
  318.     function IsDirty: HRESULT; stdcall;
  319.     function Load(fFullyAvailable: BOOL; pimkName: IMoniker; pibc: IBindCtx;
  320.       grfMode: DWORD): HResult; stdcall;
  321.     function Save(pimkName: IMoniker; pibc: IBindCtx; fRemember: BOOL): HResult; stdcall;
  322.     function SaveCompleted(pimkName: IMoniker; pibc: IBindCtx): HRESULT; stdcall;
  323.     function GetCurMoniker(out ppimkName: IMoniker): HRESULT; stdcall;
  324.   end;
  325.     {$EXTERNALSYM IPersistMoniker}
  326.  
  327.   IBinding = interface
  328.     ['{79eac9c0-baf9-11ce-8c82-00aa004ba90b}']
  329.     function Abort: HResult; stdcall;
  330.     function Suspend: HResult; stdcall;
  331.     function Resume: HResult; stdcall;
  332.     function SetPriority(nPriority: Longint): HResult; stdcall;
  333.     function GetPriority(out nPriority: Longint): HResult; stdcall;
  334.     function GetBindResult(out clsidProtocol: TGUID; out dwResult: Longint;
  335.       out szResult: PWideChar; var dwReserved: Longint): HResult; stdcall;
  336.   end;
  337.     {$EXTERNALSYM IBinding}
  338.  
  339.   IBindProtocol = interface
  340.     ['{79eac9cd-baf9-11ce-8c82-00aa004ba90b}']
  341.     function CreateBinding(szUrl: PWideChar; pbc: IBindCtx;
  342.       out ppb: IBinding): HResult; stdcall;
  343.   end;
  344.     {$EXTERNALSYM IBindProtocol}
  345.  
  346.   IBindStatusCallback = interface
  347.     ['{79eac9c1-baf9-11ce-8c82-00aa004ba90b}']
  348.     function OnStartBinding(dwReserved: Longint; pib: IBinding): HResult;
  349.       stdcall;
  350.     function GetPriority(out pnPriority: Longint): HResult; stdcall;
  351.     function OnLowResource(reserved: Longint): HResult; stdcall;
  352.     function OnProgress(ulProgress: Longint; ulProgressMax: Longint;
  353.       ulStatusCode: Longint; szStatusText: PWideChar): HResult; stdcall;
  354.     function OnStopBinding( hRes: HResult; szError: PWideChar ): HResult;
  355.       stdcall;
  356.     function GetBindInfo(out grfBINDF: Longint; var pbindinfo: TBindInfo):
  357.       HResult; stdcall;
  358.     function OnDataAvailable(grfBSCF: Longint; dwSize: Longint;
  359.       var pformatetc: TFormatEtc; var pstgmed: TSTGMEDIUM): HResult; stdcall;
  360.     function OnObjectAvailable(const iid: TGUID; const punk: IUnknown): HResult;
  361.       stdcall;
  362.   end;
  363.     {$EXTERNALSYM IBindStatusCallback}
  364.  
  365.   IAuthenticate = interface
  366.     ['{79eac9d0-baf9-11ce-8c82-00aa004ba90b}']
  367.     function Authenticate(var phwnd: HWND; pszUserName,
  368.       pszPassword: PWideChar): HRESULT; stdcall;
  369.   end;
  370.     {$EXTERNALSYM IAuthenticate}
  371.  
  372.   IHttpNegotiate = interface
  373.     ['{79eac9d2-baf9-11ce-8c82-00aa004ba90b}']
  374.     function BeginningTransaction(szURL, szHeaders: PWideChar;
  375.       dwReserved: DWORD; out pszAdditionalHeaders: PWideChar): HRESULT; stdcall;
  376.     function OnResponse(dwResponseCode: DWORD; szResponseHeaders,
  377.       szRequestHeaders: PWideChar; out pszAdditionalRequestHeaders: PWideChar):
  378.       HResult; stdcall;
  379.   end;
  380.     {$EXTERNALSYM IHttpNegotiate}
  381.  
  382.   IWindowForBindingUI = interface
  383.     ['{79eac9d5-bafa-11ce-8c82-00aa004ba90b}']
  384.     function GetWindow(const guidReason: TGUID; out wnd: HWND): HResult; stdcall;
  385.   end;
  386.     {$EXTERNALSYM IWindowForBindingUI}
  387.  
  388.   ICodeInstall = interface(IWindowForBindingUI)
  389.     ['{79eac9d1-baf9-11ce-8c82-00aa004ba90b}']
  390.     function OnCodeInstallProblem(ulStatusCode: Cardinal; szDestination,
  391.       szSource: PWideChar; dwReserved: DWORD): HResult; stdcall;
  392.   end;
  393.     {$EXTERNALSYM ICodeInstall}
  394.  
  395.   IWinInetInfo = interface
  396.     ['{79eac9d6-bafa-11ce-8c82-00aa004ba90b}']
  397.     function QueryOption(dwOption: DWORD; Buffer: Pointer; var pcbBuf: DWORD): HResult; stdcall;
  398.   end;
  399.     {$EXTERNALSYM IWinInetInfo}
  400.  
  401.   IHttpSecurity = interface(IWindowForBindingUI)
  402.     ['{79eac9d7-bafa-11ce-8c82-00aa004ba90b}']
  403.     function OnSecurityProblem(dwProblem: DWORD): HRESULT; stdcall;
  404.   end;
  405.     {$EXTERNALSYM IHttpSecurity}
  406.  
  407.   IWinInetHttpInfo = interface(IWinInetInfo)
  408.     ['{79eac9d8-bafa-11ce-8c82-00aa004ba90b}']
  409.     function QueryInfo(dwOption: DWORD; pBuffer: Pointer; var pcbBuf, pdwFlags,
  410.       pdwReserved: DWORD): HResult; stdcall;
  411.   end;
  412.     {$EXTERNALSYM IWinInetHttpInfo}
  413.  
  414.   IBindHost = interface
  415.     ['{fc4801a1-2ba9-11cf-a229-00aa003d7352}']
  416.     function CreateMoniker(szName: PWideChar; pBC: IBindCtx; out ppmk: IMoniker;
  417.       dwReserved: DWORD): HResult; stdcall;
  418.     function MonikerBindToStorage(pMk: IMoniker; pBC: IBindCtx;
  419.       pBSC: IBindStatusCallback; const riid: TIID; out ppvObj): HResult; stdcall;
  420.     function RemoteMonikerBindToStorage(pMk: IMoniker; pBC: IBindCtx;
  421.       pBSC: IBindStatusCallback; const riid: TIID; out ppvObj: IUnknown): HResult; stdcall;
  422.     function MonikerBindToObject(pMk: IMoniker; pBC: IBindCtx;
  423.       pBSC: IBindStatusCallback; const riid: TIID; out ppvObj): HResult; stdcall;
  424.     function RemoteMonikerBindToObject(pMk: IMoniker; pBC: IBindCtx;
  425.       pBSC: IBindStatusCallback; const riid: TIID; out ppvObj: IUnknown): HResult; stdcall;
  426.   end;
  427.     {$EXTERNALSYM IBindHost}
  428.  
  429. const
  430.   SOFTDIST_FLAG_USAGE_EMAIL         = $00000001;
  431.     {$EXTERNALSYM SOFTDIST_FLAG_USAGE_EMAIL         }
  432.   SOFTDIST_FLAG_USAGE_PRECACHE      = $00000002;
  433.     {$EXTERNALSYM SOFTDIST_FLAG_USAGE_PRECACHE      }
  434.   SOFTDIST_FLAG_USAGE_AUTOINSTALL   = $00000004;
  435.     {$EXTERNALSYM SOFTDIST_FLAG_USAGE_AUTOINSTALL   }
  436.   SOFTDIST_FLAG_DELETE_SUBSCRIPTION = $00000008;
  437.     {$EXTERNALSYM SOFTDIST_FLAG_DELETE_SUBSCRIPTION }
  438.  
  439.   SOFTDIST_ADSTATE_NONE                = $00000000;
  440.     {$EXTERNALSYM SOFTDIST_ADSTATE_NONE                }
  441.   SOFTDIST_ADSTATE_AVAILABLE        = $00000001;
  442.     {$EXTERNALSYM SOFTDIST_ADSTATE_AVAILABLE        }
  443.   SOFTDIST_ADSTATE_DOWNLOADED        = $00000002;
  444.     {$EXTERNALSYM SOFTDIST_ADSTATE_DOWNLOADED        }
  445.   SOFTDIST_ADSTATE_INSTALLED        = $00000003;
  446.     {$EXTERNALSYM SOFTDIST_ADSTATE_INSTALLED        }
  447.  
  448. type
  449.   _tagCODEBASEHOLD = packed record
  450.     cbSize: ULONG;
  451.     szDistUnit: PWideChar;
  452.     szCodeBase: PWideChar;
  453.     dwVersionMS: DWORD;
  454.     dwVersionLS: DWORD;
  455.     dwStyle: DWORD;
  456.   end;
  457.   PCodeBaseHold = ^TCodeBaseHold;
  458.   TCodeBaseHold = _tagCODEBASEHOLD;
  459.  
  460.   _tagSOFTDISTINFO = packed record
  461.     cbSize: ULONG;
  462.     dwFlags: DWORD;
  463.     dwAdState: DWORD;
  464.     szTitle: PWideChar;
  465.     szAbstract: PWideChar;
  466.     szHREF: PWideChar;
  467.     dwInstalledVersionMS: DWORD;
  468.     dwInstalledVersionLS: DWORD;
  469.     dwUpdateVersionMS: DWORD;
  470.     dwUpdateVersionLS: DWORD;
  471.     dwAdvertisedVersionMS: DWORD;
  472.     dwAdvertisedVersionLS: DWORD;
  473.     dwReserved: DWORD;
  474.   end;
  475.   PSoftDistInfo = ^TSoftDistInfo;
  476.   TSoftDistInfo = _tagSOFTDISTINFO;
  477.  
  478. function CreateURLMoniker(pMkCtx: IMoniker; szURL: PWideChar;
  479.   out ppmk: IMoniker): HResult; stdcall;
  480. {$EXTERNALSYM CreateURLMoniker}
  481. function GetClassURL(szURL: PWideChar; const pClsID: TCLSID): HResult; stdcall;
  482. {$EXTERNALSYM GetClassURL}
  483. function CreateAsyncBindCtx(reserved: DWORD; pBSCb: IBindStatusCallback;
  484.   pEFetc: IEnumFORMATETC; out ppBC: IBindCtx): HResult;
  485. {$EXTERNALSYM CreateAsyncBindCtx}
  486. function MkParseDisplayNameEx(pbc: IBindCtx; szDisplayName: PWideChar;
  487.   var pchEaten: Cardinal; out ppmk: IMoniker): HResult; stdcall;
  488. {$EXTERNALSYM MkParseDisplayNameEx}
  489. function RegisterBindStatusCallback(pBC: IBindCtx; pBSCb: IBindStatusCallback;
  490.   out ppBSCBPrev: IBindStatusCallback; dwReserved: DWORD): HResult; stdcall;
  491. {$EXTERNALSYM RegisterBindStatusCallback}
  492. function RevokeBindStatusCallback(pBC: IBindCtx; pBSCb: IBindStatusCallback): HResult; stdcall;
  493. {$EXTERNALSYM RevokeBindStatusCallback}
  494. function GetClassFileOrMime(pBC: IBindCtx; szFilename: PWideChar; pBuffer: Pointer;
  495.   cbSize: DWORD; szMime: PWideChar; dwReserved: DWORD; out pclsid: TCLSID): HResult; stdcall;
  496. {$EXTERNALSYM GetClassFileOrMime}
  497. function IsValidURL(pBC: IBindCtx; szURL: PWideChar; dwReserved: DWORD): HResult; stdcall;
  498. {$EXTERNALSYM IsValidURL}
  499. function CoGetClassObjectFromURL(const rCLASSID: TCLSID; szCODE: PWideChar;
  500.   dwFileVersionMS: DWORD; dwFileVersionLS: DWORD; szTYPE: PWideChar;
  501.   pBindCtx: IBindCtx; dwClsContext: DWORD; pvReserved: Pointer; const riid: TIID;
  502.   out ppv): HResult; stdcall;
  503. {$EXTERNALSYM CoGetClassObjectFromURL}
  504.  
  505. { helper apis }
  506. function IsAsyncMoniker(pmk: IMoniker): HResult; stdcall;
  507. {$EXTERNALSYM IsAsyncMoniker}
  508. function CreateURLBinding(lpszUrl: PWideChar; pbc: IBindCtx;
  509.   out ppBdg: IBinding): HResult; stdcall;
  510. {$EXTERNALSYM CreateURLBinding}
  511.  
  512. function RegisterMediaTypesW(ctypes: Cardinal; rgszTypes: PWideChar;
  513.   const rgcfTypes: TClipFormat): HResult; stdcall;
  514. {$EXTERNALSYM RegisterMediaTypesW}
  515. function RegisterMediaTypes(ctypes: Cardinal; rgszTypes: PChar;
  516.   const rgcfTypes: TClipFormat): HResult; stdcall;
  517. {$EXTERNALSYM RegisterMediaTypes}
  518. function FindMediaType(rgszTypes: PChar; rgcfTypes: TClipFormat): HResult; stdcall;
  519. {$EXTERNALSYM FindMediaType}
  520. function CreateFormatEnumerator(cfmtetc: Cardinal; const rgfmtetc: TFormatEtc;
  521.   out ppenumfmtetc: IEnumFormatEtc): HResult; stdcall;
  522. {$EXTERNALSYM CreateFormatEnumerator}
  523. function RegisterFormatEnumerator(pBC: IBindCtx; pEFetc: IEnumFormatEtc;
  524.   reserved: DWORD): HResult; stdcall;
  525. {$EXTERNALSYM RegisterFormatEnumerator}
  526. function RevokeFormatEnumerator(pBC: IBindCtx; pEFetc: IEnumFormatEtc): HResult; stdcall;
  527. {$EXTERNALSYM RevokeFormatEnumerator}
  528. function RegisterMediaTypeClass(pBC: IBindCtx; ctypes: Cardinal;
  529.   rgszTypes: PChar; const rgclsID: TCLSID; reserved: DWORD): HResult; stdcall;
  530. {$EXTERNALSYM RegisterMediaTypeClass}
  531. function FindMediaTypeClass(pBC: IBindCtx; szType: PChar; out pclsID: TCLSID;
  532.   reserved: DWORD): HResult; stdcall;
  533. {$EXTERNALSYM FindMediaTypeClass}
  534. function UrlMkSetSessionOption(dwOption: DWORD; pBuffer: Pointer;
  535.   dwBufferLength: DWORD; dwReserved: DWORD): HResult; stdcall;
  536. {$EXTERNALSYM UrlMkSetSessionOption}
  537.  
  538. function HlinkSimpleNavigateToString(szTarget, szLocation,
  539.   szTargetFrameName: PWideChar; pUnk: IUnknown; pbc: IBindCtx;
  540.   pBSCb: IBindStatusCallback; grfHLNF, dwReserved: DWORD): HResult; stdcall;
  541. {$EXTERNALSYM HlinkSimpleNavigateToString}
  542. function HlinkSimpleNavigateToMoniker(pmkTarget: IMoniker; szLocation,
  543.   szTargetFrameName: PWideChar; pUnk: IUnknown; pbc: IBindCtx;
  544.   pBSCb: IBindStatusCallback; grfHLNF, dwReserved: DWORD): HResult; stdcall;
  545. {$EXTERNALSYM HlinkSimpleNavigateToMoniker}
  546.  
  547. function URLOpenStreamA(p1: IUnknown; p2: PAnsiChar; p3: DWORD;
  548.   p4: IBindStatusCallback): HResult; stdcall;
  549. {$EXTERNALSYM URLOpenStreamA}
  550. function URLOpenStreamW(p1: IUnknown; p2: PWideChar; p3: DWORD;
  551.   p4: IBindStatusCallback): HResult; stdcall;
  552. {$EXTERNALSYM URLOpenStreamW}
  553. function URLOpenStream(p1: IUnknown; p2: PChar; p3: DWORD;
  554.   p4: IBindStatusCallback): HResult; stdcall;
  555. {$EXTERNALSYM URLOpenStream}
  556.  
  557. function URLOpenPullStreamA(p1: IUnknown; p2: PAnsiChar; p3: DWORD;
  558.   p4: IBindStatusCallback): HResult; stdcall;
  559. {$EXTERNALSYM URLOpenPullStreamA}
  560. function URLOpenPullStreamW(p1: IUnknown; p2: PWideChar; p3: DWORD;
  561.   p4: IBindStatusCallback): HResult; stdcall;
  562. {$EXTERNALSYM URLOpenPullStreamW}
  563. function URLOpenPullStream(p1: IUnknown; p2: PChar; p3: DWORD;
  564.   p4: IBindStatusCallback): HResult; stdcall;
  565. {$EXTERNALSYM URLOpenPullStream}
  566.  
  567.  
  568. function URLDownloadToFileA(p1: IUnknown; p2: PAnsiChar; p3: PAnsiChar; p4: DWORD;
  569.   p5: IBindStatusCallback): HResult; stdcall;
  570. {$EXTERNALSYM URLDownloadToFileA}
  571. function URLDownloadToFileW(p1: IUnknown; p2: PWideChar; p3: PWideChar; p4: DWORD;
  572.   p5: IBindStatusCallback): HResult; stdcall;
  573. {$EXTERNALSYM URLDownloadToFileW}
  574. function URLDownloadToFile(p1: IUnknown; p2: PChar; p3: PChar; p4: DWORD;
  575.   p5: IBindStatusCallback): HResult; stdcall;
  576. {$EXTERNALSYM URLDownloadToFile}
  577.  
  578. function URLDownloadToCacheFileA(p1: IUnknown; p2: PAnsiChar; p3: PAnsiChar;
  579.   p4: DWORD; p5: DWORD; p6: IBindStatusCallback): HResult; stdcall;
  580. {$EXTERNALSYM URLDownloadToCacheFileA}
  581. function URLDownloadToCacheFileW(p1: IUnknown; p2: PWideChar; p3: PWideChar;
  582.   p4: DWORD; p5: DWORD; p6: IBindStatusCallback): HResult; stdcall;
  583. {$EXTERNALSYM URLDownloadToCacheFileW}
  584. function URLDownloadToCacheFile(p1: IUnknown; p2: PChar; p3: PChar;
  585.   p4: DWORD; p5: DWORD; p6: IBindStatusCallback): HResult; stdcall;
  586. {$EXTERNALSYM URLDownloadToCacheFile}
  587.  
  588. function URLOpenBlockingStreamA(p1: IUnknown; p2: PAnsiChar; out p3: IStream;
  589.   p4: DWORD; p5: IBindStatusCallback): HResult; stdcall;
  590. {$EXTERNALSYM URLOpenBlockingStreamA}
  591. function URLOpenBlockingStreamW(p1: IUnknown; p2: PWideChar; out p3: IStream;
  592.   p4: DWORD; p5: IBindStatusCallback): HResult; stdcall;
  593. {$EXTERNALSYM URLOpenBlockingStreamW}
  594. function URLOpenBlockingStream(p1: IUnknown; p2: PChar; out p3: IStream;
  595. {$EXTERNALSYM URLOpenBlockingStream}
  596.   p4: DWORD; p5: IBindStatusCallback): HResult; stdcall;
  597.  
  598. function HlinkGoBack(pUnk: IUnknown): HResult; stdcall;
  599. {$EXTERNALSYM HlinkGoBack}
  600. function HlinkGoForward(pUnk: IUnknown): HResult; stdcall;
  601. {$EXTERNALSYM HlinkGoForward}
  602. function HlinkNavigateString(pUnk: IUnknown; szTarget: PWideChar): HResult; stdcall;
  603. {$EXTERNALSYM HlinkNavigateString}
  604. function HlinkNavigateMoniker(pUnk: IUnknown; pmkTarget: IMoniker): HResult; stdcall;
  605. {$EXTERNALSYM HlinkNavigateMoniker}
  606.  
  607. implementation
  608.  
  609. const
  610.   UrlMonLib = 'URLMON.DLL';
  611.  
  612. function CoGetClassObjectFromURL;       external UrlMonLib name 'CoGetClassObjectFromURL';
  613. function CreateAsyncBindCtx;            external UrlMonLib name 'CreateAsyncBindCtx';
  614. function CreateFormatEnumerator;        external UrlMonLib name 'CreateFormatEnumerator';
  615. function CreateURLBinding;              external UrlMonLib name 'CreateURLBinding';
  616. function CreateURLMoniker;              external UrlMonLib name 'CreateURLMoniker';
  617. function FindMediaType;                 external UrlMonLib name 'FindMediaType';
  618. function FindMediaTypeClass;            external UrlMonLib name 'FindMediaTypeClass';
  619. function GetClassFileOrMime;            external UrlMonLib name 'GetClassFileOrMime';
  620. function GetClassURL;                   external UrlMonLib name 'GetClassURL';
  621. function HlinkGoBack;                   external UrlMonLib name 'HlinkGoBack';
  622. function HlinkGoForward;                external UrlMonLib name 'HlinkGoForward';
  623. function HlinkNavigateMoniker;          external UrlMonLib name 'HlinkNavigateMoniker';
  624. function HlinkNavigateString;           external UrlMonLib name 'HlinkNavigateString';
  625. function HlinkSimpleNavigateToMoniker;  external UrlMonLib name 'HlinkSimpleNavigateToMoniker';
  626. function HlinkSimpleNavigateToString;   external UrlMonLib name 'HlinkSimpleNavigateToString';
  627. function IsAsyncMoniker;                external UrlMonLib name 'IsAsyncMoniker';
  628. function IsValidURL;                    external UrlMonLib name 'IsValidURL';
  629. function MkParseDisplayNameEx;          external UrlMonLib name 'MkParseDisplayNameEx';
  630. function RegisterBindStatusCallback;    external UrlMonLib name 'RegisterBindStatusCallback';
  631. function RegisterFormatEnumerator;      external UrlMonLib name 'RegisterFormatEnumerator';
  632. function RegisterMediaTypeClass;        external UrlMonLib name 'RegisterMediaTypeClass';
  633. function RegisterMediaTypes;            external UrlMonLib name 'RegisterMediaTypes';
  634. function RegisterMediaTypesW;           external UrlMonLib name 'RegisterMediaTypesW';
  635. function RevokeBindStatusCallback;      external UrlMonLib name 'RevokeBindStatusCallback';
  636. function RevokeFormatEnumerator;        external UrlMonLib name 'RevokeFormatEnumerator';
  637. function URLDownloadToCacheFileA;       external UrlMonLib name 'URLDownloadToCacheFileA';
  638. function URLDownloadToCacheFileW;       external UrlMonLib name 'URLDownloadToCacheFileW';
  639. function URLDownloadToCacheFile;        external UrlMonLib name 'URLDownloadToCacheFileA';
  640. function URLDownloadToFileA;            external UrlMonLib name 'URLDownloadToFileA';
  641. function URLDownloadToFileW;            external UrlMonLib name 'URLDownloadToFileW';
  642. function URLDownloadToFile;             external UrlMonLib name 'URLDownloadToFileA';
  643. function UrlMkSetSessionOption;         external UrlMonLib name 'UrlMkSetSessionOption';
  644. function URLOpenBlockingStreamA;        external UrlMonLib name 'URLOpenBlockingStreamA';
  645. function URLOpenBlockingStreamW;        external UrlMonLib name 'URLOpenBlockingStreamW';
  646. function URLOpenBlockingStream;         external UrlMonLib name 'URLOpenBlockingStreamA';
  647. function URLOpenPullStreamA;            external UrlMonLib name 'URLOpenPullStreamA';
  648. function URLOpenPullStreamW;            external UrlMonLib name 'URLOpenPullStreamW';
  649. function URLOpenPullStream;             external UrlMonLib name 'URLOpenPullStreamA';
  650. function URLOpenStreamA;                external UrlMonLib name 'URLOpenStreamA';
  651. function URLOpenStreamW;                external UrlMonLib name 'URLOpenStreamW';
  652. function URLOpenStream;                 external UrlMonLib name 'URLOpenStreamA';
  653.  
  654. end.
  655.