概要
会社で作って公開できるものを残していこうかなーって
殆どが勤め先でしか使えないDBのスクリプトだったり、社内用のツールのためのバッチだったりする中、他でも使えるかもというものを書いていきます。
ツール系
プロセス強制終了
VBのコンソールです。
会社のパソコンってなんか色々はいってるんですよね、、、
なので、スタートアップにこのexeのショートカットを突っ込んで、起動オプションに色々している感じです。
起動オプションは下記のような感じです。
起動プション
起動プションの /***= 以外はすべてプロセス名として認識するので、スペース区切りで不要なものをごっそり入れる感じです。
Imports System.ComponentModel
Module Module1
Sub Main()
Dim tasklist As New List(Of Diagnostics.Process)
Dim waitparamnm As String = "/wait=", '処理開始待ち
hidewaitparamnm As String = "/hidewait=", '処理完了後の閉じ待ち
retryparamnm As String = "/retry=",'リトライ回数
retrywaitparamnm As String = "/retrywait=" 'リトライ開始待ち
Dim waittime As Integer = 0,
hidewaittime As Integer = 0,
retrycount As Integer = 0,
retrywaittime As Integer = 0
Try
'wait
For Each args As String In My.Application.CommandLineArgs
Select Case True
Case args.ToLower.StartsWith(waitparamnm.ToLower())
waittime = Integer.Parse("0" & args.Remove(0, waitparamnm.Length)) * 1000
End Select
Next
Console.WriteLine("Wait " & waittime)
Threading.Thread.Sleep(waittime)
'run
For Each args As String In My.Application.CommandLineArgs
Select Case True
Case args.ToLower.StartsWith(waitparamnm.ToLower())
'waittime = Integer.Parse("0" & args.Remove(0, waitparamnm.Length)) * 1000
Case args.ToLower.StartsWith(hidewaitparamnm.ToLower())
hidewaittime = Integer.Parse("0" & args.Remove(0, hidewaitparamnm.Length)) * 1000
Case args.ToLower.StartsWith(retryparamnm.ToLower())
retrycount = Integer.Parse("0" & args.Remove(0, retryparamnm.Length))
Case args.ToLower.StartsWith(retrywaitparamnm.ToLower())
retrywaittime = Integer.Parse("0" & args.Remove(0, retrywaitparamnm.Length)) * 1000
Case Else
tasklist.AddRange((Diagnostics.Process.GetProcessesByName(args)))
End Select
Next
'kill + retry
If tasklist.Count > 0 Then
For i As Integer = 0 To retrycount
If i > 0 Then
Console.WriteLine("Retry " & i)
Console.WriteLine("RetryWait " &
retrywaittime)
Threading.Thread.Sleep(retrywaittime)
End If
kill(p_TaskList:=tasklist)
If tasklist.Count <= 0 Then Exit For
Next
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Console.WriteLine("End.")
Threading.Thread.Sleep(hidewaittime)
End Sub
Private Sub kill(ByRef p_TaskList As List(Of Diagnostics.Process))
Dim killedtaskidlist As New List(Of Integer)
For Each task As System.Diagnostics.Process In p_TaskList
Try
Dim processno As Integer = 0
Console.Write(task.MainModule.ModuleName & ":")
'プロセスを強制的に終了させる
task.Kill()
killedtaskidlist.Add(task.Id)
Console.WriteLine("Killed.")
Catch ex As Win32Exception
Console.WriteLine("Dont Killed")
Catch ex As NotSupportedException
Console.WriteLine("Non Supported")
Catch ex As InvalidOperationException
Console.WriteLine("PS Not Found")
End Try
Next
p_TaskList.RemoveAll(Function(ps As Diagnostics.Process)
Return killedtaskidlist.Contains(ps.Id)
End Function)
End Sub
End Module
上記をコンパイルしたものを下記においておきます。(気分次第w)
SkyDrive
サクラエディタのマクロ
基本オラクル・.Net系なので、それらのコーディングなどで使ったサクラエディタ用のマクロが下記です。
SQL_In
エクセルのデータをInの条件に入れたいときとかは、改行ごとにシングルクォーテーションとおしりにカンマを入れるので、そのマクロです。
//キーボードマクロのファイル
S_ReplaceAll('$|^', '\'', 164); // すべて置換
S_ReplaceAll('$', ',', 164); // すべて置換
S_ReDraw(0); // 再描画
Trim
・・・Trimです。
//キーボードマクロのファイル
S_ReplaceAll('^\\s+|\\s+$', '', 36); // すべて置換
S_ReDraw(0); // 再描画
NULL_DEL
無駄な改行とかを消して行を詰める感じのやつです。
//キーボードマクロのファイル
S_ReplaceAll('^[[ \\t][\\r\\n]]+', '', 164); // すべて置換
S_ReDraw(0); // 再描画
スクリプト系
ディスプレイの電源を切る時間調整
会社うるさいんです、、、PCついてるとまだ会社にいると思われるし、省エネどうのこうのと、、、
でも帰宅するとき一々シャットダウンしてると、やりかけのソースすべて閉じないといけないですよね、、、
Visual Studioとか会社の古くて重いし、、、ノートPCだし、、、
ということで。
あたかもシャットダウンしているように見せかけるため、ディスプレイの電源だけ切るような小細工しています。
(スリープや休止状態もありだけど、なんか好きじゃないんです、かと言ってスクリーンセイバーで黒くしても、バックライト生きてるからバレちゃうし)
@echo off
:LOOP
rem "Monitor Power-off timeout"
set /P OT="Min Num (memo: q -> exit) = "
echo %OT%
if %OT% == q goto :EXIT
powercfg.exe -X /monitor-timeout-ac %OT%
goto :LOOP
:EXIT
exit /b 0
このバッチを起動すると下記のようにディスプレイを切る時間を分単位で問い合わせ続けます。
(問い合わせ続けるのは、会社来た時に0を入れて切れないようにしたかったから)