11 kwietnia 2012

Uruchamianie aplikacji w przeglądarce...

...czyli rejestrowanie własnego protokołu URL

Kilka razy podchodziłem do tego problemu. A to kombinowałem z zakręconym JavaScriptem (bezskutecznie), a to z pluginem do Firefoxa (z powodzeniem). Aż trafiłem na artykuł o rejestrowaniu własnych protokołów, tak jak wbudowany http://

Aby przeglądarka rozpoznawała wywołanie typu winbox:192.168.88.1;admin;admin; należy ten protokół zarejestrować w systemie.
Osobiście potrzebowałem kilku takich protokołów, przygotowałem mały zestaw skrypt+aplikacja aby ten proces zautomatyzować.

Plik konfiguracyjny url_launcher.config:
(Nazwa pliku jest ważna, na sztywno wpisana w aplikacji url_launcher.exe)

winbox;c:\bin\winbox.exe
putty;C:\BIN\putty.exe
quake;d:\games\Quake III Arena\quake3.exe

Pierwsza pozycja to nazwa protokołu, druga pozycja (oddzielona średnikiem) to ścieżka do pliku wykonywalnego obsługującego nasz protokół. Odpowiednie wpisy do rejestru wykonuje poniższy skrypt, wpisy są uzależnione od wpisów w pliku konfiguracyjnym.

Skrypt url_launcher.cmd
@echo off
set URL_LAUNCHER_PATH=%~dp0
set URL_LAUNCHER_PATH=%URL_LAUNCHER_PATH:\=\\%

echo Windows Registry Editor Version 5.00 > url_launcher.temp.reg
FOR /F "eol= tokens=1,2 delims=;" %%I in (url_launcher.config) do (
 (
 echo [HKEY_CLASSES_ROOT\%%I]
 echo @="Winbox URI"
 echo "URL Protocol"=""
 echo [HKEY_CLASSES_ROOT\%%I\DefaultIcon]
 echo @="\"%%J\",0"
 echo [HKEY_CLASSES_ROOT\%%I\shell]
 echo @="open"
 echo [HKEY_CLASSES_ROOT\%%I\shell\open]
 echo [HKEY_CLASSES_ROOT\%%I\shell\open\command]
 echo @="\"%URL_LAUNCHER_PATH%url_launcher.exe\" \"%%1\""
 ) >> url_launcher.temp.reg
)
regedit /s url_launcher.temp.reg
del url_launcher.temp.reg

Do tego wszystkiego, potrzebny jest mały programik, który obrobi dane wejściowe i wywoła nam aplikację docelową url_launcher.exe

Wracając do naszego protokołu winbox:192.168.88.1;admin;admin, po wpisaniu go w pasku adresu przeglądarki i uruchomieniu, zostanie uruchomiony program z parametrami c:\bin\winbox.exe 192.168.88.1 admin admin. Analogicznie z putty:8.8.8.8;-l;root zostanie uruchomiony c:\bin\putty.exe 8.8.8.8 -l root

Aby wszystko zadziałało bezproblemowo, wszystkie pliki powinny znajdować się w tym samym katalogu.

I na zakończenie: to rozwiązanie jest uniwersalne, działa w każdej przeglądarce.

5 kwietnia 2012

Speedtest.net Mini - automatyczna aktualizacja

Czasami zdarzało się, że wchodząc na mój własny speedtest okazywało się, że jest nieaktualny... czasami taki nieaktualny wisiał ponad miesiąc...
Napisałem więc prościusieńki skrypt w BASHu który robi to za mnie
#!/bin/bash

cd <pełna_ścieżka_do_katalogu_z_twoim_speedtest.net_mini>
if ! wget -N http://c.speedtest.net/mini/mini.zip 2>&1 | grep -q "not retrieving";then
    unzip -o mini.zip
    cp -fR ./mini/* .
fi
Uruchamiamy co jakiś czas z crona i zapominamy o pilnowaniu i aktualizowaniu naszego Speedtest.net Mini.