Сейчас на форуме: asfa, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› как вписать свой сайт в поле "включать режим совместимости эксплорера 8-9"?
Посл.ответ Сообщение

Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 12:55
· Личное сообщение · #1

нужно добавить свой сайт в список сайтов, для которых включается режим совместимости в эксплорере. нашлась ветка реестра:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData
в ней параметр UserFilter
при добавлении какого-то сайта в список - появляется этот параметр, где в бинарном или каком-то там коде этот сайт записывается.

например добавляем cracklab.ru сей параметр начинает выглядеть так:
Code:
  1. 41 1F 00 00 53 08 AD BA
  2. 01 00 00 00 34 00 00 00
  3. 01 00 00 00 01 00 00 00
  4. 0C 00 00 00 80 FB 79 37
  5. 04 18 CE 01 01 00 00 00
  6. 0B 00 63 00 72 00 61 00
  7. 63 00 6B 00 6C 00 61 00
  8. 62 00 2E 00 72 00 75 00


последние
63 00 72 00 61 00
63 00 6B 00 6C 00 61 00
62 00 2E 00 72 00 75 00
это и есть сама ссылка cracklab.ru

0B 00 перед этой ссылкой - количество символов в ссылке cracklab.ru - 11

первые 41 1F 00 00 53 08 AD BA - это я так полагаю видимо заголовок, типа HEADER - объявляющий что я дескать список сайтов. он вроде как всегда одиннаков.

идущие за этим "header"'ом 01 00 00 00 - это я полагаю количество сайтов в списке. в данном случае один. если добавить еще два-три - то это значение изменится на 02 или 03 соответственно.

а вот что такое оставшееся:
34 00 00 00
01 00 00 00 01 00 00 00
0C 00 00 00 80 FB 79 37
04 18 CE 01 01 00 00 00
полагаю дата добавления в список? так как при добавлении, потом удалении, потом опять добавлении - одного и того-же сайта этот кусочек меняется.


в итоге:
если список этот пуст - я смогу добавить свой сайт - просто скопировав имеющийся код в ту ветку реестра и он появится в списке.
если тот лист, к примеру, содержит 5 ссылок и одна из них моя - я смогу это прочитать, то есть программа поймет что дописывать мой сайт уже не нужно.
но если сайтов например 1 штука или больше, и в них нет моего сайта - то мне надо будет добавить свой в конец имеющегося списка, но в этом случае нужно правильно этот кусочек кода подготовить, а как - я пока не понимаю. был бы рад получить консультацию по этому вопросу у более образованных людей



Ранг: 11.3 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 13:30
· Личное сообщение · #2

SeregaZ зачем такие извращения?
все гораздо проще - в Internet Explorer меню Сервис и выбери Параметры режима представления совместимости и добавь там свой сайт.



Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 14:23
· Личное сообщение · #3

по плану утилита производит все нужные настройки автоматически. с 6-7-8 эксплорером все работает замечательно. а вот на 9 если не внести сайт в список для включения совместимости - работать не будет.
про добавление сайта вручную здесь речь не идет. нужно именно автоматическое добавление внешней программой - а это ветка реестра, которая в бинарном или каком-то там коде. вот нужен механизм составления этого бинарного кода.



Ранг: 5.0 (гость), 15thx
Активность: 0.010
Статус: Участник

Создано: 03 марта 2013 14:57 · Поправил: coder13
· Личное сообщение · #4

Если сайт Ваш, то не проще ли сразу на сайте прописать, что он должен открываться в режиме совместимости?

Code:
  1. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />


--> Информация на MSDN <--



Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 16:31
· Личное сообщение · #5

к сожалению не наш. и поскольку это система сдачи отчетности - авторы заинтересованы в том, чтобы как можно меньше народу смогло настроить и сдать эту самую отчетность. при не своевременной сдаче - штраф подобным образом у нас выполняют планы по сбору налоговых поступлений в бюджет.

вот моя партизанско-подрывная деятельность в помощи бухгалтерам, чтобы как можно более упростить настройку этой системы. уже пол года наверное програмка моя гуляет по сети настраивает 6-7-8, а вот 9 я предал анафеме... однако народ редкий пишет что 9 однако работает. ну и поставил я дома 7, 9 эксплорер и сработало - только надо было добавить совместимость. вот теперь сплю и вижу как бы сделать апдейт для своей программы




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 марта 2013 16:48
· Личное сообщение · #6

