屈晓+叶家仲+许志华+陈子洋+钟俊杰+陈睿华
摘 要:依照软件工程中软件开发的相关理论对系统进行了分析和设计,我们的“智点”软件主要是应当下智能化时代以及安卓系统的普及,我们就基于Android手机系统做了一款手机与电脑交互,实现锁定电脑锁定的软件。Android自动密码锁定系统主要运用到JAVA编程;API (Application Programming Inter face 应用程序编程接口);UI界面优化技术(User Interface);安卓开发技术。
关键词:自动锁定;安卓与电脑交互;设计
中图分类号:TP311 文献标志码:A 文章编号:2095-2945(2017)21-0030-03
1 概述
随着信息时代的来临,使人们产生“智能”这一名词的概念,而中国手机用户量接近13亿,中国电脑用户量接近12亿,随着智能手机与智能化电脑的用户量日益增加,智能化产业成为现今一个热门行业,此项目将电脑与智能手机紧密联系起来,将会是智能化产业中的又一技术的革新。
2 系统设计与实现
本系统采用了C/S客户端与服务器模式的体系结构,以JAVA语言编写的服务器,以SOCKET打开连接网络的端口,利用局域网的通用性,让客户端与服务器端进行连接,从而实现交互。
整个锁屏系统的功能结构主要是包含以下几个部分:
(1)安全权限的设置,我们为使用我们锁屏系统的用户都设置了账号与密码,必须登陆成功才能开启PC端的服务器。
(2)登录成功后,根据服务器所显示所在局域网的网段,手机端连接服务器,从而实现PC端与客户端对接,进而对PC端进行控制。
(3)锁定屏幕时,鼠标只能限制在一定区域内移动,而整个屏幕的亮度处于节能亮度的状态,达到节能低碳的作用。
锁屏系统的功能结构图如图1所示。
3 各大模块的组成部分
3.1 连接模块
(1)界面=服务器界面+手机界面。
服务器界面主要是用来显示客户端发送过来的命令。客户端界面分为两个界面,第一个界面是用来输入局域网IP地址,第二个界面为操作界面,用户可以通过这个界面向服务器端发送命令。
(2)Socket通信协议实现服务器端与客户端的交互。
使服务器与客户端进行连接,客户端可以向服务器端发送锁屏以及解锁命令,服务器对客户端发送到命令进行响应。
3.2 控制模块
(1)窗体=暗色调保护窗体+锁定屏幕工作窗体。
暗色调保护窗体是用来降低屏幕的光功率,使得我们的软件的耗电量降低, 锁定屏幕工作窗体是用来把鼠标的工作区域限定起来,禁止鼠标对其他工作区域进行操作,也是提示已经锁定电脑。
(2)操作钩子(控制控件)=鼠标钩子+键盘钩子。
鼠标钩子是用来“勾取”鼠标的每一个动作,行为,然后调用了系统插件获得权限,对鼠标的行为进行控制。键盘钩子是用来“抓取”每一个键盘的动作,调用系统插件获得权限,通过定义变量vkCode来记录每个键位的数据,从而改变它的返回值,最终实现屏蔽键盘事件,使得电脑暂时无法获取键盘的行为。
(3)密码验证锁=密码解密码屏幕和自制键盘。
当PC端和客户端断开连接时,PC端还处于被锁定状态,那么就需要PC开启另外一条“绿色通道”来解决这一问题,为了提高其安全性,此密码锁先与自制的密码键盘对接,先解决键盘被锁定而无法输入数字的尴尬情况,然后就是与本地的数据库对接,使得整个系统的安全性提高,保证只有本注册的用户才能拥有锁定屏幕与解除锁定屏幕的权限。
4 各大模块的关键技术
4.1 连接模块
(1)服务器端(绑定端口并侦听用户请求)
window = new Window("服务器:");
server = new ServerSocket(5000);
System.out.println("服务器已创建,正在等待客户端连接。。。");
area.append("服务器已创建,正在等待客户端连接。。。" + '\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方法,从而建立起限制鼠标移动的区域)
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);
屏蔽任务管理器:
通过获取任务管理器默认路径,然后执行隐藏任务管理器的窗口
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语言开发出电脑服务器端与手机客户端,然后使用Socket通信协议使服务器端与客户端产生连接。
(1)服务器端声明一个端口,在端口上侦听客户连接的请求server = new ServerSocket(5000);socket = server.accept();
对侦听语句进行循环,实现重连。
(2)通过创建输入流与输出流来接受客户端的信息以及对客户端的反馈。
当客户端发送锁屏命令时,服务器通过调用方法Runtime rn = Runtime.getRuntime();
Process p = null;p =rn.exec();,调用锁屏程序,从而实现锁屏。
(3)当客户端发送解除命令时,服务器通过调用Runtime.getRuntime().exec方法关闭锁屏程序从而实现解锁。
5.2 控制模块
通过借助电脑Windows系统的user32.dll,制作“键盘钩子”,“鼠标钩子”来捕获电脑的鼠标和键盘事件,再通过手机端的锁屏按钮让服务器端进行响应从而对其实现锁定效果。
使用到的关键API有:System.Runtime.InteropServices;
Microsoft.Win32; System.IO; System.Diagnostics;
使用到的系统插件有:User32.dll Native.dll KERNEL.dll
6 结束语
本系统可以局域网的环境实现远程操控锁屏,锁定键盘的功能,有效地防止忘记关电脑屏幕,被人盗取你本地的材料等等安全问题。本次首次采用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].清华大学出版社.