屈曉+葉家仲+許志華+陳子洋+鐘俊杰+陳睿華
摘 要:依照軟件工程中軟件開發(fā)的相關理論對系統(tǒng)進行了分析和設計,我們的“智點”軟件主要是應當下智能化時代以及安卓系統(tǒng)的普及,我們就基于Android手機系統(tǒng)做了一款手機與電腦交互,實現鎖定電腦鎖定的軟件。Android自動密碼鎖定系統(tǒng)主要運用到JAVA編程;API (Application Programming Inter face 應用程序編程接口);UI界面優(yōu)化技術(User Interface);安卓開發(fā)技術。
關鍵詞:自動鎖定;安卓與電腦交互;設計
中圖分類號:TP311 文獻標志碼:A 文章編號:2095-2945(2017)21-0030-03
1 概述
隨著信息時代的來臨,使人們產生“智能”這一名詞的概念,而中國手機用戶量接近13億,中國電腦用戶量接近12億,隨著智能手機與智能化電腦的用戶量日益增加,智能化產業(yè)成為現今一個熱門行業(yè),此項目將電腦與智能手機緊密聯系起來,將會是智能化產業(yè)中的又一技術的革新。
2 系統(tǒng)設計與實現
本系統(tǒng)采用了C/S客戶端與服務器模式的體系結構,以JAVA語言編寫的服務器,以SOCKET打開連接網絡的端口,利用局域網的通用性,讓客戶端與服務器端進行連接,從而實現交互。
整個鎖屏系統(tǒng)的功能結構主要是包含以下幾個部分:
(1)安全權限的設置,我們?yōu)槭褂梦覀冩i屏系統(tǒng)的用戶都設置了賬號與密碼,必須登陸成功才能開啟PC端的服務器。
(2)登錄成功后,根據服務器所顯示所在局域網的網段,手機端連接服務器,從而實現PC端與客戶端對接,進而對PC端進行控制。
(3)鎖定屏幕時,鼠標只能限制在一定區(qū)域內移動,而整個屏幕的亮度處于節(jié)能亮度的狀態(tài),達到節(jié)能低碳的作用。
鎖屏系統(tǒng)的功能結構圖如圖1所示。
3 各大模塊的組成部分
3.1 連接模塊
(1)界面=服務器界面+手機界面。
服務器界面主要是用來顯示客戶端發(fā)送過來的命令。客戶端界面分為兩個界面,第一個界面是用來輸入局域網IP地址,第二個界面為操作界面,用戶可以通過這個界面向服務器端發(fā)送命令。
(2)Socket通信協(xié)議實現服務器端與客戶端的交互。
使服務器與客戶端進行連接,客戶端可以向服務器端發(fā)送鎖屏以及解鎖命令,服務器對客戶端發(fā)送到命令進行響應。
3.2 控制模塊
(1)窗體=暗色調保護窗體+鎖定屏幕工作窗體。
暗色調保護窗體是用來降低屏幕的光功率,使得我們的軟件的耗電量降低, 鎖定屏幕工作窗體是用來把鼠標的工作區(qū)域限定起來,禁止鼠標對其他工作區(qū)域進行操作,也是提示已經鎖定電腦。
(2)操作鉤子(控制控件)=鼠標鉤子+鍵盤鉤子。
鼠標鉤子是用來“勾取”鼠標的每一個動作,行為,然后調用了系統(tǒng)插件獲得權限,對鼠標的行為進行控制。鍵盤鉤子是用來“抓取”每一個鍵盤的動作,調用系統(tǒng)插件獲得權限,通過定義變量vkCode來記錄每個鍵位的數據,從而改變它的返回值,最終實現屏蔽鍵盤事件,使得電腦暫時無法獲取鍵盤的行為。
(3)密碼驗證鎖=密碼解密碼屏幕和自制鍵盤。
當PC端和客戶端斷開連接時,PC端還處于被鎖定狀態(tài),那么就需要PC開啟另外一條“綠色通道”來解決這一問題,為了提高其安全性,此密碼鎖先與自制的密碼鍵盤對接,先解決鍵盤被鎖定而無法輸入數字的尷尬情況,然后就是與本地的數據庫對接,使得整個系統(tǒng)的安全性提高,保證只有本注冊的用戶才能擁有鎖定屏幕與解除鎖定屏幕的權限。
4 各大模塊的關鍵技術
4.1 連接模塊
(1)服務器端(綁定端口并偵聽用戶請求)
window = new Window("服務器:");
server = new ServerSocket(5000);
System.out.println("服務器已創(chuàng)建,正在等待客戶端連接。。。");
area.append("服務器已創(chuàng)建,正在等待客戶端連接。。。" + '\n');
(2)當接收到客戶端的命令時進行響應
if (fromClient.equals("解除")) {
Runtime.getRuntime().exec( taskkill /F /IM WorkStation.exe");
String w = "已經解除鎖屏" + '\n';
writer.write(w.getBytes("utf-8"));
writer.flush();
long endTime = System.currentTimeMillis();
System.out.println("解除鎖屏時間 "+(endTime-startTime));
if (fromClient.equals("鎖屏")) {
long startTime = System.currentTimeMillis();
Runtime rn = Runtime.getRuntime();
Process p = null;
p=rn.exec("\"F:/WorkStation/WorkStation/WorkStation/bin/Debug/WorkStation.exe\"");
}).start();
}
(3)客戶端通過輸入局域網IP連接到服務器
String ip = et.getText().toString();
Intent intent = new Intent(Facactivity.this,Second.class);
intent.putExtra("et1", ip);
startActivity(intent);
4.2 控制模塊
(1)密碼檢驗界面(通過讀取TextBox整行的數據,從而判斷所輸入的密碼是否正確)
linkdb();
string Password = textBox.Text;
string Sql = string.Format("select * from [user] where password='{0}'",Password);
OleDbCommand comm = newOleDbCommand(Sql, objConnection);
OleDbDataReaderreader = comm.ExecuteReader();
if (reader["password"].ToString().Trim() == textBox.Text.Trim())
{ h.Hook_Clear();
h.TaskMgrLocking(false);
Application.Exit();
}
(2)自制密碼鍵盤
Key.Text = Key.Text + num.ToString();
privatevoid btn_1_Click(object sender, EventArgs e) {
addNum(1); }
限制鼠標移動范圍(通過調用Cursor這個類下的Rectangle方法,從而建立起限制鼠標移動的區(qū)域)
Cursor.Clip = newRectangle(PointToScreen(newPoint(0, SystemInformation.CaptionHeight)), newSize(this.ClientRectangle.Width - 2 * (SystemInformation.CaptionHeight), this.ClientSize.Height + -2 * (SystemInformation.CaptionHeight)));
base.OnMouseMove(e);
(3)鎖屏的建立()
導入插件,通過導入插件來調用底層文件,從而實現鎖定屏幕和鍵盤的效果
[DllImport("user32")]
publicstaticexternbool BlockInput(bool isBook);
[DllImport("user32")]
publicstaticexternbool LockWorkStation();
publicdelegateint HookProc(int nCode, int wParam, IntPtr lParam);
屏蔽任務管理器:
通過獲取任務管理器默認路徑,然后執(zhí)行隱藏任務管理器的窗口
if (bLock){
Process p = newProcess();
p.StartInfo.WorkingDirectory=Environment.GetFolderPath(Environment.SpecialFolder.System);
p.StartInfo.FileName = "taskmgr.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start(); } else {
Process[] process = Process.GetProcesses();
foreach (Process p1 in process) {
if (p1.ProcessName.ToLower().Trim() == "taskmgr"){p1.Kill();
RegistryKeyr=Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
r.SetValue("DisableTaskmgr", "0");
Registry.CurrentUser.DeleteSubKey("Software\\Microsoft\\Wi
ndows\\CurrentVersion\\Policies\\System"); }
}
(4)開啟鎖定鉤子
if (hHook == 0)
{ KeyBoardHookProcedure = newHookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
(5)解除鉤子
利用調用hHook這個方法,通過改變布爾值的賦值0,1,從而實現解鎖功能
if (hHook != 0) { retKeyBoard = UnhookWindowsHookEx(hHook);
hHook = 0; }
if (!retKeyBoard) thrownewException("UnhookWindowsHookEx faild.");
5 技術實現途徑
5.1 連接模塊
首先用Java語言開發(fā)出電腦服務器端與手機客戶端,然后使用Socket通信協(xié)議使服務器端與客戶端產生連接。
(1)服務器端聲明一個端口,在端口上偵聽客戶連接的請求server = new ServerSocket(5000);socket = server.accept();
對偵聽語句進行循環(huán),實現重連。
(2)通過創(chuàng)建輸入流與輸出流來接受客戶端的信息以及對客戶端的反饋。
當客戶端發(fā)送鎖屏命令時,服務器通過調用方法Runtime rn = Runtime.getRuntime();
Process p = null;p =rn.exec();,調用鎖屏程序,從而實現鎖屏。
(3)當客戶端發(fā)送解除命令時,服務器通過調用Runtime.getRuntime().exec方法關閉鎖屏程序從而實現解鎖。
5.2 控制模塊
通過借助電腦Windows系統(tǒng)的user32.dll,制作“鍵盤鉤子”,“鼠標鉤子”來捕獲電腦的鼠標和鍵盤事件,再通過手機端的鎖屏按鈕讓服務器端進行響應從而對其實現鎖定效果。
使用到的關鍵API有:System.Runtime.InteropServices;
Microsoft.Win32; System.IO; System.Diagnostics;
使用到的系統(tǒng)插件有:User32.dll Native.dll KERNEL.dll
6 結束語
本系統(tǒng)可以局域網的環(huán)境實現遠程操控鎖屏,鎖定鍵盤的功能,有效地防止忘記關電腦屏幕,被人盜取你本地的材料等等安全問題。本次首次采用JAVA與Android與C#交互式使用,利用C#工程文件自動生成EXE這一特性,先通過JAVA登陸才能進入主界面,開啟服務器,然后彈出IP地址,那么手機端就對著IP地址,進行連接,然后通過調用目標EXE,最終點擊退出完成一套操作。
參考文獻:
[1]周軍.基于Android手機遠程控制的設計與實現[D].武漢輕工大學與計算機學院.
[2]蘇健.Java面向對象程序設計[M].高等教育出版社.
[3]趙滿來.可視化Java GUI程序設計教程——基于Swing組件庫及NetBeans IDE[M].清華大學出版社,2015.
[4]李春苞.數據結構教程(第4版)[M].清華大學出版社.