Утилита для изменения фона рабочего стола на основе текущего IP-адреса

2398
RickMeasham

Я хотел бы иметь различный фон рабочего стола в зависимости от того, к какой сети я подключен (дома, на работе, в роуминге и т. Д.).

Кто-нибудь знает способ сделать это с Windows Vista?

3
Почему сообщество Wiki? Ciaran 15 лет назад 0
Поскольку вопрос был коротким, было бы лучше оставить его открытым для расширения, если бы сообщество захотело. RickMeasham 15 лет назад 0

4 ответа на вопрос

3
David Spillett

Вы не указываете свою ОС, поэтому я предполагаю, что Windows.

У меня есть сценарий, сбитый вместе в VBSctipt, который регулярно запускается (с помощью встроенной функции запланированных задач Windows) и меняет мои обои на случайный выбор в зависимости от времени дня (поэтому он выбирает один из «утренних» настроек между 0700 и 1000 и тд). Как только изображение решено использовать, следующие строки обновляют обои:

Set oShell = WScript.CreateObject("Wscript.Shell") oShell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper", sImage oShell.Run "%windir%\System32\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 1, False 

Вы можете создать нечто подобное, основанное на выборе исключительно на диапазоне IP-адресов, на котором вы находитесь. Вы можете определить свой текущий публичный адрес, сделав HTTP-вызов на что-то вроде http://whatismyipaddress.com/ с использованием библиотеки WinHTTP (хотя, если вы используете публичный сервис, подобный этому, убедитесь, что вы не выполняете поиск слишком часто), В качестве альтернативы для определения вашего общедоступного IP-адреса, вы можете попробовать отсканировать выходные данные ipconfigили определить другие свойства сети (могу ли я увидеть сетевой диск с порнухой?

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

Извините .. тег сказал "Vista" .. Я должен был положить его в тело RickMeasham 15 лет назад 0
Мой плохой за то, что не обращал внимания на теги, извините. Сценарий, который я создал вместе, использовался только на машинах с Win2K и XP - техника _should_ работает на Vista, но я никогда не проверял ее там. David Spillett 15 лет назад 0
Я забыл сказать: я рад поделиться своим сценарием, если вы хотите его использовать в качестве отправной точки, хотя я не думаю, что он действительно сэкономит вам много времени и усилий. David Spillett 15 лет назад 0
1
JP Alioto

Проверьте эту ветку SU . Это может сработать для вас.

Это может быть даже проще ;-) Ivo Flipse 15 лет назад 0
0
Ivo Flipse

Вы можете создать скрипт, который проверяет ваш IP-адрес, а затем меняет фон.

Жаль, что мой опыт написания сценариев настолько низок, что я не представляю, как это написать.

Вот VBscript, чтобы найти ваш IP-адрес:

'GetIPaddr.vbs - Check the IP address you are currently 'connected to the Internet with (or LAN IP). '© Bill James - bill@billsway.com ' rev 15 Jan 2002 ' Now works with Windows NT, 2K, XP  Option Explicit Dim IP_Address : IP_Address = GetIP()  If IP_Address = "0.0.0.0" OR IP_Address = "" Then MsgBox "No IP Address found." Else InputBox vbcrlf & "Current IP Address is " & IP_Address & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Use Ctrl + C to copy IP Address to Clipboard)", _ "GetIPaddr.vbs © Bill James", IP_Address End If  Function GetIP() Dim ws : Set ws = CreateObject("WScript.Shell") Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt" Dim ThisLine, IP If ws.Environment("SYSTEM")("OS") = "" Then ws.run "winipcfg /batch " & TmpFile, 0, True Else ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True End If With fso.GetFile(TmpFile).OpenAsTextStream Do While NOT .AtEndOfStream ThisLine = .ReadLine If InStr(ThisLine, "Address") <> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2) Loop .Close End With 'WinXP (NT? 2K?) leaves a carriage return at the end of line If IP <> "" Then If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, Len(IP) - 1) End If GetIP = IP fso.GetFile(TmpFile).Delete  Set fso = Nothing Set ws = Nothing End Function 

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

-1, этот ответ по существу повторяет проблему с "и вы можете автоматизировать это с помощью оболочки", 0 добавление значения. Kent Fredric 15 лет назад 1
Справедливо, хотя я не отказался от поиска ;-) Ivo Flipse 15 лет назад 0
Но эй! В любом случае это вики сообщества! Ivo Flipse 15 лет назад 0
Это много усилий, чтобы найти IP-адрес Ciaran 15 лет назад 0
0
Ciaran

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

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

Я нашел этот пакетный скрипт, чтобы сделать именно это.

http://www.computing.net/answers/programming/batch-file-finding-the-ip-address/13900.html

IPCONFIG |FIND "IP" > %temp%\TEMPIP.txt FOR /F "tokens=2 delims=:" %%a in (%temp%\TEMPIP.txt) do set IP=%%a del %temp%\TEMPIP.txt set IP=%IP:~1% echo %IP% >%temp%\ip.txt echo The current IP address is "%IP%" 

Теперь, когда у вас есть IP-адрес, вам, вероятно, потребуется настроить своего рода оператор if.

Действие if будет примерно таким

http://www.computing.net/answers/programming/batch-to-change-desktop-wallpaper/15105.html

reg /add HKCU\Control Panel\Desktop\WallPaper /v wallpaper /t REG_SZ /d c:\images\wallpaper.bmp 

Недостаток использования этого как пакетного файла - это то, что он должен быть настроен как запланированное задание или что-то подобное