基于手机遥控的远程打印

2009/11/19 | 23:23 | 分类:Web与移动平台 | 标签: | 1,029次阅读

  场景:假设实验室的打印机距离你的工位比较远,现需要打印一些文章,但不知道打印机里有没有放纸、是不是合适的纸(A4/B5;新纸/旧纸反面)。贸然打印有可能造成浪费,而如果把合适的纸拿过去放进打印机再回来发送打印命令则需要跑两个来回,中途别人还有可能发送打印命令把你的纸给用了。懒人有懒道,要是能在打印机旁遥控电脑就好了!想想用什么做遥控器呢?身边最好找的远程通信器件应该是手机了。于是,我们来实现基于手机遥控的远程打印(以 Windows 环境为例)——
  我的手机可以使用语音、短信、红外、蓝牙、GPRS 等通信手段,软件支持 Email、MSN、Gtalk、Fetion 等应用。考虑到成本,排除语音和短信;考虑到距离,排除红外和蓝牙;Email 没有实时性,也排除;剩下三个 IM,其中基于 Jabber 的 Gtalk 由于其简单性和开放性,成为了我的首选。
  接着考虑如何操作应用程序进行打印。对于 Windows GUI 的自动化操作,AutoHotkey (AHK) 大神当然是不二之选。
  现在可以动手了。首先建立一个 Jabber Message Handler 来接收手机 Gtalk 客户端发来的消息。如果收到事先定义好的某个消息,则通知特定的应用程序执行打印操作。这种简易的 Handler 用 Python + xmpppy 实现即可,代码如下(gthandler.py):

  1. import os
  2. import xmpp
  3.  
  4. def msgHndl(clnt, mess):
  5.     text = mess.getBody()
  6.     user = mess.getFrom()
  7.     if user.getNode() == 'xxx' and user.getDomain() == 'linjian.org' and text.startswith('p'):
  8.         os.system('doprint.ahk')
  9.  
  10. if __name__ == '__main__':
  11.     login = 'yyy'
  12.     pwd = 'zzz'
  13.     clnt = xmpp.Client('linjian.org')
  14.     clnt.connect(server = ('talk.google.com', 5223))
  15.     clnt.auth(login, pwd, 'botty')
  16.     clnt.RegisterHandler('message', msgHndl)
  17.     clnt.sendInitPresence()
  18.     while clnt.Process(1):
  19.         pass

  这段代码很好理解。Handler 端使用“yyy@linjian.org”账号登录 Gtalk,如果收到来自手机端联系人“xxx@linjian.org”发来的“p”消息,则执行 doprint.ahk 脚本。该 AHK 脚本负责向应用程序发出打印命令(这里是以 Microsoft Word 为例的,向 Word 发送 Ctrl-P 并回车,即可使用默认打印机来打印文档),内容如下:

  1. IfWinExist MyDoc.doc
  2. {
  3.     WinActivate
  4.     Send ^{p}{Enter}
  5. }

  好了,现在打开 MyDoc.doc,再运行 gthandler.py,然后在手机上登录 Gtalk,从“xxx@linjian.org”向“yyy@linjian.org”发送一个“p”,看看有没有效果?当然,实验时可以先用 Ctrl-G 之类不浪费纸的命令做测试。
  这就是程序员,本来可以通过内线电话或免费的 VPMN、利用社会工程学手段解决的问题,也要设法把它程序化了。这到底是折腾呢,还是不折腾呢?但至少有一点是肯定的:脚本的优点是一劳永逸。

相关文章

  1. 4条评论 关于 “基于手机遥控的远程打印”

  2. paul 发表于2009-11-20

    发散一下, 可以在这个基础上给手机和电脑之间做一个可扩展连接器. 连接方式可选, 执行脚本可扩展, 预定义常用任务并开放接口...不知道现在有没有这种东西.

  3. iveney 发表于2009-12-07

    啥是VPMN? 还是想说VPN?

  4. Jian Lin 发表于2009-12-07

    @iveney VPMN=Virtual Private Mobile Network,移动公司所谓的“集团网”,本单位内打电话免费。

  5. deping 发表于2009-12-18

    不知道Ruby或者Python里面有没有模拟硬件(键盘、鼠标)输入的库?这样就不必调用AutoHotKey脚本了。

发表您的评论

您的名字: (必填)

您的邮箱: (不会被公布,必填)

您的网站:

* 正确填写邮箱可支持Gravatar头像服务。
* 与主题无关的内容请用邮件或IM与我联系。