【问题标题】:CoInternetIsFeatureEnabled in Delphi2010Delphi 2010 中没有启用 Internet 功能
【发布时间】:2011-01-15 21:35:42
【问题描述】:

我试图在单击 WebBrowser 控件中的链接时停用烦人的声音,而不更改用户注册表。我找到了可以通过CoInternetIsFeatureEnabled 完成的文档,也解释了here。但我不知道如何在 Delphi 2010 上实现它,因为在将 URLMon 单元包含到项目中并且没有太多文档之后,我收到“未声明的标识符”错误。

有什么想法吗?

【问题讨论】:

  • 您可能会从此页面获得一些提示。 koders.com/delphi/…
  • 是的,我正试图从该代码中获得一些启发,但到目前为止运气不佳......这是来自 embededWB (我不想在我的应用程序中使用),但我仍然无法实现 CoInternetIsFeatureEnabled在德尔福工作

标签: windows delphi browser c++


【解决方案1】:

CoInternetIsFeatureEnabled() 和 CoInternetSetFeatureEnabled() 不包含在 D2010 的 UrlMon.pas 副本中。您必须手动声明它们,例如:

const
  GET_FEATURE_FROM_THREAD = $00000001;
  GET_FEATURE_FROM_PROCESS = $00000002;
  GET_FEATURE_FROM_REGISTRY = $00000004;
  GET_FEATURE_FROM_THREAD_LOCALMACHINE = $00000008;
  GET_FEATURE_FROM_THREAD_INTRANET = $00000010;
  GET_FEATURE_FROM_THREAD_TRUSTED = $00000020;
  GET_FEATURE_FROM_THREAD_INTERNET = $00000040;
  GET_FEATURE_FROM_THREAD_RESTRICTED = $00000080;

  SET_FEATURE_ON_THREAD = $00000001;
  SET_FEATURE_ON_PROCESS = $00000002;
  SET_FEATURE_IN_REGISTRY = $00000004;
  SET_FEATURE_ON_THREAD_LOCALMACHINE = $00000008;
  SET_FEATURE_ON_THREAD_INTRANET = $00000010;
  SET_FEATURE_ON_THREAD_TRUSTED = $00000020;
  SET_FEATURE_ON_THREAD_INTERNET = $00000040;
  SET_FEATURE_ON_THREAD_RESTRICTED = $00000080; 

type
  INTERNETFEATURELIST = (
    FEATURE_OBJECT_CACHING,
    FEATURE_ZONE_ELEVATION,
    FEATURE_MIME_HANDLING,
    FEATURE_MIME_SNIFFING,
    FEATURE_WINDOW_RESTRICTIONS,
    FEATURE_WEBOC_POPUPMANAGEMENT,
    FEATURE_BEHAVIORS,
    FEATURE_DISABLE_MK_PROTOCOL,
    FEATURE_LOCALMACHINE_LOCKDOWN,
    FEATURE_SECURITYBAND,
    FEATURE_RESTRICT_ACTIVEXINSTALL,
    FEATURE_VALIDATE_NAVIGATE_URL,
    FEATURE_RESTRICT_FILEDOWNLOAD,
    FEATURE_ADDON_MANAGEMENT,
    FEATURE_PROTOCOL_LOCKDOWN,
    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,
    FEATURE_SAFE_BINDTOOBJECT,
    FEATURE_UNC_SAVEDFILECHECK,
    FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,
    FEATURE_TABBED_BROWSING,
    FEATURE_SSLUX,
    FEATURE_DISABLE_NAVIGATION_SOUNDS,
    FEATURE_DISABLE_LEGACY_COMPRESSION,
    FEATURE_FORCE_ADDR_AND_STATUS,
    FEATURE_XMLHTTP,
    FEATURE_DISABLE_TELNET_PROTOCOL,
    FEATURE_FEEDS,
    FEATURE_BLOCK_INPUT_PROMPTS,
    FEATURE_ENTRY_COUNT
  );

function CoInternetIsFeatureEnabled(FeatureEntry: INTERNETFEATURELIST; dwFlags: DWORD): HRESULT; stdcall; external 'urlmon.dll'
function CoInternetSetFeatureEnabled(FeatureEntry: INTERNETFEATURELIST; dwFlags: DWORD; fEnable: BOOL): HRESULT; stdcall; external 'urlmon.dll'

begin
  if CoInternetIsFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, GET_FEATURE_FROM_PROCESS) = S_FALSE then
    CoInternetSetFeatureEnabled(FEATURE_DISABLE_NAVIGATION_SOUNDS, SET_FEATURE_ON_PROCESS, True); 
end;

【讨论】:

  • 作为参考,我相信如果逻辑被改变,这会起作用:sn-p 正在测试该功能是否已启用,如果是,则启用它。应该测试一下该功能是否未启用,然后启用它。 (对于这种情况,不是针对 S_OK 进行测试,而是针对 S_FALSE 进行测试)
  • @RemyLebeau 在 XE4 和 XE5 UrlMon 中缺少许多接口。我想知道为什么即使它来自 Embarcadero 也不更新?例如IInternetBindInfoEx,IInternetProtocolEx,IUri 仅举几例。
  • 您必须向 Embarcadero 询问此事,并提交 QC 票以提及缺少的接口。
  • @RemyLebeau 我会发布一个问题。似乎他们依靠 JEDI 为他们转换标题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多