プログラミング

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

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

2005年7月1日

(←戻る)
 前回までの記事で、ANSI文字列を自作DLL内で確保したメモリ領域に構築し、そのANSI文字列に対するポインタをVBscriptに渡すことに成功した。今回はいよいよ、ユーザ定義型の構造体を引数に持つWin32APIの呼び出しである。テストとして、comdlg32.dllにある、GetOpenFileNameを呼び出してみた。このAPIはOPENFILENAME構造体を使用している。

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プログラムを作成してみた。このプログラムの作成には、このページを参考にさせていただいた。

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を使用することをためらうことがままあったが、こういったページを参考にすればすんなりプログラミングできるようになるかもしれない。

PHP って何? [プログラミング]

2005年6月17日

 今回採用したブログツールで採用されているプログラミング言語が PHP である。あちらこちらの web ページで xxxx.php なるファイル名を持ったページがあり、cgi で動いているらしいので、perl などと同じような、cgi に適したプログラミング言語だとは思っていた。自分でブログをチューンする際は、php が拡張子のファイルを書き換えることになる。少し勉強が必要だ。
   後の記事>>