Windows (直近のみ表示)
自分用メモ。Visual Studio 2008 Express Editionにて。
メインフォーム(ダミーなわけだけど)を配置したら、NotifyIconを配置。
アイコンからアプリケーションを操作するため、ContextMenuStripも配置。
メニューの中身は適当に実装してNotifyIconにくっつけておく。
で、フォームのプロパティで
WindowState を Minimized
ShowInTaskbar を False
にすると、起動してもフォームは表示されず、通知領域のアイコンのみ表示される。
趣旨は、WindowStateは起動時のフォームの状態で、これが最小化に設定されている。
でもShowInTaskbarがFalseなので表示されず、NotifyIconだけが残っている状態。
*最小化してもこういうの↓が表示されない=通知領域だけ表示
なので当然ながら、NotifyIconを設定し忘れていたり終了メニューを実装し忘れていたりすると
ユーザーに不親切なアプリケーションができあがる。
自動でダウンロードする方法は前々回の記事、cygwin の cron に移植した記録は前回の記事を参照してもらうこととして、
今回は ApacheLogViewer 用に整形します。
と言っても2列目をドメインに差し替えるだけですが。
なので、ドメインが1つだけの契約なら関係ありません。
ロリポップのくれたサブドメインと、独自ドメインと、独自ドメインのサブドメインがあるような状況を想定しています。
#!/bin/sh
cd /home/lolipop_log # .gzが日々落ちてくるディレクトリを指定
out=/home/lolipop_log/alv # 解凍したログを出力するディレクトリ
suffix=`date +"%s"`
suffix=`expr ${suffix} - 86400` # 前日のログを処理するので.
suffix=`echo ${suffix} | perl -ne '@t=localtime($_);printf("%d%02d%02d",@t[5]+1900,@t[4]+1,@t[3])'`
# バーチャルドメインを列記。
for domain in dphoge.lolipop.jp www.foo.net bar.net ;do
zcat ${domain}.${suffix}.gz | awk -vVAL=${domain} '$2=VAL {print $0}' > ${out}/${domain}.${suffix}.log
done
これを適当な名前で保存 -> chmod +x –> crontab –e で、ログを落としたあとの時刻に登録。
crontab –l するとこんな感じになっています。
SHELL=/bin/sh
45 23 * * * /home/lolipop_log/dl_lolipop_logs.sh
55 23 * * * /home/lolipop_log/format.sh
drm2wmv_eは複数のファイルを対象にできないので、1つずつ順番に作業するバッチを生成する。
作業用PCにはPerlを入れていないので自分用に作成。
復元キーを直接貼り付けるので、ソースを持って帰って自前の環境で動かしてください。
フォームの入力内容はSTDINで読んで処理してSTDOUTに吐くだけなので、ファイルに残したりログ取ったりはしていませんが。
->CGIソース
あくまで身内仕様につき不具合があっても知りません。
使用は自己責任で。
1.
スクリプトの置き場所を決める。
今回はC:\Documents and Settings\user にしてみる
2.
ファイルを2つ作る。
・CheckLastModified.bat
・CheckLastModified.vbs
3.
それぞれのファイルの中は次のとおり。
CheckLastModified.bat
--ここから--
@echo off
cscript /nologo "C:\Documents and Settings\user\CheckLastModified.vbs"
PAUSE
--ここまで--
CheckLastModified.bat
--ここから--
'監視したいフォルダを指定`
Directory = "C:\Documents and Settings\"
'何時間以内の更新情報を取得するか指定(単位:h)
df = 24
'ここから下は変更の必要なし
dtNow = Now()
Set sss = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(Directory)
wscript.echo ""
wscript.echo f.Path & " 内 " df & "時間以内に更新されたファイルとディレクトリ"
wscript.echo ""
wscript.echo " 現在時刻:" & dtNow
wscript.echo ""
ShowModified(f)
Sub ShowModified(f)
For Each objFile In f.Files
If DateDiff("h",objFile.DateLastModified,dtNow) < df Then
wscript.echo " " & objFile.DateLastModified & " " & f.Path & "\" & objFile.Name
End If
Next
For Each objSubFolder In f.SubFolders
ShowModified(objSubFolder)
Next
End Sub
wscript.echo ""
--ここまで--
4.
使い方
CheckLastModified.bat をダブルクリックすると、プロンプトが開いてファイルの一覧が表示される。
サブフォルダを大量に含む場合は少し待たされるはず。Cドライブを直接指定したりすると悲惨なことになりそう。
5.
応用
DateDiff("h",objFile.DateLastModified,dtNow)
が、現在時刻との差を求める関数なので、
df = 15 としたうえで DateDiff("n",objFile.DateLastModified,dtNow) とすれば
15分以内に更新されたファイルが表示される。
同様にdf = 3 としたうえで DateDiff("d",objFile.DateLastModified,dtNow) で
3日以内に更新されたファイルが表示される。
ログフォルダやsamba共有フォルダの監視あたりで使えそう?
当然ながら、sambaを提供しているサーバーとローカルマシンの時刻が、大幅にずれている場合は結果に影響が出る。
CheckLastModified.batへのショートカットをデスクトップに置くか、タスクなどで定期的に実行させることで手軽に監視できる。
CheckLastModified.batを
cscript /nologo "C:\Documents and Settings\user\CheckLastModified.vbs" > "D:\web\root\status.txt"
のようにリダイレクトすると、結果をファイルに書き出すことができる。
htmlタグを埋め込んでWWWサーバーに置いてみたり、メールで定期的に送信したりするのもよいかと。
6.
発展
監視フォルダおよび何時間、の部分を引数にすることで汎用化できるはず。
7.
注意
CheckLastModified.vbs自体を実行してしまうと1行につき1回ずつダイアログボックスで表示される。
とてもウザいのでやらないように。
何かあるたびにキーボードを認識してくれなくて困るので、自分用メモ。
\ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ i8042prt \ Paremeters
LayerDriver JPN
の、内容を
kbd101.dllに。
autorun.inf:
[autorun]
OPEN=自動起動するプログラムファイル名
*この仕組みで起動できるのはプログラム(exe)のみ。
html を開くには、フリーソフト 「ShellExec.exe」あたりを併用します。
[autorun] OPEN=ShellExec.exe index.html
と記述したうえで、html ファイルとともに ShellExec.exe もCDに保存。
[autorun] OPEN=ShellExec.exe index.html ICON=アイコンファイル.icoとしてアイコンファイルも保存すれば、CD挿入時にドライブのアイコンとして表示される。
autorun.inf を自分で書くのが面倒なとき用。
autorun.inf-作成ウイザード
HKEY_CURRENT_USER \Software \Microsoft \Windows \CurrentVersion \UnreadMail
UnreadMail キーを右クリックし、アクセス許可をクリック。
SYSTEM アカウントをクリックし、フルコントロールの「拒否」にチェックしてOKをクリック。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer
link の値を 00 00 00 00 に変更
レジストリエディタでHKEY_CLASSES_ROOTキーを開く。
「新規作成」に出てくるファイルタイプの拡張子を探し、ShellNewキーを削除。
例えば、「新規作成」の「テキスト ドキュメント」を削除したい場合は、HKEY_CLASSES_ROOT\.txt\ShellNewキーを削除する。
ショートカットを作成した場所で右クリックし、「新規作成」-「ショートカット」と進む。
項目の場所に
%windir%\System32\shutdown.exe -s -t 0
と入力。名前は任意で。
ちなみにログオフは%windir%\System32\shutdown.exe -l -f
再起動は%windir%\System32\shutdown.exe -r -f -t 0
