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

3

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

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

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

Ответы:

3

Вы не указываете свою ОС, поэтому я предполагаю, что 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или Detech других свойств сети (я могу видеть мое порно архив сетевой диск? Если так что я должен быть дома) и так далее.

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

Дэвид Спиллетт
источник
Извините .. тег сказал «Vista» .. Я должен был положить его в тело
RickMeasham
Мой плохой за то, что не обращал внимания на теги, извините. Сценарий, который я создал вместе, использовался только на машинах с Windows 2000 и XP - техника должна работать на Vista, но я никогда не проверял ее там.
Дэвид Спиллетт
Я забыл сказать: я рад поделиться своим сценарием, если вы хотите его использовать в качестве отправной точки, хотя я не думаю, что он действительно сэкономит вам много времени и усилий.
Дэвид Спиллетт
1

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

JP Alioto
источник
Это может быть даже проще ;-)
Иво Флипс
0

Вы можете создать скрипт, который проверяет ваш 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
-1, этот ответ по существу повторяет проблему с "и вы могли бы автоматизировать это с помощью оболочки", 0 добавленная стоимость.
Кент Фредрик
Справедливо, хотя я не отказался от поиска ;-)
Ivo Flipse
Но эй! В любом случае это вики сообщества!
Иво Флипс
Это много усилий, чтобы найти IP-адрес
Ciaran
0

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

Из того, что я понял, вы захотите перейти по 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 

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

Киран
источник