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:
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?
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?