用戶註冊和登錄ActiveX控件

0x00 前言

起初和老師商討了一下,打算從屬性頁入手,設計一個綜合的包含登錄註冊框的完整的控件。後來發現屬性頁只能在開發的時候調出(網上找到了一些解決方法但是沒有調試出),對windows程序設計也不太熟。後來還是採用了最初想到的調用控件提供的方法進行登錄註冊的方法,登錄和註冊模塊分別提供 UserLogin 和 UserRegister 方法,相關登錄註冊信息作爲參數。

0x01 需求

採用ActiveX控件編程技術,完成下面ActiveX控件。

1)完成一個用戶註冊ActiveX控件(用戶名、密碼、郵箱、生日、身份證、手機等相關新),其中用戶名、密碼、身份證、手機等相關數據類型驗證)。並調用ActiveX控件進行功能演示。

2)完成一個用戶登錄的控件ActiveX控件,要求用戶名,用戶密碼(用戶密碼設置爲軟鍵盤輸入),驗證碼。並進行ActiveX控件調用演示,可以不使用數據庫存儲,例如文件存放用戶名和密碼,進行登錄。

平臺要求:採用 MFC ActiveX編寫,界面可以其他編程語言

0x02 總體設計

2.1 登錄模塊設計

創建一個自定義方法 UserLogin ,將用戶名,密碼作爲參數

在這裏插入圖片描述

登錄模塊相較於註冊模塊簡單,函數流程如下

在這裏插入圖片描述

用戶名格式檢驗使用正則表達式。使用 GetUser_Password 函數獲取文件每一行對應的用戶名密碼,然後進行判斷。具體可以參數註冊模塊設計。

在這裏插入圖片描述

2.2 註冊模塊設計

創建一個自定義方法 UserRegister ,將用戶名,密碼,郵箱等信息作爲參數

在這裏插入圖片描述

函數大致流程如圖

在這裏插入圖片描述

從MFC傳遞過來的信息爲CString類型,注意類型轉換

2.2.1 格式檢驗

在這裏插入圖片描述

regex 庫,使用正則表達式的方式對用戶信息進行格式校驗,reg1 存儲正則表達式,rerResult1 存儲匹配到的字符串,bValid1 存儲判斷的結果,最後再判斷匹配結果就可以了。驗證郵箱,身份證號,手機也是同樣的。、

2.2.2 判斷是否已經註冊

在這裏插入圖片描述

從文件中一行一行地讀取,GetUser_Password 函數獲取每一行對應的用戶名和密碼,然後通過 strcmp 函數比較兩個字符串是否相等來判斷是否已經註冊。

GetUser_Password 函數實現如下,二階指針便於傳遞參數。也是通過正則的方式匹配,rerResult.str(1) 獲取第一個匹配到的子串,即用戶名。rerResult.str(2) 獲取第二個匹配到的子串,即密碼。然後通過二階指針的方式傳遞變量。

在這裏插入圖片描述

最後簡單的 c 語言文件操作將註冊信息寫入到文件中

在這裏插入圖片描述

文件存儲格式如下

在這裏插入圖片描述

2.3 MFC 應用程序設計

使用了標籤控件Tab Control 來切換登錄和註冊窗口,具體使用方法可以參見附錄。

在這裏插入圖片描述

在這裏插入圖片描述

添加 AxtiveX 控件並綁定變量,調用其他 MFC 控件獲取用戶輸入,最後調用 AxtiveX 控件的 UserLogin 方法就可以了。

2.3.1 獲取驗證碼

GetRand 函數隨機生成一個 4 位字符串存儲於變量 randcheckcode 中,之後調用 MFC 接口 GetDlgItem 獲取 ID 號爲 IDC_BUTTON3 的按鈕句柄,再設置 caption 爲驗證碼,以顯示出來。

在這裏插入圖片描述

2.3.2 軟鍵盤輸入用戶密碼

考慮了調用系統軟鍵盤的方式,但是測試了ShellExec 和 CreateProcess,都只能打開記事本,不能打開軟鍵盤。

https://blog.csdn.net/flushhip/article/details/83008317

按這篇文章的說法是 32 位程序運行在 64 位環境下會重定向 SysWOW64 下,而這個目錄下沒有 osk.exe 所以調用失敗,但是我嘗試了文章的解決方法,也把 osk.exe 複製過去了,還是打不開。無奈只能自己手寫一個軟鍵盤。

以按鈕 “q” 爲例,維護了一個全局 CString 變量 password,點擊按鈕 “q” 時,向這個字符串添加字符 “q”, displaypassword 用於在頁面上顯示。有點投機取巧,而且這種方法很麻煩,每一個字符需對應一個按鈕。

在這裏插入圖片描述

2.3.3 用戶登錄

首先判斷驗證碼是否正確,然後將輸入信息作爲參數傳遞給 UserLogin 函數。這裏需要注意第一行 UpdateData() 是必需的,他的作用是將用戶在輸入框輸入內容同步到綁定的變量。

在這裏插入圖片描述

0x03 總結

C 和 C++ 一個難點在於類型的轉換,好在網上都能找到比較方便簡潔的轉換方法。由於ActiveX 控件不能直接下斷點調試,只能將代碼提到MFC應用程序中調試,很費時間。

軟鍵盤實現密碼登錄那裏並不是最優解法,沒有調用到系統自帶或第三方的軟鍵盤,很浪費資源。

參考鏈接

[1] UniCode下CString轉char* 的方法 https://blog.csdn.net/neverup_/article/details/5664733

[2] 標籤控件Tab Control http://www.jizhuomi.com/software/207.html

[3] MFC連接mysql登錄註冊 https://blog.csdn.net/qq_29503183/article/details/81257983

[4] 一個視圖顯示ActiveX控件的屬性頁https://www.xuebuyuan.com/846502.html?mobile=0

[5] regex 類的使用 https://blog.csdn.net/l357630798/article/details/78235307

[6] windwos調用系統軟鍵盤 https://blog.csdn.net/flushhip/article/details/83008317

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章