□投稿者/ かず -(2002/09/05(Thu) 20:54:20)
□U R L/ |
{---プログラム掲示板投稿フォーム--- 【ソフト名】IPadrCHG (バージョン 3) 【作 成 者】かず 【種 別】フリーソフトウェア 【ひまわりのバージョン】ver.1.56 【転 載】可 (転載条件:ご自由に) 【改変運用】可 【ひまわり本体への梱包】可 【実行時に利用作成するファイル】有 設定ファイル = 母艦のパス&『IPadrCHG.cfg.txt』。 スクリプト = 母艦のパス&『IPadrCHG.tmp.script.bat』。 テンプファイル= 母艦のパス&『IPadrCHG.tmp.route.txt』。 【コメント】 Windows XP、2000用です。 パソコンの次の設定を複数セット保持し、ボタンで切り替えて使用できます。 (1)IPアドレス (2)ディフォルトGW (3)DNS (4)静的ルート また、次のコマンドをボタンで起動できます。 PING, traceroute, nslookup, ipconfig, route print, arp -a WindowsXPと2000で使用実績あり。 アドレス設定には、NetSHを利用しているので、副作用はない...はず。 現在、私の仕事で何人かが使ってます。 ---投稿フォームここまで---}
{プログラム開始}
IPADRCHGVER =「ver.3 forXP/2K」。
※ nslookup起動時、入力欄の文字列がDOS窓に反映されない時は ※ この秒数を長くして下さい。 DOS窓起動待ち時間 = 1{秒}
※ IPアドレスを設定する対象となるアダプタの名称 ネットアダプタ名 =『"ローカル エリア接続"』。
実行ボタン数 = 4。 ※ ( = 表示される実行ボタンの個数 - 1 )
※情報を記録するためのファイル 設定ファイル = 母艦のパス&『IPadrCHG.cfg.txt』。 ※このプログラムが作成する、一時利用ファイル。 スクリプト = 母艦のパス&『IPadrCHG.tmp.script.bat』。 テンプファイル= 母艦のパス&『IPadrCHG.tmp.route.txt』。
{情報タグとその番号を定義} 種類タグ =『tname tadr tmask tdgw tdns trt1 trt2 trt3』。 種類タグを、「 」で、区切る。 情報タグは、それ。 情報タグ数は、要素数(情報タグ) - 1。 ※ ゼロ始まりなので1を引く 情報タグを、反復( 「{それ} = {回数} - 1」を、ひまわりする。 ※ タグに番号割り当て ) 情報名#tnameは、「名称」。 情報名#tadrは、 「IPアドレス」。 情報名#tmaskは、「マスク」。 情報名#tdgwは、 「DefaultGW」。 情報名#tdnsは、 「DNSサーバ」。 情報名#trt1は、 「静的経路」。 情報名#trt2は、 「静的経路」。 情報名#trt3は、 「静的経路」。
空アドレス=「,,,,,,,」。
※API呼び出しの為の準備 {母艦のどこをつかんでも移動できるようにする} 「User32」の、「BOOL ReleaseCapture(VOID)」を、 「」の、「API_ReleaseCapture」として、DLLを利用。
※アドレス配列変数の初期化。 nmを、0から、実行ボタン数まで、繰り返す( アドレス#nm = 空アドレス。 ) 設定ファイルが、存在するか。 もし、それが、はいなら、( 設定ファイル読み込み処理を、呼ぶ。) 違えば、( アドレス数 = 実行ボタン数 アドレス#0は、 「ラボ,172.18.1.200,255.255.255.0,172.18.1.254,172.18.1.1」。 アドレス#1は、 「オフィス,192.168.1.1,255.255.255.0,192.168.1.10,172.18.1.1」。 アドレス#2は、 「テスト1,192.168.20.10,255.255.255.0,192.168.20.1,192.168.10.1」。 アドレス#3は、 「お客様,172.16.10.10,255.255.255.0,172.16.10.1,172.16.10.100」。 )。
母艦の作成を、呼ぶ。 情報入力窓の作成を、呼ぶ。
※_________________________________________________________ ※※※※ メイン ※※※※※※※※※※※※※※※※※※※※※※ ※~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 母艦浮上。 現在IP情報取得を、呼ぶ。 待機。
///////////////////////////////////////////////////////////////////// *情報設定処理 情報入力窓の、タイトルは、「<{ターゲット}> {アドレス#tname#ターゲット}」。 nmを、0から、情報タグ数まで、繰り返す( ひまわりする(「設定IPアドレス{nm}の、テキストは、アドレス#{nm}#{ターゲット}」)。 ) 情報入力窓の、可視は、オン。 情報入力窓を、最前面。 待機。
///////////////////////////////////////////////////////////////////// *情報入力終了 情報入力窓の、可視は、オフ。 戻る。
///////////////////////////////////////////////////////////////////// *情報の登録 {入力値の形式チェックを実施} 結果=「」。 nmを、0から、情報タグ数まで、繰り返す( タグ名 = それ。 もし、(nm = tname)ならば、( ひまわりする(「アドレス#tname#ターゲット = 設定IPアドレス{nm}の、テキスト」)。 続ける。 ) ひまわりする(「 (設定IPアドレス{nm}の、テキスト)を、半角変換。 トリム。 (設定IPアドレス{nm}の、テキスト) = それ。 」)
nmで、条件分岐。 {それの中身の形式チェック} (tadr)の時、(IPアドレス形式検査を、呼ぶ)。 (tmask)の時、(IPアドレス形式検査を、呼ぶ)。 (tdgw)の時、(IPアドレス形式検査を、呼ぶ)。 (tdns)の時、(IPアドレス形式検査を、呼ぶ)。 (trt1)の時、(静的経路形式検査を、呼ぶ)。 (trt2)の時、(静的経路形式検査を、呼ぶ)。 (trt3)の時、(静的経路形式検査を、呼ぶ)。 もし、それが、いいえならば、(結果は、「形式エラー:{情報名#nm}」。抜ける。) )。 もし、結果が、「」でなければ、( 結果を、言う。 それ=「エラー」。 戻る )。 {形式チェックOK} nmを、0から、情報タグ数まで、繰り返す( ひまわりする(「アドレス#nm#ターゲット = 設定IPアドレス{nm}の、テキスト」) )。 実行ボタン表示の更新を、呼ぶ。 それ = はい。 戻る。
/////////////////////////////////////////////////////////////// *設定の反映処理 選択名は、アドレス#tname#ターゲット。 「<{選択名}>\n設定しますか?」と、二択。 もし、それが、いいえならば、戻る。
{アドレス & ディフォルトGW & DNS設定スクリプトの部} wif = ネットアダプタ名。 wad =「{アドレス#tadr#ターゲット} {アドレス#tmask#ターゲット}」。 wgw =「{アドレス#tdgw#ターゲット}」。 wns =「{アドレス#tdns#ターゲット}」。
もし、OSが、「Windows XP」ならば、(wns2 = primary) 違えば、(wns2 = 「」) 「 netsh interface ip set address {wif} static {wad} {wgw} 1 netsh interface ip set dns {wif} static {wns} {wns2} 」を、スクリプトへ、保存する。
{静的ルーティング設定スクリプトの部} wroute = 「」。 3回、( ひまわりする(「wrt = アドレス#trt{回数}#ターゲット」)。 もし、(wrt <>「」)ならば、( wrtを、『:』で、区切る。 wrtvは、それ。 wroute = wroute & 「route add {wrtv#0} mask {wrtv#1} {wrtv#2} metric 1 \n」 ) ) もし、( wroute <>「」)ならば、( 「netsh routing reset \n{wroute}\n」を、スクリプトへ、追加保存。 )
スクリプトを、起動して終了まで待機。 {ここで設定反映失敗の有無を検知したいもんだ} スクリプトを、ファイル完全削除。 現在状態は、選択名。 ARG欄1の、テキストは、アドレス#tdgw#ターゲット。 母艦タイトルセットを、呼ぶ。 1秒、待って、現在IP情報取得を、呼ぶ。 戻る。
///////////////////////////////////////////////////////////////////// *現在IP情報取得 「cmd.exe /c (ipconfig/all && route print)>{テンプファイル}」を、起動して終了まで待機。 テンプファイルを、読む。 テンプファイルを、ファイル完全削除。 情報表示欄の、テキストは、それ。 戻る。
///////////////////////////////////////////////////////////////////// *現在ARP情報取得 「cmd.exe /c (arp -a)>{テンプファイル}」を、起動して終了まで待機。 テンプファイルを、読む。 テンプファイルを、ファイル完全削除。 情報表示欄の、テキストは、それ。 戻る。
//////////////////////////////////////////////////////////////// *現在NETST情報取得 「cmd.exe /c (netstat -an)>{テンプファイル}」を、起動して終了まで待機。 テンプファイルを、読む。 テンプファイルを、ファイル完全削除。 情報表示欄の、テキストは、それ。 戻る。
///////////////////////////////////////////////////////////////// *現在設定情報取得 「cmd.exe /c (netsh interface ip show config)>{テンプファイル}」を、起動して終了まで待機 テンプファイルを、読む。 テンプファイルを、ファイル完全削除。 情報表示欄の、テキストは、それ。 戻る。
////////////////////////////////////////////////////////////////// *PING実行 cmd相手先は、ARG欄1の、テキスト。 「cmd.exe /k (ping -n 3 {cmd相手先})」を、起動。 戻る。
////////////////////////////////////////////////////////////////// *TRCRT実行 cmd相手先は、ARG欄1の、テキスト。 「cmd.exe /k (tracert {cmd相手先})」を、起動。 戻る。
////////////////////////////////////////////////////////////////// *NSLKUP実行 cmd相手先は、ARG欄1の、テキスト。 窓識別ID = 『himawari_nslookup_』 「cmd.exe /k (nslookup -{窓識別ID})」を、起動。 (DOS窓起動待ち時間)秒、待って、ウインドウ列挙。 それを、反復( NSLKUP窓は、それ。 それを、「*{窓識別ID}」で、マッチ。 もし、(それ <> 「」)ならば、( 抜ける。 ) ) NSLKUP窓に、「{cmd相手先}」を、キー送信。 戻る。
/////////////////////////////////////////////////////////////// *静的経路形式検査 もし、それが、「」ならば、( それ = はい。 戻る。 ) 『:』で、区切る。 経路情報は、それ。 経路項目数は、要素数(経路情報)。 もし、経路項目数が、3でなければ、( それ = いいえ。 ※項目数不足 戻る。 )。 項目Wを、0から、(経路項目数-1)まで、繰り返す( それ = 経路情報#項目W。 トリム。 IPアドレス形式検査を、呼ぶ。 もし、それが、いいえならば、抜ける。 ) もし、それが、いいえならば、{そのまま}戻る。 違えば、それ = はい。 戻る。
////////////////////////////////////////////////////////////// *IPアドレス形式検査 『.』で、区切る。 オクテットは、それ。 オクテット数は、要素数(オクテット)。 もし、オクテット数が、4でなければ、( それ = いいえ。 戻る。 )。 検査結果=「」。 IP検査nmを、0から、(オクテット数-1)まで、繰り返す( 検査単語は、オクテット#IP検査nm。 検査長は、LEN(検査単語)。 ptを、1から、検査長まで、繰り返す( もし、(数字か(MID(検査単語,pt,1)))でなければ、 (検査結果は、「エラー」。抜ける。) )。 もし、(検査単語 < 0 || 検査単語 > 255 )ならば、( 検査結果は、「エラー」。 抜ける。 ) )。 もし、検査結果が、「エラー」ならば、(それ = いいえ) 違えば、(それ = はい)。 戻る。
※______________________________________________________________ ※※※※※ オブジェクト作成:母艦の作成 ※※※※※※※※※※※※ ※~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *母艦の作成 母艦の、幅は、(500)。 現在状態 =「−−−」。 母艦タイトルセットを、呼ぶ。 青色で、画面クリア。 閉じるメニューを、メニュー作成。 その、イベントは、( 「<終了>\n登録内容を保存しますか?」と、三択。 もし、それが、はいなら、設定ファイル書き出し処理を、呼ぶ もし、それが、キャンセルなら、戻る。 終わり。 )。 保存メニューを、メニュー作成。 その、イベントは、( 「登録内容を保存しますか?」と、二択。 もし、それが、はいなら、設定ファイル書き出し処理を、呼ぶ )。 換算表を、メニュー作成。 換算表に、換1を、メニュー追加。その、テキストは、「1000 0000/25=128 (128)」。 換算表に、換2を、メニュー追加。その、テキストは、「1100 0000/26=192 (64)」。 換算表に、換3を、メニュー追加。その、テキストは、「1110 0000/27=224 (32)」。 換算表に、換4を、メニュー追加。その、テキストは、「1111 0000/28=240 (16)」。 換算表に、換5を、メニュー追加。その、テキストは、「1111 1000/29=248 (8)」。 換算表に、換6を、メニュー追加。その、テキストは、「1111 1100/30=252 (4)」。 母艦の、マウス押した時は( API_ReleaseCapture。 ※ 窓のどこでも掴めるようにする。 母艦に、「{$A1},{2},0」と、メッセージ送信。 )
obj高さ=30。 obj番号=0。 nmを、0から、実行ボタン数まで、繰り返す( ひまわりする(「 (10,({nm}*obj高さ))に、削除{nm}ボタンを、作る。 その、幅は、(20)。 その、フォントサイズは、9。 その、テキストは、\「削\」。 その、イベントは、(ターゲットは、{nm}。実行ボタンの削除を、呼ぶ。)。 部品配置間隔は、5。 (その、右側)に、複製{nm}ボタンを、作る。 その、幅は、22。 その、フォントサイズは、9。その、テキストは、\「複\」。 その、イベントは (ターゲットは、{nm}。実行ボタンの複製を、呼ぶ。) 部品配置間隔は、1。 (その、右側)に、変更{nm}ボタンを、作る。 その、幅は、25。 その、フォントサイズは、9。その、テキストは、\「変\」。 その、イベントは (ターゲットは、{nm}。情報設定処理を、呼ぶ。) 部品配置間隔は、3。 (その、右側)に、実行{nm}ボタンを、作る。 その、幅は、((母艦の、幅)*0.7)。 その、フォントサイズは、11。 その、イベントは(ターゲットは、{nm}。設定の反映処理を、呼ぶ。) 部品配置間隔は、0。 (その、右側)に、UP{nm}ボタンを、作る。 その、幅は、20。 その、高さは、13。 その、フォントサイズは、6。 その、テキストは、\「△\」。 その、イベントは、(ターゲットは、{nm}。 実行ボタンUPを、呼ぶ。) (その、下側)に、DWN{nm}ボタンを、作る。 その、幅は、20。 その、高さは、13。 その、フォントサイズは、6。 その、テキストは、\「▼\」。 その、イベントは、(ターゲットは、{nm}。 実行ボタンDWNを、呼ぶ。) 」)。 )。 部品配置間隔は、4。 (その、下側)に、他アドレスを、コンボとして、作成。 その、Xは、240。 その、幅は、((実行0ボタンの、幅)*0.6)。 その、フォントサイズは、10。 その、テキストは、「その他(0)」。 他アドレスの、イベントは( 他アドレス選択を、呼ぶ。 実行ボタン表示の更新を、呼ぶ。 ) (10、(他アドレスの、Y))に、情報表示CURボタンを、作る。 その、幅は、40 。 その、フォントサイズは、9。 その、テキストは、「現設定」。 その、イベントは、(現在設定情報取得。) (その、右側)に、情報表示IPボタンを、作る。 その、幅は、40 。 その、フォントサイズは、10。 その、テキストは、「IP/RT」。 その、イベントは、(現在IP情報取得。) (その、右側)に、情報表示ARPボタンを、作る。 その、幅は、30 。 その、フォントサイズは、10。 その、テキストは、「ARP」。 その、イベントは、(現在ARP情報取得。) (その、右側)に、情報表示NTSTSボタンを、作る。 その、幅は、30 。 その、フォントサイズは、10。 その、テキストは、「Netst」。 その、イベントは、(現在NETST情報取得。)
部品配置間隔は、1。 (情報表示CURボタンの、下側)に、情報表示欄を、メモとして、作成。 その、幅は、(母艦の、幅)-20。 その、高さは、150。 その、フォントサイズは、8。 部品配置間隔は、4。 (その、下側)に、ARG欄1を、エディタとして、作成。 その、幅は、140。 その、フォントサイズは、11。 (その、右側)に、PINGボタンを、作る。 その、フォントサイズは、10。 その、幅は、40。 その、イベントは(PING実行を、呼ぶ) (その、右側)に、TRCRTボタンを、作る。 その、フォントサイズは、9。 その、幅は、40。 その、イベントは(TRCRT実行を、呼ぶ) (その、右側)に、NSLKUPボタンを、作る。 その、フォントサイズは、9。 その、幅は、40。 その、イベントは(NSLKUP実行を、呼ぶ)
実行ボタン表示の更新を、呼ぶ。 戻る。
/////////////////////////////////////////////////////////////////// *母艦タイトルセット 母艦の、タイトルは、「IPadrCHG {IPADRCHGVER} (現在の設定:」&現在状態&「)」。 戻る。
///////////////////////////////////////////////////////////////// *実行ボタン表示の更新 {実行ボタンの表示} 実ボ更wを、0から、実行ボタン数まで、繰り返す( ひまわりする(「 実行{実ボ更w}ボタンの、テキストは、アドレス#{tname}#{実ボ更w}&\「:\」&アドレス#{tadr}#{実ボ更w}。 実行{実ボ更w}ボタンの、幅は、((母艦の、幅)*0.7) 」)。 )。 {他アドレス表示の更新} 実ボ更w2 =「」。 実ボ更wを、(実行ボタン数+1)から、アドレス数まで、繰り返す( 実ボ更w2 = 実ボ更w2 & アドレス#tname#実ボ更w &「\n」。 ) 他アドレスの、アイテムを、実ボ更w2に、設定。 他アドレス数 = アドレス数 - 実行ボタン数。 もし、(他アドレス数 > 0) ならば、他アドレスの、テキストを、「その他({他アドレス数})」に、設定。 違えば、他アドレスの、テキストは、「その他(なし)」。 戻る。
//////////////////////////////////////////////////////////////// *実行ボタンの複製 アドレス数に、1を、足す。 アドレスの、(ターゲット+1)行目へ、(アドレス#ターゲット)を、行挿入。 アドレスは、それ。 アドレス#tname#(ターゲット+1) = 「*」&アドレス#tname#(ターゲット+1) 実行ボタン表示の更新を、呼ぶ。 戻る。
///////////////////////////////////////////////////////////////// *実行ボタンの削除 選択名は、アドレス#tname#ターゲット。 「<{選択名}>\nこのアドレスを、\n削除しますか?」と、二択。 もし、それが、いいえならば、戻る。 アドレスの、(ターゲット)行目を、行削除。 アドレスは、それ。 もし、(アドレス数 <= 実行ボタン数)なら( アドレス#アドレス数 = 空アドレス{にする}) 違えば、アドレス数から、1を、引く。 実行ボタン表示の更新を、呼ぶ。 戻る。
//////////////////////////////////////////////////////////////// *実行ボタンUP もし、ターゲットが、0なら、戻る。 実tmp = アドレス#ターゲット。 ※ ひとつ上のボタンと内容を交換。 アドレス#ターゲット = アドレス#(ターゲット-1)。 アドレス#(ターゲット-1) = 実tmp。 実行ボタン表示の更新を、呼ぶ。 戻る。
/////////////////////////////////////////////////////////////// *実行ボタンDWN もし、ターゲットが、実行ボタン数なら、戻る。 実tmp = アドレス#ターゲット。 ※ ひとつ下のボタンと内容を交換。 アドレス#ターゲット = アドレス#(ターゲット+1)。 アドレス#(ターゲット+1) = 実tmp。 実行ボタン表示の更新を、呼ぶ。 戻る。
/////////////////////////////////////////////////////////////// *他アドレス選択 他アドレスの、値を、選択他アド番号に、得る。 他ア選w = 選択他アド番号 + 実行ボタン数 + 1。 他ア選w2 = アドレス#他ア選w。 ※← 一番下の実行ボタン内容を保存 「他ア選w>実行ボタン数」で、ループ( アドレス#他ア選w = アドレス#(他ア選w - 1)。 ※ 選択位置まで順に下げて、 他ア選wから、1を、引く。 ) アドレス#実行ボタン数 = 他ア選w2 。 ※ 空いた位置に保存したのを入れる。 戻る。
※___________________________________________________________ ※※※※※ オブジェクト作成:情報入力窓(フォーム) ※※※ ※~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *情報入力窓の作成 部品配置間隔は、5。 情報入力窓を、フォームとして、作成。 その、可視は、オフ。 その、幅は、((母艦の、幅)*0.6)。その、高さは、(30*情報タグ数+80)。 その、スタイルは、ダイアログスタイル。 その、背景色は、肌色。
情報登録ボタンを、作る。そ{れ}を、情報入力窓に、乗せる。 その、位置は、(10,5)。 その、幅は、70。 その、フォントサイズは、9。 その、イベントは ( 情報の登録を、呼ぶ。 もし、それが、「エラー」でなければ、情報入力終了を、呼ぶ。 )。 キャンセルボタンを、作る。そ{れ}を、情報入力窓に、乗せる。 その、位置は、(情報登録ボタンの、右側)。 その、幅は、70。 その、フォントサイズは、9。 その、イベントは (情報入力終了を、呼ぶ。)
nmを、0から、情報タグ数まで、繰り返す( ひまわりする(「 設定IPアドレス{nm}を、エディタとして、作成。そを、情報入力窓に、乗せる。 その、位置は、(10,40+{obj高さ}*{nm})。 その、幅は、((母艦の、幅)*0.4)。 設定IPアドレス{nm}ラベルを、作る。 そを、情報入力窓に、乗せる。 その、位置は、(設定IPアドレス{nm}の、右側)。 その、フォントサイズは、10。 その、テキストは、情報名#{nm}。 」)。 )。
戻る。
※__________________________________________________________ ※※※※※※※ 設定内容保存 ※※※※※※※※※※※※※※※ ※~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *設定ファイル読み込み処理 設定ファイルを、読む。 それを、ひまわりする。 戻る。
//////////////////////////////////////////////////////////// *設定ファイル書き出し処理 設定内容 = 「アドレス数 = {アドレス数}\n」。 書出ctを、0から、アドレス数まで、繰り返す( 設定内容 = 設定内容&「アドレス#{書出ct}=\「{アドレス#書出ct}\」\n」。 ) 設定内容を、設定ファイルへ、保存。 戻る。
{プログラム終わり}
|
|