IEの履歴

仕事でIEの履歴を削除するプログラムを作ることになった。
涙が出そうなくらい大変だったので残しておく。
とりあえずメモメモ


C:\Documents and Settings\ユーザ\Local Settings\History以下に「今日」、「先週」等があるがこれらを消すのではない。
消すのはHistory\History.IE5以下にあるindex.datである。
「MSHist****」ディレクトリにindex.datがありIEの履歴情報を持っている。
だから、index.datを消せば履歴も消える。


しかし、今現在ログインしているユーザのindex.datはWindowsが掴んでいるので普通には消せない。


Windowsが掴んでいて消せないのならば、掴んでいないときに消せばいい。
レジストリキーを使えば何とかなる。
「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager」に
「PendingFileRenameOperations」を追加して消す。


ただし、問題がある。
プログラムを実行して再起動すれば履歴は消える。
しかし、「今日」、「先週」などは残ったまま。
こいつも消さなくてはならないのでレジストリキーから消して履歴は完全に消える。


出来たのがこれ↓

'ON ERROR RESUME NEXT

' 定数定義
Const LOCAL_SETTINGS_HISTORY   = &H22&

Const HKLM   = &H80000002
Const SubKey = "SYSTEM\CurrentControlSet\Control\Session Manager"
Const VName  = "PendingFileRenameOperations"

Const IEHistorySubKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Extensible Cache\"

' オブジェクト作成
Set objShell  = CreateObject("Shell.Application")
Set objFSO    = CreateObject("Scripting.FileSystemObject")
Set objWShell = WScript.CreateObject("WScript.Shell")

' IE 閲覧記録の削除
Set objFolder  = objShell.Namespace(LOCAL_SETTINGS_HISTORY)
strHistoryPath = objFolder.Items.Item.Path & "\History.IE5"
Dim DelList
DelList = Array
For Each objSubFolder In objFSO.GetFolder(strHistoryPath).SubFolders
    ' 履歴の情報が置いてあるディレクトリのパスを取得
    n = UBound(DelList)
    ReDim Preserve DelList(n + 4)
    DelList(n + 1) = "\??\" & strHistoryPath & "\" & objSubFolder.Name & "\index.dat"
    DelList(n + 2) = vbNullString
    DelList(n + 3) = "\??\" & strHistoryPath & "\" & objSubFolder.Name
    DelList(n + 4) = vbNullString
    
    ' IE 閲覧記録の情報をレジストリより削除
    ' キーが存在しない可能性を考慮し、一度仮のデータを登録した後削除する
    objWShell.RegWrite IEHistorySubKey & objSubFolder.Name & "\Hoge", "Hoge"
    objWShell.RegDelete IEHistorySubKey & objSubFolder.Name & "\"
Next

' 次回起動時にデータを削除するようにレジストリに設定
With GetObject("winmgmts:\root\default:StdRegProv")
    .SetMultiStringValue HKLM, SubKey, VName, DelList
End With

' オブジェクト初期化
Set objShell      = Nothing
Set objFolder     = Nothing
Set objFSO        = Nothing
Set objWShell     = Nothing

完成までに3日もかけてしまいショックだった。
もっと簡単に出来るものだと思っていたから。
3日目なんて「無理」って言葉を何度言ったか分からない。

大文字と小文字の区別

Javaをやるといってかれこれ1年。。。。
今後仕事で使っていくことになるので、もしかしたらJavaについて書いていくかもです。

それはさておき、今日はちょっとしたことでつまってしまったので、
今後同じようなことでつまらないようメモ代わりに書いておきます。

MySQLのデータベース名、テーブル名はOSによって大文字と小文字の区別がされる。
とのことです。

今日、Windowsで開発を進めていたものをサーバに上げて確認しようとしたのですが、
エラーが起こって動きませんでした。
エラーの内容は「テーブルが存在しません」というものでした。
けれど、今までにローカルでそのようなエラーは出ていませんでしたし、
テーブルやデータはサーバのテーブルをダンプして使っているので存在しないということはありませんでした。

10分ほど悩んで、どうしてもわからなかったので誰かに聞いてみようかと思った時、
ふとあることを思い出しました。

「そういえば、ダンプした時にみたテーブル名は大文字ではなかったか?」

と。

スクリプトに書いているSQLのテーブル名はすべて小文字だったので、
試しに一度大文字に変えてサーバにあげてみました。

動きました。。。。

調べてみるとMySQLはOSによってはDB、テーブル名を大文字と小文字で区別するそうです。
Windwosでは区別しないそうなので、大文字で作られたテーブルに対して小文字でSQLを組んでも怒られませんでしたが、
Unixでは区別するそうなので怒られたみたいです。

今までテーブル名を大文字で作って開発をしたことがなかったので、
意識せずに小文字でテーブル名を書いていたのがいけなかったようです。

しかし、大文字と小文字の区別があるとはびっくりです。
今後テーブル名などは定義どおりに大文字なら大文字で、小文字なら小文字で作っていこうと思います。

あと、ほかのDBではどうなのかもあとで調べてみようと思います。

Javaはじめます

これからJavaを勉強していこうと思う。
というわけでまずは
Hello World!」の表示!!!
基本中の基本ですよ
とりあえずは、コピペで表示からかなと

 public class HelloWorld {
     public static void main( String args[] ) {
         System.out.println("Hello World!");
     }
 }

こんな感じ
これをコンパイルして.classファイルを作成
そして!
表示↓

 Hello World!

表示されましたよ!!!
この瞬間がうれしいですね

ゴールデンウィーク

このままではゴールデンウィークが無くなるかもしれない・・・・

ゴールデンウィークがあるからこそがんばっていたんだが、
何のためにがんばったのかわからなくなってくる。

もう、モチベーションががた落ち・・・・