header

WinBinderでパスワード生成機をつくる

(1/3)

今回は、WinBinderを使った実用的な Windowsアプリケーションとして、パスワードを生成するプログラムをつくることにする。単にパスワードを生成するだけでは芸がないので、長さは自由に設定でき、文字種も英大文字・英小文字・数字・記号から自由に組み合わせができるようにする。
ここからソース・プログラムをダウンロードできる。

0001: <?php
0002: /** makepassword.phpw
0003:  * パスワードを生成する
0004:  *
0005:  * @copyright (c)studio pahoo
0006:  * @author     パパぱふぅ
0007:  * @version     1.0  2006/03/05
0008: */
0009: include "./include/winbinder.php";        //WinBinder ライブラリをインクルード 
0010: mb_internal_encoding("Shift_JIS");      //内部コードは SHIFT-JISに統一
0011: 
0012: //通常のユーザー関数定義 =====================================================
0013: 
0014: define("APPNAME", "パスワード生成機");     // アプリケーション名
0015: define("APPVERSION", "1.0");             // バージョン番号
0016: 
0017: /**
0018:  * パスワードに使う文字列
0019:  * @global array $Seed
0020: */
0021: $Seed = array(
0022: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",      //英大文字
0023: "abcdefghijklmnopqrstuvwxyz",      //英小文字
0024: "0123456789",                      //数字
0025: "()%$#+-*"                            //記号
0026: );
0027: 
0028: /**
0029:  * 生成するパスワードの最小桁数と最大桁数
0030:  * @global int $Password_min, $Password_max
0031: */
0032: $Password_min = 4;
0033: $Password_max = 20;
0034: 
0035: /**
0036:  * マイクロ秒により乱数器に種まき
0037: */
0038: function make_seed() {
0039:     list($usec$sec) = explode(' ', microtime());
0040:     mt_srand((float) $sec + ((float) $usec * 100000));
0041: }
0042: 
0043: /**
0044:  * パスワードを生成する
0045:  * @param int        $len パスワードの長さ
0046:  * @param string    $str パスワードに使う文字の並び
0047:  * @return string    パスワード
0048: */
0049: function make_password($len$str) {
0050:     $l = strlen($str) - 1;
0051: 
0052:     $psw = "";
0053:     for ($i = 0; $i < $len$i++) {
0054:         $n = (int)mt_rand(0, $l);
0055:         $psw = $psw . substr($str$n, 1);           //1文字追加
0056:     }
0057:     return $psw;
0058: }
0059: 
0060: 
0061: // WinBinder 専用 ============================================================
0062: //イベントIDの定義
0063: if(!defined("ID_ABOUT")) define("ID_ABOUT", 2018);
0064: if(!defined("ID_HELP"))     define("ID_HELP",  2019);
0065: 
0066: if(!defined("IDD_DLG1001")) define("IDD_DLG1001", 1001);
0067: if(!defined("IDC_STATIC1010")) define("IDC_STATIC1010", 1010);
0068: if(!defined("IDC_EDIT1011")) define("IDC_EDIT1011", 1011);
0069: if(!defined("IDC_STATIC1012")) define("IDC_STATIC1012", 1012);
0070: if(!defined("IDC_STATIC1013")) define("IDC_STATIC1013", 1013);
0071: if(!defined("IDC_STATIC1014")) define("IDC_STATIC1014", 1014);
0072: if(!defined("IDC_STATIC1015")) define("IDC_STATIC1015", 1015);
0073: if(!defined("IDC_CHECKBOX1016")) define("IDC_CHECKBOX1016", 1016);
0074: if(!defined("IDC_CHECKBOX1017")) define("IDC_CHECKBOX1017", 1017);
0075: if(!defined("IDC_CHECKBOX1018")) define("IDC_CHECKBOX1018", 1018);
0076: if(!defined("IDC_CHECKBOX1019")) define("IDC_CHECKBOX1019", 1019);
0077: if(!defined("IDC_BUTTON1020")) define("IDC_BUTTON1020", 1020);
0078: if(!defined("IDC_EDIT1021")) define("IDC_EDIT1021", 1021);
0079: if(!defined("IDC_GROUPBOX1022")) define("IDC_GROUPBOX1022", 1022);
0080: 
0081: $mainwin = wb_create_window(NULLAppWindow, APPNAME, WBC_CENTER, WBC_CENTER, 269, 211, 0, 0);
0082: 
0083: wb_create_control($mainwin, Frame, "", 8, 4, 248, 100, IDC_GROUPBOX1022, WBC_VISIBLE | WBC_ENABLED, 0);
0084: wb_create_control($mainwin, Label, "桁数", 16, 24, 31, 16, IDC_STATIC1010, WBC_VISIBLE | WBC_ENABLED, 0);
0085: $Edit_number = wb_create_control($mainwin, EditBox, "8", 55, 19, 47, 21, IDC_EDIT1011, WBC_VISIBLE | WBC_ENABLED | WBC_RIGHT | WBC_NUMBER, 0);
0086: wb_create_control($mainwin, Label, "英大文字", 43, 50, 73, 16, IDC_STATIC1012, WBC_VISIBLE | WBC_ENABLED, 0);
0087: wb_create_control($mainwin, Label, "英小文字", 188, 50, 56, 16, IDC_STATIC1013, WBC_VISIBLE | WBC_ENABLED, 0);
0088: wb_create_control($mainwin, Label, "数字", 43, 74, 73, 16, IDC_STATIC1014, WBC_VISIBLE | WBC_ENABLED, 0);
0089: wb_create_control($mainwin, Label, "記号", 188, 74, 56, 16, IDC_STATIC1015, WBC_VISIBLE | WBC_ENABLED, 0);
0090: $Check1 = wb_create_control($mainwin, CheckBox, "IDC_CHECKBOX1016", 16, 50, 13, 16, IDC_CHECKBOX1016, WBC_VISIBLE | WBC_ENABLED, 0);
0091: $Check2 = wb_create_control($mainwin, CheckBox, "IDC_CHECKBOX1017", 158, 50, 13, 16, IDC_CHECKBOX1017, WBC_VISIBLE | WBC_ENABLED, 0);
0092: $Check3 = wb_create_control($mainwin, CheckBox, "IDC_CHECKBOX1018", 16, 74, 13, 16, IDC_CHECKBOX1018, WBC_VISIBLE | WBC_ENABLED, 0);
0093: $Check4 = wb_create_control($mainwin, CheckBox, "IDC_CHECKBOX1019", 158, 74, 13, 16, IDC_CHECKBOX1019, WBC_VISIBLE | WBC_ENABLED, 0);
0094: wb_create_control($mainwin, PushButton, "生成", 8, 120, 61, 21, IDC_BUTTON1020, WBC_VISIBLE | WBC_ENABLED | WBC_DEFAULTPOS, 0);
0095: $Edit_password = wb_create_control($mainwin, EditBox, "", 85, 120, 167, 21, IDC_EDIT1021, WBC_VISIBLE | WBC_ENABLED, 0);
0096: 
0097: //チェックボックスのデフォルト値
0098: wb_set_value($Check1TRUE);
0099: wb_set_value($Check2FALSE);
0100: wb_set_value($Check3TRUE);
0101: wb_set_value($Check4FALSE);
0102: 
0103: //イベントハンドラの設定
0104: wb_set_handler($mainwin, "process_main");
0105: 
0106: //メニューバーの生成
0107: $mainmenu = wb_create_control($mainwin, Menu, array(
0108:     "ファイル(&F)",
0109:         array(IDCLOSE,    "終了(&X)\tCtrl+Q", "", "", "Ctrl+Q"),
0110:     "ヘルプ(&H)",
0111:         array(ID_ABOUT, "バージョン情報(&A)", "", "", ""),
0112:         array(ID_HELP, "ヘルプ情報(&H)", "", "", "")
0113: )); 
0114: 
0115: //プログラム・アイコン
0116: wb_set_image($mainwin, "./resources/key.ico");
0117: 
0118: /**
0119:  * イベントハンドラ
0120:  * @param obj $window メインウィンドウ
0121:  * @param int $id     イベントID
0122: */
0123: function process_main($window$id) { 
0124:     global $Seed$Edit_number$Edit_password;
0125:     global $Check1$Check2$Check3$Check4;
0126:     global $Password_min,  $Password_max;
0127: 
0128:     switch($id) {
0129:         case IDC_BUTTON1020:
0130:             $n = wb_get_value($Edit_number);
0131:             if ($n < $Password_min)        $n = $Password_min;
0132:             if ($n > $Password_max)        $n = $Password_max;
0133:             wb_set_value($Edit_number$n);
0134:             $psw = "";
0135:             if (wb_get_value($Check1))    $psw .= $Seed[0];
0136:             if (wb_get_value($Check2))    $psw .= $Seed[1];
0137:             if (wb_get_value($Check3))    $psw .= $Seed[2];
0138:             if (wb_get_value($Check4))    $psw .= $Seed[3];
0139:             if ($psw != "")        wb_set_text($Edit_passwordmake_password($n$psw)); 
0140:             break
0141:         case ID_ABOUT:
0142:             wb_message_box($window, "バージョン" . APPVERSION, APPNAME, WBC_OK);
0143:             break;  
0144:         case ID_HELP:
0145:             wb_message_box($window$Password_min . "文字以上、" . $Password_max . "文字以下のパスワードを生成します。", APPNAME, WBC_OK);
0146:             break;  
0147:         case IDCLOSE:
0148:             wb_destroy_window($window);      //ウィンドウを破棄 
0149:             break;  
0150:     }
0151: }
0152: 
0153: //アプリケーションループ
0154: wb_main_loop();
0155: ?>