今回は、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(NULL, AppWindow, 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($Check1, TRUE);
0099: wb_set_value($Check2, FALSE);
0100: wb_set_value($Check3, TRUE);
0101: wb_set_value($Check4, FALSE);
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_password, make_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: ?>
| 2006年03月06日更新 | ||
| <<前へ | <目次> | 次へ>> |
| 戻る | 【関連ページ】 | |