忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

これもどちらかと言うと初期設定に近い内容です。
が、実際にはスクリプトがランするたびに行なっています。

ユイはメインPCでこのスクリプトを動かして、2PC目でログの取得を行い、メインPCから2PC目のログファイルを参照するように作られています。
(2PC目でLimechatを動かしてメインPCはLimechatを見る専用にすればよかったんじゃねとは今でこそ思う・・・)
その際にネットワークのドライブをマウントしておくとアクセスが楽になるのでそのようにしてます。
おそらくネットワークパスを変数に格納しちゃってアクセスしても問題ないと思うんだけど、collectfortのときの残骸ではなんでわざわざマウントしてたのかな・・・。と謎なのですが、TIPSとしてはネタになるので。

ちなみにドライブのマウントは、
指定のアドレスをZ:ドライブみたいにアクセスできるようにするラベル貼り作業のことです。

PCが落ちるか、マウントの開放をするまで保持されます。

事前準備としては2PCめとメインPCをホームネットワークみたいに同じネットワーク上においておきます。そしてアクセスしたいフォルダを共有設定にしておきます。

手順としては

①参照したいネットワークフォルダのパスを変数宣言
②マウント名を変数宣言
③現在のネットワークドライブ名みて被ってないか確認(フラグ1)
④被ってたらそのパスを調べて①と同じか確認(フラグ2)
⑤-1マウント(フラグ3)(フラグ1が立ってなかったら)
⑤-2アクセス可能宣言(フラグ3)(フラグ1が立たってフラグ2が立っていたら)

ここでは3つのフラグを使います。
何度もスクリプトがランする場合、毎回マウントしないようにチェックする必要があります。
そこで、まずは被りがないかを確認します。
初回アクセスの時は被らないのでフラグ1が立ちません
二回目以降は被るのでフラグ1を立たせます。

フラグ1が立っていない初回アクセスの時は何も考えずにマウントしちゃって構いません。
が、フラグ1が立った場合、それはドライブ名が被っている証拠ですが、2回目だから被っているのか、それともこのパソコンの設定でもう既にその名前が使われてしまっているのか。が判断付きません。よってそれをフラグ2でしらべています。ドライブのパスを調べて、同じならフラグを立たせる(二回目以降のアクセス)とみなしています。

結果としてフラグ3が立てば何も問題はない。という結論に締めています。

あ、3回目にしてなのですが、このブログはスペースコードが使いにくいので、{ による段差って使ってません。本当に見難くてごめんなさい。

というわけでsample

*ブログの関係上¥と<は全角を使用しています。

01|var NetworkPath = "¥¥¥¥XX-PC¥¥RagnarokOnline¥¥chat";
02|var MountDriveName = "Z:"
03|
04|var objNtWork = new ActiveXObject("Wscript.NetWork");
05|var objDrv = objNtWork.EnumNetworkDrives();
06|var flag1 = false;
07|var flag2 = false;
08|var flag3 = false;
09|for(i=0;i<objDrv.Count() - 1;i+=2){
10|if(objDrv.Item(i) == MountDriveName){
11|flag1 = true;
12|
13|var rep = NetworkPath.replace(/¥¥/," ¥ " );
14|rep = rep.toUpperCase();
15|var comp = objDrv.Item(i+1).replace(/¥¥/," ¥ " );
16|comp = comp.toUpperCase();
17|if(rep == comp){
18|flag2 = true;
19|}
20|}
21|}
22|
23|if(flag1 == false){
24|objNtWork.MapNetworkDrive(MountDriveName,NetworkPath);
25|flag3 = true;
26|}else{
27|if(flag2 == false){
28|//エラーメッセージ的な処理
29|}else{
30|flag3 = true;
31|}
32|}
33|objNtWork = null;
34|
35|//以下でflag3がtrueの時に実際にアクセスするように組む。

1行ずつみていきましょう

01行は①のことです

02行は②のことです

04行はWSHです。しばしば出てきます。MSDNライブラリ:WindowsScriptHost

05行目で
WSHのNetWorkオブジェクトの中のEnumNetworkDrivesメソッドを参照します。

今更ですがオブジェクトってのは、なんかいろんな情報がつまったそのタイトルを掘り下げていく作業です。
例えるならオブジェクトが会社名(学校名)でメソッドが部署名(学年)って感じですかね。
なのでこのオブジェクトの中に格納されている情報を数えたりすることができたりします。

話は戻って。

06~08行はフラグの宣言と初期化(false)

09行からは結果だけ言うと、ネットワークドライブの数を数えて、ひとつひとつ名前被りをしていないか確認しています。
ループカウントが2なのはたしか1つのドライブに対してなんかカウントが2つ上がるからだったとか思うけどよくは覚えてない。

10行目でItemプロパティを使って、取得したネットワークドライブの情報からドライブ名を引き抜きます。で、名前被りがあったらflag1をtrueにする。名前被りがなければ何も考えずにマウント作業へ。

13行目からパスチェックを行います。
名前被りがあった場合に二回目以降のアクセスなのかを判定します。
Itemのなかのドライブ名の次(i+1)にはそのドライブのパスが格納されているので、まずはjscriptのめんどくさいところである¥¥を¥に置き換えて、見慣れたパス表記に直します。また、参照時には大文字小文字を区別してしまうのでtoUppercaseで全部大文字にしてしまいます。
ということを、こちらが手打ちで設定した01行目のパスにも行なって、もし同じ場合には、18秒目でflag2を立てます。つまり二回目以降のアクセスだから大丈夫だよってことです。

あとは前述したフラグのたち具合にそって処理の振り分け。

24行目で実際のマウント作業
MapNetworkDriveメソッドをつかいます
ついでにflag3をたてる。

26以降は、flag3を立てるか立てないかの処理です。

さいごのnullはオブジェクトの開放です。

オブジェクト使い終わったら解放するようにしておきましょう。
リソースがなんたらとか言うのがあった気がする。

で、実際にアクセスする場合の方法については、また別項目で書きます。

Itemの中身が見たい場合には
ループのどっか適切な場所に
log(objDrv.Item(i));
とかいれておけば
Limechatのスクリプトコンソールで見ることができます。

logはデバッグでよく使うので、Limechaのヘルプ読んで使い方覚えておきましょう。
PR
COMMENT
name
title
text
color   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
mail
URL
pass
secret
TRACKBACK
TrackbackURL:
PREV ←  HOME  → NEXT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
新生FF14
TERA紋章しみゅ
ROサポートツール
タイムライン
RSSボットが記事更新をつぶやくのがほとんどっス…
ROキャラクター紹介


TERAキャラ紹介

シュクレール(バサ)



syuzo(エレ)



サケマス(アチャ)


その他サブ

ウリエルキゥィス(スレLv54)

Vermillion(サラLv56)

パズドラ

157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
ツリーカテゴリ
ブログ内検索
最新コメント
[04/30 のな]
[03/22 NEIN]
[03/22 NEIN]
[10/31 イロイ]
[05/02 NONAME]
Copyright (C) 2024 のーびす監察日記 All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]