2011-01-15 1 views
3

Ich versuche, den störenden Sound zu deaktivieren, wenn Sie auf einen Link im WebBrowser-Steuerelement klicken, ohne die Benutzerregistry zu ändern. Ich habe die Dokumentation gefunden, dass dies durch CoInternetIsFeatureEnabled, auch here erklärt werden kann. Aber ich habe keine Ahnung, wie man es in Delphi 2010 implementiert, da ich "Undeclared Identifier" -Fehler bekomme, nachdem ich die URLMon-Einheit in das Projekt eingefügt habe und nicht viel Dokumentation da draußen.CoInternetIsFeatureEnabled in Delphi2010

Irgendwelche Ideen?

+0

Sie können einige Tipps von dieser Seite erhalten. http://www.koders.com/delphi/fid9C9871FBCA710621B778496CC84F0FB4B5D48218.aspx?s=cryptoapi –

+0

Ja im Versuch, etwas Licht von diesem Code zu bekommen, aber bisher nicht viel Glück ... das ist von der embededWB (was ich will nicht verwenden in meiner app), aber ich kann immer noch nicht, dass CoInternetsIsFeatureEnabled Arbeit in Delphi – Elias

+0

Was ist das 'cpp' Tag für? – GManNickG

Antwort

5

CoInternetIsFeatureEnabled() und CoInternetSetFeatureEnabled() sind nicht in D2010 Kopie von UrlMon.pas enthalten. Sie müssen sie manuell deklarieren, zB:

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; 
+1

Als Referenz glaube ich, dass dies funktioniert, wenn die Logik geändert wird: Das Snippet testet, ob das Feature aktiviert ist, und wenn ja, aktivieren Sie es. Es sollte getestet werden, um festzustellen, ob das Feature nicht aktiviert ist, und es dann aktivieren. (Für dieses Szenario –

+0

anstelle des Tests gegen S_OK, Test gegen S_FALSE) korrigierte ich das Snippet. –

+0

@RemyLebeau In XE4 und XE5 fehlt UrlMon viele Schnittstellen. Ich frage mich, warum wird es nicht aktualisiert, obwohl es von Embarcadero? Zum Beispiel 'IIInternetBindInfoEx, IInternetProtocolEx, IUri' um nur einige zu nennen. –