因为是检测窗口实现的,所以要求设置会话窗口自动弹出,而且看完消息就把QQ消息窗口关掉。。。

虚拟机端

#! /usr/bin/env python
# -*- coding: utf-8 -*- from win32gui import *
import time
import socket HOST = '192.168.0.126'#宿主机IP地址
PORT = 8001 def get_QQ_titles(hwnd, mouse):
if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd):
if GetClassName(hwnd) == 'TXGuiFoundation': # TXGuiFoundation 是所有QQ窗口的类名
text=GetWindowText(hwnd)
if text:
current_QQ_titles.add(text) def send_message(): # 通知宿主机
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('new_msg')
data = s.recv(10)
print data last_QQ_titles = set() # 上一次所有可见QQ窗口的 title 字符串集合
current_QQ_titles = set() # 当前所有可见QQ窗口的 title 字符串集合
last_foreground_window_class_name = '' # 上一个 foreground window 的类名
while True:
current_QQ_titles = set()
EnumWindows(get_QQ_titles, 0) # 遍历当前可见的QQ窗口
try:
foreground_window = GetForegroundWindow()
foreground_window_text = GetWindowText(foreground_window)
foreground_window_class_name = GetClassName(foreground_window)
except Exception,e:
print('catch exception')
if last_QQ_titles != current_QQ_titles \
and len(last_QQ_titles) < len(current_QQ_titles) \
and (last_foreground_window_class_name != foreground_window_class_name \
or (last_foreground_window_class_name == foreground_window_class_name \
and foreground_window_text != 'QQ')):
print 'got new message'
send_message()
last_QQ_titles = current_QQ_titles
last_foreground_window_class_name = foreground_window_class_name
time.sleep(1)

宿主机端

 #encoding=utf-8
import Tkinter as tk
import socket def create_message_dialog():
top = tk.Tk()
top.title("QQ Message")
top.geometry('400x400')
labelHello = tk.Label(top, text = "You've got new QQ messages.")
labelHello.pack()
top.mainloop() HOST = '192.168.0.126'
PORT = 8001 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1) print 'Server start at: %s:%s' %(HOST, PORT)
print 'wait for connection...' while True:
conn, addr = s.accept()
print 'Connected by ', addr
data = conn.recv(10)
print data
if data=='new_msg':
create_message_dialog()
conn.send("recv")
conn.close()

END

2017.8.17 19:58

虚拟机有QQ消息时宿主机自动弹窗提示的更多相关文章

  1. Oracle 在 多个Virtualbox 虚拟机间 跨不同物理宿主机进行通信

    因为单位网络管理的原因,不太方便使用 Virtualbox 的Bridge Adapter 模式,故此欲采用NAT模式,不对外不暴露虚拟机IP. 但是此时会有一个问题:采用NAT模式后,在通常情况下, ...

  2. kvm虚拟机最佳实践系列1-kvm宿主机准备

    KVM宿主机配置 系统环境:ubuntu16, bond0 业务网口 bond1 管理网口+存储网口 安装KVM环境支持 sudo apt-get install qemu-kvm sudo apt- ...

  3. 虚拟机下安装 VMwareTools 实现宿主机和虚拟机的文件共享

    $ mount /dev/sr0 /media/ #点击 虚拟机 安装 VMwareTools 挂载 $ cd /media/ $ cp VMwareTools-10.1.6-5214329.tar. ...

  4. VirtualBox通过Host-Only网络连接方式实现宿主机与虚拟机通信

    适用情况 (1)没有联网, 不插网线 (2)宿主机直接连接宽带(无路由器) 情景: 宿主机 Windows 7 虚拟机 Windows XP 虚拟机安装了SQLServer2005,宿主机想连接使用虚 ...

  5. Vmware Centos7 配置静态 ip 和 使宿主机和虚拟机互相 ping 通

    NAT 方式1. 配置静态 ipVmware 安装 Centos7 可以参考 https://blog.csdn.net/guo_ridgepole/article/details/78973763 ...

  6. virtual box 中两个虚拟机 、宿主机 三机互通并且能上外网设置

    virtual box 中两个虚拟机 .宿主机 三机互通并且能上外网设置 1:背景:因为需要学习linux,所以需要在虚拟机里装linux系统,测试要么宿主机与虚拟机linux网络实验测试:要么另一台 ...

  7. virtualBox NAT模式,设置虚拟机可上网,宿主机可访问虚拟机的方法

    环境描述: 宿主机:windows Server 2008 64bit,IPV4地址,有网络. 宿主机上的主要软件环境: virtualBox 5.0.24 virtualBox中安装了CentOS ...

  8. VMware虚拟机串口与宿主机进行传输验证

    一.验证目的 1.验证VMWARE虚拟机(Windows或Linux)上的程序,是否可以读取宿主服务器的物理串口中的数据. 二.验证过程 1.验证条件及工具, 宿主机:Windows 10 x64 V ...

  9. VMware与宿主机同一网段

    将VMware做为一个物理的虚拟机,设置网段与宿主机在同一子网.

随机推荐

  1. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  2. mybatis insertUseGeneratedKeys 返回主键为null

    package tk.mybatis.mapper.common.special; import org.apache.ibatis.annotations.InsertProvider; impor ...

  3. 类SimpleDateFormat

    概述 java.text.DateFormat 是日期/时间格式化子类的抽象类,不能直接使用.我们通过这个类的子类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行 ...

  4. php密码对称encrypt加密

    /** * 对用户的密码进行加密 * @param $password * @param $encrypt //传入加密串,在修改密码时做认证 * @return array/password */ ...

  5. vue登录拦截

  6. 论学好Linux系统的超级重要性

    不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂,就问群里的大 ...

  7. 新人大餐:2018最新Office插件开发之ExcelDNA开发XLL插件免费教学视频,五分钟包教包会

    原始链接:https://www.cnblogs.com/Charltsing/p/ExcelDnaVideoCourse.html QQ: 564955427 先解释一下,为什么要做这个视频: 我在 ...

  8. Linux centos nginx下载安装初步

    下载源码包解压编译 1.下载 # wget http://nginx.org/download/nginx-1.9.9.tar.gz 2.解压 # tar xvf nginx-1.9.9.tar.gz ...

  9. Acitiviti数据库表设计(学习笔记)

    ACT_ID_*:与权限,用户与用户组,以及用户与用户组关系相关的表 ACT_RU_*:代表了流程引擎运行时的库表,RU表示Runtime ACT_HI_*:HI表示History当流程完成了节点以后 ...

  10. vue-cli全局安装

    一.安装node.js a).不确定自己时候安装了node.js可以在控制台当中输入node -v来查看当前是否已经存在 如果看到输出了版本信息,那么证明已经有了node.js b).如果看到node ...