Bypass_MessageBox表示位置についてNo.40324
styth さん 11/04/07 23:23
 
 Bypass_MessageBoxは、いつも画面のセンターに表示されますが、これを変え
ることはできないんでしょうか?
 できるようにして頂けないでしょうか?
 よろしくお願いします。

[ ]
RE:40324 Bypass_MessageBox表示位置につNo.40326
秀まるお2 さん 11/04/08 09:08
 
 Bypass_XXXX系関数は、基本的にWindowsのAPIをそのままマクロから呼び出し
て使う目的の物なので、WindowsのAPIと違った機能をBypass_XXXXとして提供す
るのはおかしなことになってしまうと思います。

 で、しいて、メッセージボックスを画面のセンター以外に出すということにな
ると…、基本的にWindowsのメッセージボックスという物には座標を指定するよ
うな仕組みが無いので、そういうことを実現するのはちょっと無理があります。

 田楽DLLとかWindowsのShellObjectを使う方法とかでもメッセージボックスの
位置指定みたいなのは無いみたいだしということで、現状ではいい方法は無いん
じゃないかと思います。

-----------------------------------
 googleでいろいろ検索してみたら、特殊な方法(いわゆるフック)を使えばメ
ッセージボックスの位置を変えることは技術的には可能なようではあります。な
ので、例えばtkinfo.dllに、そういう、メッセージボックスの位置を指定させる
ような関数を別途用意するって可能かもしれませんけども…。

[ ]
RE:40326 Bypass_MessageBox表示位置につNo.40329
秀まるお2 さん 11/04/08 15:39
 
> 例えばtkinfo.dllに、そういう、メッセージボックスの位置を指定させる
> ような関数を別途用意するって可能かもしれませんけども…。

 やってみたら出来たので次のバージョンに追加させていただきます。

 SetWindowMoveHook, ReleaseWindowMoveHook関数を追加します。

 使い方としては、例えば以下のようになります。

    loaddll "tkinfo.dll";
    #n = dllfunc("SetWindowMoveHook", 100, 100);
    #n = dllfunc("Bypass_MessageBox", hidemaruhandle(0), "メッセージ"
                , "タイトル", 0x40 );
    #n = dllfunc("ReleaseWindowMoveHook");

 上記例だとx=100, y=100の位置にメッセージボックスを表示します。

 次のβ版から対応させていただきます。

[ ]
RE:40329 Bypass_MessageBox表示位置につNo.40330
styth さん 11/04/08 17:55
 
> 次のβ版から対応させていただきます。
 ありがとうございます。

[ ]
RE:40329 SetWindowMoveHookのヘルプにつNo.40380
styth さん 11/04/22 20:41
 
SetWindowMoveHook関数のパラメータ
> パラメータ1にX座標、パラメータ2にY座標を指定します。Windowsでは画面の
>左上が0,0の位置になっていて、X軸は下方向に向かってプラスの値を取るように
>なっています。
 X軸は下方向に向かってプラスの値を取る、となっていますが、
 X軸は右方向に向かってプラスの値を取る、ではないでしょうか?
 間違っていたら、すみません。

[ ]
RE:40380 SetWindowMoveHookのヘルプにつNo.40381
秀まるお2 さん 11/04/23 10:57
 
 毎度お手数かけてすみません。

>  X軸は下方向に向かってプラスの値を取る、となっていますが、
>  X軸は右方向に向かってプラスの値を取る、ではないでしょうか?

 X軸は、おっしゃる通り、右方向プラスでした。

 僕が書きたかったのは、Y軸が下方向にプラスということでした。ということ
で、「X」の所を「Y」に修正させていただきます。

[ ]