ひまわりユーザー プログラム掲示板 バックアップ
注意
ひまわりのススメ  □ ひまわり本家Home  □ 新着記事  □ 新規投稿  □ SEARCH  □ 参考プログラム集
ツリー表示

MESSAGE PCのアドレス管理,設定ツール /かず (02/09/05(Thu) 20:54) [26]
......MESSAGE IPadrCHG操作説明書 /かず (02/09/06(Fri) 09:47) [31]


親記事 / ▼[ 31 ]
NO.26  PCのアドレス管理,設定ツール
□投稿者/ かず -(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」。
)
設定内容を、設定ファイルへ、保存。
戻る。

{プログラム終わり}



▲[ 26 ] / 返信無し
NO.31  IPadrCHG操作説明書
□投稿者/ かず -(2002/09/06(Fri) 09:47:34)
□U R L/
操作説明を忘れてました。
このツールは、複数のIPアドレス情報を登録しておき、それを
ボタンで切り替えて使用できるものです。

登録できる「IPアドレス情報セット」のセット数は特に定めていません。
常時表示されるのは5個ですが、それ以上のものは、コンボに
記録されて残り、復活可能です。

起動すると次のようなボタンが表示されます。また、現在のPCの
IPアドレス情報などが自動的に表示されます。
削除ボタン:その設定を削除
複製ボタン:その設定をコピー
変更ボタン:この設定内容を変更 (※)
実行ボタン:その設定をパソコンに反映させる。横長のボタンです。
コマンドボタン:各種コマンドを実行します。

(※)設定内容の変更
新しい窓が開きます。そこの入力欄にIPアドレスなどを記述します。
マスクは、xxx.xxx.xxx.xxx形式です。
静的経路の設定は、
宛先:マスク:ゲートウェイ
の形式です。例えば、次のようになります。
192.168.10.0:255.255.255.0:192.168.10.254

換算表:マスクのビット長を計算するとき、よく悩みませんか?
保存: 現在の設定内容をファイルに保存します。



- Child Tree -