拡張スクリプトでDynaCall

  1. 今、スクリプトにてVxEditorなどで使えるDynaCall(WindowsのAPIを取り込む命令)を呼んでみたところ、「DynaCallて何?」みたいな未定義エラーになってしまいました。
    Vxでは動くので、DynaCallを呼び出すコードには問題無いと思います。
    mEditorのスクリプトにはDLLを読み込む命令は無いのでしょうか?
    あったら何かと便利じゃないかと思うのですが……。

    以下にダメだったスクリプトを書いておきます。

    var g_dll;
    g_dll = new DynaCall(); // <- ここでエラー
    // カッコをはずして g_dll = new DynaCall; としてもエラーでした

    g_dll.register("user32.dll", "GetCursorPos",    "i=s",     "f=s", "r=b");
    g_dll.register("user32.dll", "WindowFromPoint", "i=ll",    "f=s", "r=h");
    g_dll.register("user32.dll", "SetFocus",        "i=h",     "f=s", "r=l");
    g_dll.register("user32.dll", "ScreenToClient",  "i=hs",    "f=s", "r=l");
    g_dll.register("user32.dll", "ClientToScreen",  "i=hs",    "f=s", "r=l");

     |  Ippei  |  返信
  2. こんにちは。
    たしかVxEditorはDMonkeyScriptだったはずなので、標準でDynaCallが使えるようになってるんでしょうね。。。DMonkeyScriptはユニコードに対応してないのでmEditorへの搭載は断念した次第です。。。
    で、mEditorのマクロはただ単純にWSHを使用しているだけですのでそれなりの書き方をすればDynaCallが使えると思います。

    WSHでDynaCallを使う方法を解説してるサイトも結構あるようです。
    参考までにメモっておきます。

    まず、↓から「dynawrapNt.zip」を入手
    http://freenet-homepage.de/gborn/WSHBazaar/WSHDynaCall.htm

    regsvr32.exe C:\dynawrapNt\dynwrap.dll

    でdllを登録すると準備完了。

    以下のようなスクリプトでdllの関数を呼び出せます。

    -----sample.js-----
    var UserWrap = new ActiveXObject("DynamicWrapper");
    UserWrap.Register("user32.dll", "MessageBoxA", "i=hssu", "f=s", "r=l");
    UserWrap.MessageBoxA(null, "MessageBoxA", "Sample", 3);
    ----------------------

    でも、dynawrap.dllが必要になるので少しめんどいですね。。。

     |  Kuro  |  返信
  3. 疑問が全部氷解しました!
    ご丁寧な回答どうもありがとうございます。
    DLLを入れるのは確かにチョイと面倒ですが、Vx使う気ねーし、なんやかんやでmEditorを手放せなくなってきてるし、ためしにインストールしてみようと思います。

    これからも開発がんばってください。

     |  Ippei  |  返信
スポンサーリンク