Toon posts:

[C#] BHO detecteert geen pagina's in frames

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer dus een BHO te schrijven, maar hetgene wat ik wil doet ie nog niet.

Er is niet zoveel goede documentatie te vinden voor C# om BHO's te schrijven (het kan ook aan mij liggen).

Als eerste de code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
[ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352") ]
public interface IObjectWithSite
{
    [PreserveSig]
    int SetSite ([MarshalAs(UnmanagedType.IUnknown)]object site);
    [PreserveSig]
    int GetSite (ref Guid guid, out IntPtr ppvSite);
}

[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("D5F20021-2084-4564-9449-BF195C577FDC")]
public class TestBHO : IObjectWithSite
{
    private SHDocVw.WebBrowser webBrowser;

    public TestBHO ()
    {

    }

    public int SetSite (object site)
    {
        if (site != null)
        {
            webBrowser = (SHDocVw.WebBrowser) site;
            webBrowser.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler (this.OnDocumentComplete);
        }
        else
        {
            webBrowser.DocumentComplete -= new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
            webBrowser = null;
        }

        return 0;
    }

    public int GetSite (ref Guid guid, out IntPtr ppvSite)
    {
        IntPtr punk = Marshal.GetIUnknownForObject(webBrowser);
        int hr = Marshal.QueryInterface(punk, ref guid, out ppvSite);       
        Marshal.Release(punk);
        
        return hr;
    }

    private void OnDocumentComplete (object frame, ref object urlObj)
    {
        if (webBrowser != frame)
            return;

        System.IO.StreamWriter fs = new System.IO.StreamWriter (@"D:\test.txt", true);

        fs.WriteLine ("(page)");
        fs.Flush ();

        fs.Close ();
    }

    [ComRegisterFunction]
    public static void RegisterBHO(Type t)
    {
        RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects", true);

        if (key == null)
            key = Registry.LocalMachine.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects");

        string guidString = t.GUID.ToString("B");
        RegistryKey bhoKey = key.OpenSubKey(guidString);
        
        if (bhoKey == null)
            bhoKey = key.CreateSubKey(guidString);

        key.Close();
        bhoKey.Close();
    }
    
    [ComUnregisterFunction]
    public static void UnregisterBHO(Type t)
    {
        RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects", true);
        string guidString = t.GUID.ToString("B");
        
        if (key != null)
            key.DeleteSubKey(guidString, false);
    }
}


Als ik bepaalde documentatie moet geloven, dan wordt ondocumentcomplete voor elk frame geladen, maar dit gebeurd bij mij zeker niet. In fact, als er frames in voorkomen, dan wordt die methode al helemaal niet meer aangeroepen, totdat de frames verbroken worden.

Er moet toch wel een bepaalde manier zijn om te detecteren of dat een pagina in een frame geladen wordt?

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 08-02 14:55

dominic

will code for food

Wat is een BHO?

Download my music on SoundCloud


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Browser Helper Object

Verwijderd

Topicstarter
Browser Helper Objects

http://www.spywareinfo.com/articles/bho/

Nog weleens gebruikt in adware enzo. Ik wil het gebruiken om een tooltje te schrijven voor een online game.

Verwijderd

Topicstarter
*schop*

Is er misschien iets wat ik fout doe? Zijn er mogelijk betere manieren? Suggesties zijn welkom.