用手机对电脑进行远程关机

简介:

PS:本人一月份写的文章,贴在这里。

      昨天真是奔波的一天,中午烤肉逛街下午寿司看电影(陪老婆)。今天中午又是麻辣诱惑。额,不争气的肠胃果然导致我拉肚子了。不过,话说昨天下午在石景山万达吃完寿司后,看了《金陵十三钗》倒是颇有感触,这部电影(又名《处女保卫战》)旗帜鲜明的打出了这样口号:让处女先走。老谋子的电影越来越不行了,首先是不知道这部电影的主题是什么?然后是不知道这部电影的主角是什么?最后但也是最重要的一点就是不知道这部电影到底是哪个国家拍的?片头不少人名后面都缀着不同的国家,如日本,美国,中国等等,一片混乱。看点就是开头不多的战争场面,枪声炮声做的很逼真了,完全超越了以前战争场面的那种稚气,还有就是石景山万达国际影城的音响效果确实不错,好几次枪声都nearly shock the shit out of me(哈哈,开个低俗的玩笑)。影片中佟大为的华丽的怎么看都像是根据《这个杀手不太冷》这部电影结尾时杀手阵亡的剧情模仿的以衬托个人主义重复滴斑驳了日本人死亡人数:中国人死亡人数1:10的不争气历史事实啊。恩,电影不错,让我有收获~

         晚上回来的时候,没赶上最后一班地铁,导致我和老婆租个黑的回来,被狠狠的blackmail了几刀,哎,伤不起。回来的时候,直接回的大运村,实验室都没来得及回去,所以电脑也没关。想起导师平时让我们注意关机,颇感愧疚,昨晚回去后想了会,决定实现用手机远程关掉电脑的一个程序(总算扯到主题了~~)。

     第一个问题就是手机和计算机通信问题,这个确实比较棘手。首先计算机在内网,手机的ip也是随机分配,两者要实现无缝对接,必须有一个外网IP的服务器,手机和计算机的客户端都主动登录到这个服务器上,然后才能对接。这个,搭个服务器太麻烦(希望IPV6能赶快普及啊~~)。其实,仔细想想我们可以利用现有的手机和计算机的点对点通信工具,比如飞信,QQ之类的,还有就是使用邮件。

     使用邮件的解决方案就是,通过手机给自己发送一封邮件,然后再计算机上跑一个守护进程,定期扫描邮箱,并去读邮件,根据主题(例如:关机?)再实施关机动作。可以使用Python实现,工作量应该不是很大(MAX:3 hours).这个缺点就是实时性不太好,还是使用现有的即时通信工具实时性好点。

     我选择的方案就是使用QQ,你需要注册两个QQ,一个是你的计算机端上运行的QQ,表示为QQC吧。另一个就是你的手机上运行的QQ,表示QQT吧。在QQC上给QQT好友命名,命名尽量复杂点,这样可以避免一些事故,具体原因后面看了就会知道。这里选择命名为“RemotingShutDownWorker”,然后把QQC设置为弹窗模式(就是有一条新的消息后,弹出发送消息者的窗口)。这样QQTQQC发送一个消息之后就会弹出一个窗体,窗体的标题就是“RemotingShutDownWorker”。

     基于这一点,应该首先这样一个程序,它定期扫描当前屏幕最顶层的所有窗体的标题,如果发现有标题为“RemotingShutDownWorker”时执行关机操作。选择编程语言为C语言,编程环境是VS2010,使用的模板为WIN32 CONSOLE APPLICATION

    另外还需要注意的几个地方就是:

l  程序运行过程中不需要显示窗体

l  程序应该能够开机自启

