-
Значок сетевого подключения и комстрока
Возникла небольшая проблема в процессе создания скрипта автоматической настройки сетевого подключения в PE-среде.
Для иллюстрации - конкретный пример в обычной Windows XP:
- открываем папку "Сетевые подключения",
- снимаем в окне свойств подключения галку "Пpи пoдключeнии вывecти знaчoк в oблacти увeдoмлeний", жмём Ok.
Всё, значок сетевого подключения сразу исчезает из области уведомлений.
Теперь пробуем вернуть этот значок обратно, для чего выполняем файл ShowNetIcon.cmd с таким содержанием:
Код:
@FOR /F "DELIMS=" %%? IN ('REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} /S^|FINDSTR \\Connection$') DO @REG ADD "%%?" /V ShowIcon /T REG_DWORD /D 1 /F>nul
В результате имеем всё небходимое (запись в реестре и соотв.галка в свойствах) для отображения значка сетевого подключения в области уведомлений. Но! Значок этот появится сразу только после вполнения процедуры "Обновить" (F5) в папке сетевых подключений, или если нажать Ok в окне свойств подключения.
Вопрос: как выполнить эту процедуру из командной строки?
Другой вопрос: можно ли (так же - программно) ускорить обновление состояния этого значка (в PE он появляется сам после выполнения скрипта, но с задержкой)?
Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Update]
"UpdateMode"=dword:00000000
- не помогает.
Последний раз редактировалось VV2006; 28.02.2010 в 03:46.
Причина: попытка более простого (бестолкового) изложения :)
-
Будь в курсе!
Будь в курсе!
Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:
-
Видно зря создал тему здесь - не показалась никому интересной... На всякий случай , - вдруг программеры всё же объявятся - нашёл два способа решения, оба - не через API.
-
С уважением,
Alex Plutoff
А. ПЛАТОВ
-
-
Alex Plutoff, самое интересное, что этот "велосипед" почему-то никто не изобрёл: ни с API, ни без него. По крайней мере, попадавшиеся мне в инете готовые решения типа desktoprefresh.exe и т.п. для данного случая абсолютно бесполезны.
Просто сделал для себя интересное открытие: изменённые настройки сетевого подключения применяются созданием в ветке Connections реестра временного ключа (мульти)строкового типа с произвольным значением, вот так например:
Код:
@reg add hklm\System\CurrentControlSet\Control\Network\Connections /v Temp /t REG_SZ /d Temp /f>nul
@reg delete hklm\System\CurrentControlSet\Control\Network\Connections /v Temp /f>nul
З.Ы. А так хотелось бы увидеть "велосипед"!..
-
Я подобные штуки через *Notify* делал. Например, можно заставить проводник не замечать файл/папку. Типа оно deleted. Правда, это таки API...
Дык выкладывайте варианты. "Не через API" - это в смысле написанное на чем-то интерпретируемом? Жаба - тоже не винапи. Это жабоапи...
Любые "хаки" (нестандартные решения) кому-то да интересны. Выкладывайте, пожалуйста, сильно просим!
Последний раз редактировалось antanta; 07.03.2010 в 19:06.
-
-
antanta, нестандартный вариант решения задачи см. в моём посте выше.
Почему нестандартный - потому что знаю и на 100% уверен: никакие ключи в ветке Connections не создаются ни при выполнения процедуры "Обновить" (F5) в папке сетевых подключений, ни при нажатии Ok в окне свойств подключения.
Какие функции API при этом используются, для меня до сих пор загадка. Кстати, и заинтересовался ими поначалу только постольку, поскольку сразу не удавалось найти простого решения. Кто владеет эзотерическими знаниями API, чтобы описать эти процедуры через них - пожалуйста, поделитесь! Хоть задача и решена, до сих пор интересно, как происходит на самом деле в Windows XP применение изменённых настроек сетевого подключения.
Другой способ решения специфичен - применим только для PE-среды: в скрипт поднятия сети сразу после запуска PENetwork включаем ShowNetIcon.cmd.
-
для программистов
Код:
Как уведомить все приложения, что реестр был изменён?
Для этого можно послать в систему широковещательное сообщение WM_WININICHANGE, указав в нём, что изменения касаются реестра. Большинство приложений, работа которых связана с реестром, должны реагировать на сообщение WM_WININICHANGE.
Пример:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,LongInt(PChar('RegistrySection')));
end;
©Drkb::02270
-
Virtual, скорее всего, не то:
wm_WinIniChange уведомляет окно веpхнего уpовня о том, что файл инициализации Windows, WIN.INI, изменился.
WM_WININICHANGE устарело. Оно включено для совместимости с более ранними версиями Windows. Новые прикладные программы должны использовать сообщение WM_SETTINGCHANGE.
-
мдяяя эксплоеру глубоко плевать как на WININICHANGE так и на SETTINGCHANGE .
а данные значки подгружает именно он! с помощью внешней дллки, похоже как обьект ActiveX
ф5 в окне сетевых настроек, заставляет данный ActiveX перечитать настройки из реестра удалить все иконки, и выдать состояние по новой...
имя окна ответчика за иконки "Connections Tray"
имя длл, похоже: netshell.dll
Код:
Exports:
Ordinal RVA Name
2 00001B94 DllCanUnloadNow
3 00005F52 DllGetClassObject
4 00012D68 DllRegisterServer
5 00012EC9 DllUnregisterServer
1 000283F5 DoInitialCleanup
6 0001631F HrCreateDesktopIcon
7 0002890B HrGetAnswerFileParametersForNetCard
8 0000DA93 HrGetExtendedStatusFromNCS
9 0001305A HrGetIconFromMediaType
10 000285FF HrGetInstanceGuidOfPreNT5NetCardInstance
11 0001826B HrGetNetConExtendedStatusFromGuid
12 000182FA HrGetNetConExtendedStatusFromINetConnection
13 0001819B HrGetStatusStringFromNetConExtendedStatus
14 000093A4 HrIsIpStateCheckingEnabled
15 000163E3 HrLaunchConnection
16 000164A4 HrLaunchConnectionEx
17 000154A0 HrLaunchNetworkOptionalComponents
18 00028652 HrOemUpgrade
19 00012F02 HrRenameConnection
20 00001DF1 HrRunWizard
21 00012FC1 InvokeDunFile
22 00012EE2 NcFreeNetconProperties
23 00012EF2 NcIsValidConnectionName
24 000284FB NetSetupAddRasConnection
25 000284E9 NetSetupFinishInstall
26 000618C9 NetSetupInstallSoftware
27 000285A0 NetSetupPrepareSysPrep
28 000284D9 NetSetupRequestWizardPages
29 000299B3 NetSetupSetProgressCallback
30 0000DB47 NormalizeExtendedStatus
31 000181EE RaiseSupportDialog
32 0001301E RepairConnection
33 00029241 StartNCW
короче сам черт ногу сломит, дальше лень разбиратся ибо нафиг это нужно?
ЗЫ дальше разбирайтесь сами .
ЗЫЗЫ запускать экспортируемые функции напр так
Код:
rundll32 netshell.dll,StartNCW
Последний раз редактировалось Virtual; 09.03.2010 в 16:27.
-
Программных способов вызова папки "Сетевые подключения" несколько:
Код:
rundll32 shell32.dll,Control_RunDLL ncpa.cpl
control ncpa.cpl
control netconnections
Только дальше-то что, открыли папку и? Программный аналог кнопки F5 для неё где?
Остался только чисто теоретический интерес.
Реализуемую функцию: перехватить, определить... выкинуть и забыть!