напишите инструкцию,
1) открыть сайт в броузере IE
2) нажать кнопочку в строке броузера [режим совместмости]
3) профит
даже блондинка осилит, не то что бухгалтер



Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 16:55
· Личное сообщение · #7

reversecode да не солидно как-то... все настройки такие, в принципе бухгалтерша как бы должна понять, просто их куча и все мелкие. а тут комплексная однокликовая утилитка - типа внести в доверенные, насувать ярлыков в избранное, всплывающие окна разрешить для доверенных, автоматические запросы на загрузку файлов... как-то очень не солидно будет по окончанию этой настройки выводить радостную месагу: а теперь кликните кнопку совместимости. в наш век высоких технологий хотелось бы решить эту проблему высокотехнологично.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 марта 2013 16:59
· Личное сообщение · #8

1) ставите регспай
2) добавляете и удаляете всякие сайты для совместимости
3) снимате и изучате лог изменения ветки реестра
4) профит
сойдет?



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 03 марта 2013 17:11
· Личное сообщение · #9

А где тут реверсинг?



Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 18:09
· Личное сообщение · #10

TryAga1n расшифровка алгоритма по которому происходит запись в реестр не канает?



Ранг: 35.4 (посетитель), 15thx
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 19:09
· Личное сообщение · #11

63 00 72 00 61 00
63 00 6B 00 6C 00 61 00
62 00 2E 00 72 00 75 00
это же обычная уникод строка - cracklab.ru



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 03 марта 2013 20:48
· Личное сообщение · #12

вроде этого в msdn нет:

в urlmon.dll есть метод интерфейса
HRESULT __cdecl CBrowserModeFilter::AddIE7Rule(CBrowserModeFilter *this, const wchar_t *pszDomain)

експорт № 442 создает этот интерфейс
HRESULT __cdecl CreateBrowserEmulationFilter(__MIDL___MIDL_itf_browsermode_0000_0000_0004 type, IBrowserEmulationFilter **ppBMFilter)

т.е. тс нужно понять параметры вызова и написать простой интерфейс



Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 20:57
· Личное сообщение · #13

vden столько сложностей... правка реестра потребует от меня простого быдлокода вставки чего надо куда надо, просто надо понять чего он хочет в том не понятном участке кода параметра в реестре.

а CreateBrowserEmulationFilter, я так полагаю, потребует подгрузки длл к моей утилитке, объявление этой функции в программе, а после её использование... эм... это куда сложнее блин.
CBrowserModeFilter::AddIE7Rule(CBrowserModeFilter *this, const wchar_t *pszDomain) - эта команда добавляет сайт в список? это точно?



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 03 марта 2013 21:02 · Поправил: vden
· Личное сообщение · #14

это не точно, это на основе стек-трейса при добавлении домена
если нужно менять именно бинарные данные, то там же в urlmon это можно поискать

ps. не знаю насколько все сложно, я добавил правила вот так

интерфейс

Code:
  1. { For XE2+ }
  2.  
  3. unit uCompat;
  4.  
  5. interface
  6.  
  7. uses
  8.   Windows;
  9.  
  10. const
  11.   urlmon = 'urlmon.dll';
  12.  
  13. type
  14.   IBrowserEmulationFilter = interface(IUnknown)
  15.     ['{012d7f2c-5f7d-468b-83b3-fb8ad12461e7}']
  16.  
  17.     procedure IsIE7Mode; safecall; // don't call
  18.     procedure IE7Rules; safecall; // don't call
  19.     procedure AddIE7Rule(pszDomain: PChar); safecall;
  20.  
  21.     // CBrowserModeFilter::IsIE7Mode(IUri *,int *)
  22.     // CBrowserModeFilter::IE7Rules(IBrowserEmulationRulesEnum * *)
  23.     // CBrowserModeFilter::AddIE7Rule(ushort const *)
  24.     // CBrowserModeFilter::RemoveRule(ushort const *)
  25.     // CBrowserModeFilter::GetRuleTime(ushort const *,_FILETIME *)
  26.     // CBrowserModeFilter::SetRuleTime(ushort const *,_FILETIME)
  27.     // CBrowserModeFilter::ResetBrowserModeFilter(void)
  28.   end;
  29.  
  30. function CreateBrowserEmulationFilter(&type: NativeUInt;
  31.   out ppBMFilter: IBrowserEmulationFilter): HRESULT; stdcall;
  32.   external urlmon index 442;
  33.  
  34. implementation
  35.  
  36. end.


