「定期受信の条件」に DNS サーバーのチェNo.39430
Akiyoshi さん 10/10/29 10:45
 
いつも便利に利用させて頂いています。

(困っている点)
当方 VMWare を使用しています。
VMWare をインストールすると、仮想マシンとの通信用に仮想ネットワークアダプタ
『VMware Virtual Ethernet Adapter for VMnet1』などが追加されます。
問題が発生するのはノートパソコンをモバイル(ネットワークを切断した状態)で使
用している場合です。
このとき、上記の仮想ネットワークアダプタが『LANケーブルの抜き差しもチェック』で
LANケーブルがささっていると判断されていると思われ、
結果として、モバイル時にネットワークに接続していない状態で、定期受信が実行さ
れ受信エラーが発生します。

もし、解決策があればご教授頂けると幸いです。

(解決策がない場合の要望)
解決策がなければ、「全般的な設定」の「定期受信」の「定期受信の条件」に、
「DNSサーバーが有効なとき」を追加して頂けないでしょうか。

(当方の環境)
Windows 7 (64bit)
秀丸メール V5.39


以上、宜しくお願いします。

[ ]
RE:39430 「定期受信の条件」に DNS サーNo.39431
秀まるお2 さん 10/10/29 11:57
 
 「LANケーブルの抜き差しもチェック」がONの場合は、WindowsのGetIfTableと
いうAPIを呼び出して、それで何か接続してるLANカードが1つでもあればOK、と
いう処理をしています。

 DNSサーバーが有効かどうかというのは、果たしてどうやって判定していいの
かどうか、いまいち分からないですけども…。

 DNSサーバーが有効かどうかは、例えば

 「nslookup www.maruo.co.jp」

 とかコマンドを実行して、「を見つけられません」のような文字列が返ってこ
なければOKとかって作戦はどうでしょうか。そういう作戦ならマクロで出来ます。

 例えば今ちょっと作ってみた例としては、以下のようなマクロになります。そ
れを例えば「マクロ・マクロ登録・自動起動・送受信の開始直前」に登録してお
く手があるかと思います。

------------------------------------------------------
    loaddll "tkinfo.dll";
    #browsemode = browsemode;
    #readonly = readonly;
    #x = x;
    #y = y;
    #top = dllfunc("hidemaru_screentopy");
    #updated = updated;
    #searchoption = searchoption;
    $searchbuffer = searchbuffer;
    disabledraw;
    if( #browsemode ) browsemodeswitch;
    if( #readonly ) readonlyswitch;
    gofiletop;
    run "nslookup.exe www.maruo.co.jp >con";
    searchup "を見つけられません";
    #result = result;
    undo;
    if( #browsemode ) browsemodeswitch;
    if( #readonly ) readonlyswitch;
    moveto #x, #y;
    if( #updated == 0 ) {
        clearupdates;
        clearupdated;
    }
    setsearch $searchbuffer, #searchoption;
    enabledraw #top;
    if( #result ) {
        #n = dllfunc("SetCancel", 1);
        message "送受信をキャンセルしました。";
    }
------------------------------------------------------

 あるいは、上記の「SetCancel」としている所の処理を、例えば定期受信のON/
OFF切り替えをするように書き換えて、マクロの自動実行タイミングを秀丸メー
ル起動時にしたらいいかもしれないです。

 マクロの例としては、上記マクロの一番最後のif文以降が、

    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    #autodown = getregnum("AutoDown");
    if( #result ) {
        if( #autodown > 0 ) {
            message "autodown off";
            writeregnum "AutoDown", - #autodown;
            #n = dllfunc("EnvChanged");
        }
    } else {
        if( #autodown < 0 ) {
            message "autodown on";
            writeregnum "AutoDown", - #autodown;
            #n = dllfunc("EnvChanged");
        }
    }
    closereg;

 のようになります。

 (message文は動作確認用なので、動作が確認出来た後は削除すればいいで
す)

 あと、実は僕のマシンは最近Windows7になって、WindowsXP Modeも使っている
んですが、これだと、「ipconfig /all」とした時に、

    Tunnel adapter isatap....
    Tunnel adapter ローカルエリア接続...

 のようなLANカードが追加されたようになってます。それの情報をよく見ると、
LANカードの物理アドレス(Macアドレス?)が「00-00-00-00-」で始まる形にな
ってるようです。例えばMacアドレスがそういう形になっていたら、ケーブル抜
き差しチェックから除外する、みたいなことをしたらいいのかもしれませんけど。

 (誰か詳しい人がいたら教えて欲しいです)

[ ]
RE:39431 「定期受信の条件」に DNS サーNo.39433
Akiyoshi さん 10/10/29 13:51
 
早速の回答ありがとうございます。

> DNSサーバーが有効かどうかというのは、果たしてどうやって判定していいの
>かどうか、いまいち分からないですけども…。

私は GetNetworkParams 関数でチェックしています。
下記の URL の内容と同じ実装で、FixedInfo->DnsServerList.IpAddress.String が
空かどうかで判定しています。

●Geekなぺーじ : DNSの情報を取得する
http://www.geekpage.jp/programming/iphlpapi/dns-info.php

但し、Visual Studio 2005 用 MSDN ライブラリ によると GetNetworkParams は Win
dows 95 非対応のようです。

提示して頂いたマクロについてはこれからテストしてみたいと思います。

[ ]
RE:39433 「定期受信の条件」に DNS サーNo.39435
秀まるお2 さん 10/10/29 14:50
 
 現状で、「ネットワークが有効な時のみ」がONの時は、

 InternetGetConnectedState

 って関数でオンラインかどうかチェックしてるんですが、これにさらに、その
DNSサーバーの有無チェックも入れてしまってもいいかなぁという気がします。

 InternetGetConnectedStateが成功したら、さらにDNSがあることもチェックし
て、それでOKなら、って条件にしてしまうということで。

 一回そういう風に直して様子見してみます。
 (特に反論が無ければ…)

[ ]
RE:39435 「定期受信の条件」に DNS サーNo.39436
秀まるお2 さん 10/10/29 15:22
 
 やっぱり、「LANケーブルの抜き差しもチェック」がONの時に、このチェック
も追加でやることにします。

[ ]
RE:39436 「定期受信の条件」に DNS サーNo.39468
Akiyoshi さん 10/11/02 15:23
 
早速β版を試してみたところ、希望通りの動作になっていました。

どうもありがとうございました。

[ ]