| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Смена свого ИП адреса программно |
| Автор: Sterling 16.3.2005, 12:40 |
| Народ подскажите как такую штуку реализовать в дельфях. Есть Edit в него вбиваеться ип. Скажем с пробелами или точками. Нажимаешь кнопку и он ставиться в твоей системе в одно из потключений. Потключение выбираеться в ComboBox. Кстати как в него записать все виды потключений меня тоже интересуют =) Если будут коментарие, то вообще супер! Зарание благодарен |
| Автор: Snowy 16.3.2005, 13:22 |
| HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces Думаю комментарии там не нужны. |
| Автор: Sterling 16.3.2005, 14:13 |
| А как к этому обратиться. Вот в чем прикол то! |
| Автор: z-END 16.3.2005, 14:16 |
| так и обратиться как Snowy написал. TRegsitry тебе в руки |
| Автор: Snowy 16.3.2005, 15:09 |
| Читай справку по TRegistry Читай FAQ или DRKB - работа с реестром. |
| Автор: Sterling 18.3.2005, 07:59 | ||
Почитал, вроде что-то нашел, но вот вопрос. Он мне меняет параметр, и так же ставит тип ключа походу который по умолчанию используеться, а вот как тип указать я так и не разобрался:
И еще в ...\interface у меня находятся еще несколько каталогов, например, {95C19F58-C265-489C-8831-257144D1DEC5}, это и есть одно из сетевых потключений?. Но опять же не понятка, сетевуха у меня одна а таких разделов пять. Или это все соединения когда либо созданный у меня на компе? |
| Автор: Snowy 18.3.2005, 08:21 | ||
Нет, старые интерфейсы удаляются вместе с адаптером. Эти две ветки есть всегда. Но зачем они там, я не знаю. Действующие ветки имеют те же имена, что и в разделе Adapters. Нет адаптера - нет интерфейса. |
| Автор: Sterling 18.3.2005, 09:38 |
| Вы наверное меня не правельно поняли. у меня такая ситуация: По этому пути, HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces , у меня есть еще 6 папок ({1CB64B9E-A0DF-47E0-B901-64B473509088}, {2BC6FB07-2753-4120-9FFA-C07A1BC18B22}, {43EC3B44-2C96-4D97-8610-49050CCE79F2}, {45C5AB30-B899-49D4-8A16-CE8F833EDB32}, {95C19F58-C265-489C-8831-257144D1DEC5}, {D0C862C9-906D-469A-A635-0478E68C9DE6}) и только в одной из них в ключе IPAddress указан мой адрес, поэтому то я и в предыдущем коде вписал пусть прямо до этой папки. А если прога будет на другом компе, что тогда. Вот я и хочу узнать что это за папки такие. И второе когда с помощью предыдущего кода я меняю ип, то тип ключа IPAddress становиться reg_sz, а мне надо reg_multi_sz. Как у казать ему этот тип? |
| Автор: Snowy 18.3.2005, 10:24 | ||||
Нужно считать список ключей из раздела Adapters - получишь реально действующие ключи. По полученным номерам, можно обращаться уже к Interfaces. Можно и сразу обращаться к Interfaces и игнорировать ветки, в которых IPAddress либо отсутствует, либо равен 0.0.0.0
TRegistry - упрощенный клаз, для более удобной работы с реестром. Подразумевается его совместимость по структурам и коммандам с TIniFile. Поэтому он не обладает полными возможностями. Он разрабатывался для сохранения своих значений, а не для изменения системных. Поэтому в нем нельзя создать значение типа reg_multi_sz. Для этого придется работать с реестром через WinAPI. Читай справку по RegQueryValueEx b и вообще посмотри раздел "Registry Functions" в справочнике WinAPI. |
| Автор: Sterling 18.3.2005, 11:53 | ||
Вот что получилось с одним но (потчеркнуто):
|
| Автор: Snowy 18.3.2005, 14:19 | ||
| Вот. Программа для изменения IP адресов. Где-то может коряво, без комментариев и try, но работает. Работать под 98-ми скорее всего не бедет, но под NT на любой машине должно.
|
| Автор: Sterling 18.3.2005, 14:32 |
| А ты с моей мне помочь не можешь? С тем что уже есть. |
| Автор: Snowy 18.3.2005, 14:41 |
| Так вот - готовое все. Выдергивай процедуры ReadIP и SetIP. Они на вход должны получать ключ, типа {95C19F58-C265-489C-8831-257144D1DEC5}. В формкреате вставь создание списка этих ключей, как в моем коде. Главное, чтобы индексы комбобокса совпадали с этим списком. Хотя можно придумать что-нить пограмотнее. Вобщем, в результате работы формкреате, мы имеем комбобокс, заполненный именами сетевых адаптеров, и IList, заполненный соответствующими UID'ами интерфейсов этих адаптеров. Если не справишься, высылай исходняки мне на почту. P.S. Только что проверил - под 98-ми действительно не работает. Под 9х, думаю схема примерно такая же, только инфа в другом месте должна быть. Где - не знаю, у меня 98-х нет - машина не моя, ковыряться не могу. |
| Автор: Sterling 26.3.2005, 07:45 |
| Прикол в том, что нужна перезугрузка компа после использования этого кода. А вот как избежать ее. При использование стандартных стредств виндовс, при смене ипа на хр, перезагрузка не нужна! |
| Автор: <Spawn> 30.3.2005, 11:49 | ||
| Это можно осуществить функциями iphlpapi.dll. AddIPAddress - связывает новый адрес с адаптером, DeleteIPAddress соответственно удаляет. Вот код использования(но есть одно проблемка, которую я пока по неимении свободного времени не решил - у тебя будет выскакивать AV, при наличии указателей в структуре - где то идет чтение\записть в невыделеную память, но думаю ты разберешься или тебе кто нить поможет
Добавлено @ 11:53 Не забудь подключить WinSock для использования функции inet_addr |