l  程序应该每间隔一段时间扫描一次,否则CPU亚历山大

       第一点,比较容易实现,在程序中添加一句“#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")”就可以了。第二点,自启的话也很简单,把这个可执行程序的快捷方式拷贝到Windows启动文件夹中就哦了。第三点,调用Sleep函数,设置一个间隔时间(例如:5秒?)。

         把代码贴在下面,仅供参考~


 
  1. /* 
  2.  
  3. *Author:lichao 
  4.  
  5. *Date:01-14-2012 
  6.  
  7. *Description:Shutdown the computer remotely by mobile phone 
  8.  
  9. */ 
  10.  
  11. #include<windows.h> 
  12.  
  13. #include<stdio.h> 
  14.  
  15. #define TITLE_LENGTH 256 
  16.  
  17. #define EXIT_SUCCESS 0 
  18.  
  19. #pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") 
  20.  
  21. BOOL CALLBACK lpMyEnumFunc(HWND hwnd, LPARAM lParam) 
  22.  
  23.  
  24.     TCHAR szTitle[TITLE_LENGTH]; 
  25.  
  26.     GetWindowTextW(hwnd,szTitle,TITLE_LENGTH); 
  27.  
  28.     if( 0==wcscmp(szTitle,TEXT("RemotingShutDownWorker"))) 
  29.  
  30.     { 
  31.  
  32.         BOOL *pDetected=(BOOL *)lParam; 
  33.  
  34.         *pDetected=true
  35.  
  36.         return 0; 
  37.  
  38.     } 
  39.  
  40.     return 1; 
  41.  
  42.  
  43. int main() 
  44.  
  45.  
  46.     BOOL bDetected=false
  47.  
  48.     BOOL *pDetected=&bDetected; 
  49.  
  50.     while(!bDetected) 
  51.  
  52.     { 
  53.  
  54.         EnumWindows(lpMyEnumFunc,(LPARAM)pDetected); 
  55.  
  56.         Sleep(5000); 
  57.  
  58.     } 
  59.  
  60.     //::MessageBoxW(NULL,TEXT("将要关机"),TEXT("远程关机"),MB_OK); 
  61.  
  62.     system("shutdown -s -t 20"); 
  63.  
  64.     return EXIT_SUCCESS; 
  65.  

     1是运行效果截图,远程关机测试很顺利。最后一个问题就是怎么通过程序把显示器关掉,这个貌似必须通过机械开关关掉,虽然远程关机以后,由于屏幕不在收到主机箱发来的信号会自动进入节电模式,电流估计小的和充电器没有工作情况下差不多,所以应该不会浪费多少瓦特。但是,确实是个应该解决的问题,这个有时间再搞搞~~,先不玩了,赶快赶一个导师布置的并行算法。。。。。。

         

效果图

1:远程关机效果图







本文转自hipercomer 51CTO博客,原文链接:http://blog.51cto.com/hipercomer/789433

相关文章
|
3月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
6月前
|
缓存 网络协议
DNS中电脑网址能打开,用手机浏览器不行,需要解析什么?
DNS中电脑网址能打开,用手机浏览器不行,需要解析什么?
66 1
|
11月前
[✔️]AudioRelay将电脑的声音投射在手机上
[✔️]AudioRelay将电脑的声音投射在手机上
745 0
|
9月前
|
JSON JavaScript 前端开发
超燃,拿来即用!Echarts动态排名柱状图(自适应电脑和手机端)说明文档
超燃,拿来即用!Echarts动态排名柱状图(自适应电脑和手机端)说明文档
185 0
|
4月前
利用电脑投放手机声音且可不冲突同时播放电脑声音的方法
利用电脑投放手机声音且可不冲突同时播放电脑声音的方法
|
4月前
|
监控 安全 数据可视化
智慧工地管理系统源码(电脑端+手机端+APP+SAAS云平台)
智慧工地管理系统源码(电脑端+手机端+APP+SAAS云平台)
63 0
|
4月前
|
缓存 网络协议 网络安全
网站电脑版正常手机版指向不良网站
我的网站电脑版正常手机版指向不良网站是怎么回事
53 1
|
6月前
|
Android开发 开发者
SAP UI5 应用开发教程之四十九 - 如何在桌面电脑端调试运行在手机上的 SAP UI5 应用试读版
SAP UI5 应用开发教程之四十九 - 如何在桌面电脑端调试运行在手机上的 SAP UI5 应用试读版
37 0
判断手机登录还是电脑登录效果示例(整理)
判断手机登录还是电脑登录效果示例(整理)
|
8月前
|
存储 网络安全 数据安全/隐私保护
iOS 逆向编程(八)远程拷贝 - 客户端(电脑)通过 ssh 拷贝文件到服务端(手机)
iOS 逆向编程(八)远程拷贝 - 客户端(电脑)通过 ssh 拷贝文件到服务端(手机)
98 0

热门文章

最新文章