ttper製作日記


本体の方はなんとか完成した。
VBScriptでやり始めたら楽にできた。
インストーラーを作るのは難しく、
正直レジストリをいじるのは怖い。


とりあえずインストールでは
強制的に
"C:\Program Files\GARWAS\ttper"
右クリックで開いた時に表示される名前を「ttper」
というようにした。

これを改造するためには
Private Sub(〜)の中の部分に引数を用いて(ByVal A As Integerなど)
別の処理と組み合わせる必要があると思われる。

しかし、まだソフトウェア開発初心者であるために
とりあえずソフトを完成させることに重点を置こうと思う。


Private Declare Function SHSetValue Lib "shlwapi" Alias "SHSetValueA" ( _
ByVal hkey As Long, _
ByVal pszSubKey As String, _
ByVal pszVlaue As String, _
ByVal dwType As Long, _
ByRef pvData As Object, _
ByVal cbData As Long) As Long

Private Const HKEY_CURRENT_USER = &H80000001
Private Const REG_SZ = 1
Private Const REG_DWORD = 4
Private Const CONTEXT_MENU_TEXTSELECT = &H10 'テキストを選択して右クリックした時


'項目の名前を設定
Dim strData As String
strData = "C:\Program Files\GARWAS\ttper"

SHSetValue(HKEY_CURRENT_USER, _
"Software\Microsoft\Internet Explorer\MenuExt\ttper", _
"", _
REG_SZ, _
strData, _
Len(strData)) '入力する場合 ByVal strData で外部から設定できるようになる

'数値をDWORD型で設定
SHSetValue(HKEY_CURRENT_USER, _
"Software\Microsoft\Internet Explorer\MenuExt\ttper", _
"Contexts", _
REG_DWORD, _
CONTEXT_MENU_TEXTSELECT, _
Len(CONTEXT_MENU_TEXTSELECT))

--------------------------------------
こんだけ打った所でデバックしたら失敗…。
よくよく調べてみたらVB6.0では動きそうなのだが
VB2005では動かないようだ。
しかもVB2005の記述を調べたら驚くほど簡単だった。

My.Computer.Registry.SetValue(KeyName, "", strData, Microsoft.Win32.RegistryValueKind.String)
My.Computer.Registry.SetValue(KeyName, "Contexts", CONTEXT_MENU_TEXTSELECT, Microsoft.Win32.RegistryValueKind.DWord)

この2行だけでほぼ上のプログラムと同程度の働きをする。
・・・。
しかし、ここで問題発生。
レジストリを削除するキーが見つからない。何故だ!?


レジストリの削除キーも調べたら見つかり、
フォルダの存在確認などもできたが、どうしてもレジストリの存在確認は
うまくできなかったので、直前でレジストリの値を設定し
常にレジストリがNullにならないようにするという荒業を使った。

そして、ソフト完成。無事に動くことを喜びながらも
知人にソフトが動くか確かめてもらおうとファイル送ったが動かない。

予想通りランタイムが普通のパソコンには入ってないようなので
再配布可能なランタイムを探したら・・・

約20MBもある巨大な代物。

こんなもの(本体は1KBにすぎないのだから)
を配布してもダウンロードしてくれる人は限られるだろう。
今までの苦労は一体・・・(泣)。

とりあえずVBScriptやJavaScriptで簡単にインストーラーができないか
再度学習することにした。


HTAというプログラムを見つけて
現在それでインストーラーを作っている。
というか、自分の作りたいプログラムとまったく同じプログラムを見つけて
そのソース改変配布自由という記述があったため、
そのソースを理解しながらインストーラーを作ってるところだ。

ちょっと勉強になったことをここでメモすると
<form action="./">
のactionの値は"."により一つ戻り"/"により一つ進んでいることから
自分のディレクトリを指していると考えられる。
つまりこうすることによって、自分にインストール場所の値を
送信できるようになっているという訳だ。


一応ソフト完成。
だが、改良したいところは山積みだ。
まず第一に、Sleipnirの様なタブブラウザで[ttper]を使用したときに新しいタブを開くようにすること。
次に、これは簡単だが、アドレス以外の文字列(普通の単語など)をドラッグしたときはそれをグーグル検索かけること。
こうやって書いておかないと改良したい部分を忘れてしまうかもしれないので書いておきました。

よし、また時間見て改良しよう。

戻る