Windows 下获取当前活动窗口信息

我们在写一些桌面控制相关的功能的时候,往往需要知道用户当前工作程序,这要求我们要先获取用户当前活动窗口的信息。

在 Windows API 里,有两个相似的函数可以来实现上述功能,它们分别是 GetForegroundWindow 和 GetActiveWindow 。

GetForegroundWindow 函数返回前台窗口(用户当前工作的窗口),系统分配给产生前台窗口的线程一个稍高一点的优先级;GetActiveWindow 函数可以获得与调用线程的消息队列相关的活动窗口的窗口句柄。

两者的区别在于:GetActiveWindow 只是获取当前程序(线程)中被激活的窗口;GetForegroundWindow 是获取当前系统中被激活的窗口。两个函数的级别不一样, 一个是线程级、一个是系统级。

Continue Reading…

Qt 不规则窗体 – 鼠标点击穿透

之前写过如何用 Qt 现成的方法写出无边框半透明的不规则窗体:《Qt 不规则窗体 – 无边框半透明》

其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿透。鼠标点击穿透被广泛应用在桌面挂件程序上,目的是为了避免鼠标对窗体进行误操作。

Qt 并没有自带的方法可以实现该功能,所以需要调用系统本身的 API 来实现。这里介绍下 Windows 下和 Linux 下如何实现鼠标点击穿透。

Windows API : SetWindowLong

SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。

函数定义:

头文件:

代码示例:

Continue Reading…

Linux Socket 传输 Leap Motion 数据示例

这是一个简单的在 Linux 环境下使用 TCP/IP 传输数据的小例子,分为 Server 端和 Client 端,Server 端将 Leap Motion 处理后的数据传送给 Client 端。
Linux Socket 部分参考自 红薯 分享在开源中国的例子:Linux Socket 编程实例(一个Hello World程序)
Leap Motion 部分使用的是官方提供的 Sample 程序。

思路

1.TCP/IP 需要先初始化,使用代码进行端口绑定和监听。这部分代码可添加到 Leap Motion 监听类的初始化函数onInit()中。
2.TCP/IP 中循环接收数据的部分可添加到 Leap Motion 的onFrame()中。
3.在 Leap Motion 监听类退出时onExit(),因同时关闭 Socket 的监听进程。
4.将 Leap Motion 处理后的整型数据通过stringstream作为中转,最后转换为char *型,送入缓冲区,发送。
5.Client 端接收到的为char *型,可通过字符串截取的方式取出数据并转换为整型。(该部分代码并未给出。)
Continue Reading…