雑記帳

日常の出来事や、読んだ本のあらすじや感想など書いています。

自分自身を消す方法

2006-02-21 15:58:06 | Visual Basic
自分自身を消す方法
解読できないけど、いつか使いたいと思うことがありそう。
その時利用させてもらおう。もらいました。

Private Sub Command1_Click()
    Dim FSO As Object   'Scripting.FileSystemObject
    Dim FilePath As String
    Dim S As Object   'Scripting.TextStream

    'Set FSO = New Scripting.FileSystemObject
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FilePath = FSO.BuildPath(App.Path, App.EXEName & ".EXE")

    Set S = FSO.CreateTextFile(FilePath & ".VBS", True, False)
    S.WriteLine "On Error Resume Next"
    S.WriteLine "Set FSO = WScript.CreateObject(""Scripting.FileSystemObject"")"
    S.WriteLine "FSO.DeleteFile """ & FilePath & ".VBS"", True"
    S.WriteLine "Do Until FSO.FileExists(""" & FilePath & ".DEL"")"
    S.WriteLine "  WScript.Sleep 100"
    S.WriteLine "Loop"
    S.WriteLine "FSO.DeleteFile """ & FilePath & ".DEL"", True"
    S.WriteLine "Set WshShell = WScript.CreateObject(""WScript.Shell"")"
    S.Write "If WshShell.Popup(""削除します「" & FilePath & "」"", 10, ""自動削除"","
    S.WriteLine CStr(vbOKCancel Or vbSystemModal Or vbInformation) & ") = vbOK Then"
    S.WriteLine "  WScript.Sleep 500"
    S.WriteLine "  FSO.DeleteFile """ & FilePath & """, True"
    S.WriteLine "  WshShell.Popup ""削除しました。"", 10, ""自動削除""," & CStr(vbInformation)
    S.WriteLine "Else"
    S.WriteLine "  WshShell.Popup ""削除中止"", 10, ""自動削除""," & CStr(vbInformation)
    S.WriteLine "End If"
    S.Close
    Set S = Nothing

    Shell "WSCRIPT.EXE """ & FilePath & ".VBS""", vbNormalFocus

    Set S = FSO.CreateTextFile(FilePath & ".DEL", True, False)
    S.WriteLine FilePath
    S.Close
    Unload Me
    Set S = Nothing
    Set FSO = Nothing
End Sub

スクリプトの使い方、パターンチェック方法

2006-02-14 20:01:34 | Visual Basic
Visual Basic

インターネットで見つけたサンプル。
Subnet Mask, Default Gateway の取り込み方法
スクリプトでIPCONFIGを実行してその結果を取り込めばいい。とまでは思いついたのだけどどうして実現したらいいかわからなかった。
私にはバッチファイルを作成して実行し結果をファイルに出力する。そのファイルを開いてチェックしていくという泥臭い昔ながらの方法しか取れない。
こうやるのかと参考になった。無断転載になるのかな。
ブロクをこういういつかまた見たいと思う参考資料置き場にしたいと思っていました。
なんか昔話ばっか書いてて最初の思惑からずれてしまった。
でもこれからもごちゃまぜでいきます。

Sub GetIpconfig()

    Dim WshShell, oExec, oEx, text, subnet, gateway
    Set WshShell = CreateObject("WScript.Shell")
    Set oExec = WshShell.Exec("ipconfig")
    Set oEx = CreateObject("VBScript.RegExp")    'パターンチェック
    text = ""

    Do While True
    
        If Not oExec.StdOut.AtEndOfStream Then
            text = oExec.StdOut.ReadLine
                                       ' subnet判定、取得
            oEx.Pattern = "(^.*Subnet Mask.*: )([0-9]*.[0-9]*.[0-9]*.[0-9]*)"
            If oEx.test(text) = True Then
                subnet = oEx.Replace(text, "$2")
            End If
                                       ' gateway判定、取得
            oEx.Pattern = "(^.*Default Gateway.*: )([0-9]*.[0-9]*.[0-9]*.[0-9]*)"
            If oEx.test(text) = True Then
                gateway = oEx.Replace(text, "$2")
            End If
        Else
            Exit Do
        End If
    Loop
    
    MsgBox "Subnet Mask = " & subnet & vbNewLine & _
           "Default Gateway = " & gateway

End Sub

思い込み

2006-02-06 20:43:42 | Visual Basic
4日のサーバ置き換え後、初の出勤日だったが多少後処理は残っているものの無事に切り替えられた。
Sさんも2時間ほど待機していてくれたが呼び出しは発生しなかった。よかった。

転勤でちょっとはなれたところへ移動した人からメールで問い合わせがあった。
「プロットするとき印刷される日付があるグループのものだけ印刷しない。なぜか教えてください。」
日付を印刷するマクロを調べても、どのグループかなんてぜんぜんチェックしてないからどこでもいっしょのはず。
数回メールのやり取りをしていろいろ調べてもらってもまったく解決の糸口がつかめない。
また未解決案件が増えてしまうのかと気が重くなる。絶対解決しなくちゃとあせる。
こうなったらしょうがないマクロにいっぱい途中経過を外部ファイルへ出力するよう埋め込んで試してもらうよりない。
そのマクロを用意してメールを付けて送信した。
メールが帰ってきた。「すみません。AutoCADの話じゃないんです。MICRO CADAM なんです。」って。
なんですって。あらあら私たちは何やってるんでしょう。
CADソフトはAutoCAD と MICRO CADAM を使っています。どちらも同じようにプロットすると日付を印刷します。
彼はいつもAutoCADを使っていました。まったくMICRO CADAMの可能性など考えずAutoCAD のことだと思い込みました。
彼はMICRO CADAを使っているんだからとAutoCADのことは頭になかったんでしょう。最初のメールにどちらかということわりがありませんでした。
お互い別のこと思って話をしていたのに、半日近くメールで話していてなんの矛盾もなかったなんて。
ああ恐い。今日の出来事は時間をちょっと無駄にしただけのことですんだけど気をつけないと大きなトラブル引き起こすことになるなぁと思いました。
MICRO CADAM だと聞いてそれなら原因はわかると、解決法を書いて送信したら折り返し「解決しました。ありがとう。」と返事がきました。