Internet Explorer AddIn using SHDocVw and mshtml
כיצד אפשר לייצר AddIn שמוסיף קטעי html לכל הדפדפנים (IE) הפתוחים
(תודה לתומר קיסר על העזרה)
לאחר מכן נוסיף את SHDocVw זה אמור להיות ב - C:\Windows\System32 (זהו dll המאפשר גישה לכל הדפדפנים הפתוחים)
כעת נרצה לקבל את כל החלונות הפתוחים, נריץ את הקוד הבא:
private static List<IWebBrowser2> GetIEWindows()
{
List<IWebBrowser2> list = new List<IWebBrowser2>();
ShellWindows windows = new ShellWindows();
foreach (IWebBrowser2 item in windows)
{
if (item.Document is HTMLDocument)
{
list.Add(item);
}
}
return list;
}
IWebBrowser2 מגיע מ - SHDocVw והוא מכיל את כל המידע על החלון הפתוח.
ShellWindows הוא האובייקט המכיל את כל החלונות.
ונבדוק האם האובייקט הוא מסוג HTMLDocument (שמגיע מ - mshtml) כי זה יכול להיות גם תיקיות פתוחות (explorer - לא הדפדפן אלא תיקייה במערכת ההפעלה)
כעת נרצה להוסיף בתחתית כל הדפדפנים הפתוחים את השם שלי, נריץ את הקוד הבא:
static void Main(string[] args)
{
List<IWebBrowser2> ie = GetIEWindows();
foreach (var item in ie)
{
string html = "<hr/><b>Shlomo Goldberg</b><hr/>";
((HTMLDocument)item.Document).body.insertAdjacentHTML("beforeEnd", html);
}
}
כמובן שאפשר לשנות כל דבר ב - html, כרגע בחרתי להשתמש בפונקציה insertAbjacentHTML להוסיף בתחתית העמוד את ה - html,
וכך נראים הדפדפנים שלי אחרי ההרצה של הקוד.
זה הבסיס וההתחלה ליצירת AddIn, מכאן אפשר לקחת את זה קדימה להרבה כיונים, לדוגמא:
ניתן לכתוב Window Service שירוץ ברקע ויעדכן כל הזמן את החלונות החדשים שתפתחו,
או שאפשר לכתוב לחצן ולהוסיף אותו ל - tool bar ובלחיצה עליו להפעיל קוד שיעשה משהו (כמו להסתיר את כל אובייקטי ה - flash באתר).