сама программа

Code:
  1. uses
  2.   uCompat;
  3.  
  4. var
  5.   bf: IBrowserEmulationFilter;
  6.  
  7. begin
  8.   if CreateBrowserEmulationFilter(0, bf) = 0 then
  9.   begin
  10.     bf.AddIE7Rule('mydomain.com');
  11.     bf.AddIE7Rule('abc.com');
  12.     bf.AddIE7Rule('def.com');
  13.   end;
  14. end.




Ранг: 29.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 03 марта 2013 23:04 · Поправил: SeregaZ
· Личное сообщение · #15

vden для меня очень сложно было дело пол года рожал код по регистрации сертификата в браузере... столько информации было перебрано, что моя необразованная голова пухла, и я с тех пор зарекся связываться с этими мсднами... но тут видимо не отвертеться

последнее уточнение - этот код добавляет сайты в этот список?


если да, то дальше вопрос - обязательно объявлять все три процедуры?
procedure IsIE7Mode; safecall; // don't call
procedure IE7Rules; safecall; // don't call
procedure AddIE7Rule(pszDomain: PChar);
или достаточно последней? у меня просто несколько иной, менее популярный язык программирования... и мне пока довольно сложно с ориентироваться в этом семпле.

какой правильный тип переменной тут procedure AddIE7Rule(pszDomain: PChar);? обычная текстовая?

// CBrowserModeFilter::IsIE7Mode(IUri *,int *) и далее - это я так полагаю просто комментарии чтоб было понятно где какая переменная и мне можно упустить?

п.с.: арчи... ты просто слепой от старости и нихрена не видишь.



Ранг: 11.9 (новичок), 22thx
Активность: 0.010
Статус: Участник

Создано: 03 марта 2013 23:11 · Поправил: TOM_RUS
· Личное сообщение · #16

Код из поста #14, но на C#:
Code:
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using HRESULT = System.UInt32;
  4.  
  5. namespace AddIE7Rule
  6. {
  7.     [Guid("012d7f2c-5f7d-468b-83b3-fb8ad12461e7"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  8.     interface IBrowserEmulationFilter
  9.     {
  10.         void IsIE7Mode();
  11.         void IE7Rules();
  12.         HRESULT AddIE7Rule(string domain);
  13.         //void RemoveRule();
  14.         //void GetRuleTime();
  15.         //void SetRuleTime();
  16.         //void ResetBrowserModeFilter();
  17.     }
  18.  
  19.     class Program
  20.     {
  21.         [DllImport("urlmon.dll", EntryPoint = "#442")]
  22.         static extern HRESULT CreateBrowserEmulationFilter(uint type, out IBrowserEmulationFilter filter);
  23.  
  24.         static void Main(string[] args)
  25.         {
  26.             IBrowserEmulationFilter filter;
  27.  
  28.             if (CreateBrowserEmulationFilter(0, out filter) == 0)
  29.             {
  30.                 if (filter.AddIE7Rule("test123.com") == 0)
  31.                     Console.WriteLine("Added!");
  32.             }
  33.         }
  34.     }
  35. }
  36.  


Странно что такие вещи мелкомягкие оставляют недокументированными...




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 04 марта 2013 09:32
· Личное сообщение · #17

Изначально в топике реверса не увидел. Потому что если нужен реверс, надо лезть в ишак и разбираться, а не просто задавать вопросы, даже не пытаясь ничего этого сделать. Но когда уже дали сорцы и пошли вопросы, а что делает какая строчка, уже совершенно несерьёзно. Закрыто.


 eXeL@B —› Вопросы новичков —› как вписать свой сайт в поле "включать режим совместимости эксплорера 8-9"?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати