Jeans & Development:2005年 06月の記事

WSHでWin32APIを呼び出す-その5 [プログラミング]

2005年6月30日

(←戻る)
 VBscriptとDynaWrapで、ユーザ定義型の構造体を因数に持つWin32APIを呼び出す方法を考えている。前回までで、文字列に対するポインタを呼び出すことを解決しなければいけないという結論になった。ここで新たな問題が発生した。

 下にdnyawrapNt.zipに含まれているMsgBox.vbsから実行部分だけを抜粋した。
Set UserWrap = CreateObject("DynamicWrapper")
UserWrap.Register "USER32.DLL", "MessageBoxA", "I=HsSu", _
                 "f=s", "R=l"
UserWrap.MessageBoxA Null, "MessageBox (ANSI)", _
        "From DynaWrap Object", 3

このスクリプトの実行結果は、次の様になる。

Test OK

このスクリプトに少し改変を加えたのが次である。


Set UserWrap = CreateObject("DynamicWrapper")
UserWrap.Register "USER32.DLL", "MessageBoxA", "I=HsSu", _
                 "f=s", "R=l"
T="MessageBox (ANSI)"
UserWrap.MessageBoxA Null, T, _
        "From DynaWrap Object", 3


このスクリプトの実行結果は次のようになった。

NG

なんと、この場合文字列のAPIへの受け渡しがうまく行っていない。

WSHでWin32APIを呼び出す-その4 [プログラミング]

2005年6月29日

(←戻る)
 VBscript でDynaWarpを用いてWin32APIの呼び出しをする際、ユーザ定義型の構造体をどのようにして受け渡すのかを考えている。前回までの記事で、実際に使われている構造体のメモリ上の状態と同じ物をメモリ上に構築すれば良いということになった。
 さて、構造体に含まれているInt型やLong型の値はそのままメモリ上に構築されるが、文字列型を含んでいる場合は文字列そのものではなく、文字列の入っているメモリへのポインタ値が入っている。
 そこでまず、文字列へのポインタ値を取得する方法から考えた。

WSHでWin32APIを呼び出す-その3 [プログラミング]

2005年6月29日

(←戻る)

 先のVB バージョンのプログラムを順に見てゆき、VBscriptとの互換性を考えてみることにする。

Option Explicit
Type POINTAPI
        x As Long
        y As Long
End Type

 2行目でいきなりつまずいてしまった。『Type...End Type ステートメント』はVBscriptには含まれていない機能である。どのように解決すればよいだろうか。

WSHでWin32APIを呼び出す-その2 [プログラミング]

2005年6月27日

←戻る

 さて、DynaWrapを用いれば、Win32APIにアクセスできることが分かった。では、これを用いてVBscriptで本格的なWindowsdプログラムを作成できるのであろうか。

 いきなりVBscriptでプログラムする前に、Visual Basic(ver5を用いた)でWin32APIによるWindowsプログラムを作成してみた。このプログラムの作成には、このページを参考にさせていただいた。

Nucleusコアの変更 [Nucleus]

2005年6月26日

Nucleusのコア部分の変更に関するメモ。

WSHでWin32APIを呼び出す [プログラミング]

2005年6月25日

 先の記事を書いた後、WSHでWin32APIを呼び出す方法について調べてみた。DynaCallもしくはDynaWrapというツールを提供してくれている人がいる(The DynaCall page)。これを使えば、VBscriptからWin32APIを呼び出せそうである。

 ちなみに、このページ(The DynaCall page)からdynawrapNt.zipをダウンロードできるようになっている。

 Windows-NT用であるが、今使っているWindows-2000でも使えるかどうか試してみた。

VBscriptでカレントディレクトリの変更をするには [プログラミング]

2005年6月25日

 先日、VBscriptであるプログラムを組んでいた時、スクリプト中でカレントディレクトリを変更することが必要になった。いろいろ調べてみたが、見つからない。手元に『VBscriptポケットリファレンス』という本があるので調べてみたが、ここにも載せられていない。

 VBやVBAでできるのにVBscriptでできない(WSHでもできない)ことは色々あり、有名なのはWin32APIが呼び出せないことである。VBscriptやJscriptはHTMLに埋め込むことを前提にして設計されているので、セキュリティー上の問題からそうのようにしているのだろうと思われる。カレントディレクトリの変更も、このあたりの理由で禁止されているのかなと思っていた(カレントディレクトリの変更が大きなセキュリティー上の問題を引き起こすことは考えにくいと感じながらも)。

 ところが、今日googleでもう一度調べてみると、こんなページを見つけた。カレントディレクトリの変更は、

Set shell = WScript.CreateObject("WScript.Shell")
shell.CurrentDirectory = ".\sub"

で良い。この機能は、v5.6以降でないと使えないらしい。『VBscriptポケットリファレンス』の記述に、『本書執筆現在(1999年4月)、もっとも新しいVBscriptのバージョンは5.0です。』とあった。どおりで、カレントディレクトリの変更が、この本で見つけられなかったわけである。

 この記事を書いている途中でも、WSH関連のよいwebページを見つけた。以前はVBscriptを書く際にWSHのどの機能をどのように呼び出せば目的のことが達せられるのかなかなか見つけられないためにVBscriptを使用することをためらうことがままあったが、こういったページを参考にすればすんなりプログラミングできるようになるかもしれない。

Linux tips [Linux]

2005年6月24日

Linuxのtips集。

@IT:apt-getでインストール可能なパッケージを探すには

エンタープライズ Linux Tips - ハードディスクのクラスタチェックをしたい

.bash_login に『echo updatedb|at now』と書いておくと、ログインの度に『locate』コマンドのデータベースがアップデートされる。

Xoopsのインストール [Linux]

2005年6月24日

 ポータルサイトを構築するため、Xoopsをインストールしてみた。まずxoops-2.0.10-JP.tar.gzをダウンロードした。Xoopsは、MySQLとPHPを利用しているが、これらはすでにインストール済みである。そのまま、ガイドに従ってインストールを進めていくと、大きな問題なくインストール終了。管理者としてログインできて、様々な編集ができることを確認した。

 実は、これは2回目のインストールのトライである。1回目のトライの際は、インストール終了の画面がでたものの、管理者としてログインできなかった。先日ふと、ある項目の入力間違いに気がつき、それを正してインストールするとうまくいった。

 さてインストールが終了したものの、Xoopsは機能があまりにも多すぎて設定に迷うばかりである。この先どうなる事やら。

(以下、インストールメモ)
<<前の記事