Windows 下根据进程ID获取进程名

在 Windows 下,如果要获取打开的某个前台窗口所对应的后台进程名,是没有现成的函数的。但是这并不是意味着我们不能利用微软提供的其他API来实现该功能。
其中一种实现思路就是:
1.利用GetWindowThreadProcessId获取创建指定窗口线程的标识和创建窗口的进程的标识符;
2.利用CreateToolhelp32Snapshot和Process32First建立系统中全部进程的快照并获取进程信息;
3.然后使用该函数得到的进程ID号,在快照信息中进行匹配,匹配到相应的进程,输出进程名。

通过进程号获取进程名

Continue Reading…

Windows Socket C/S 多线程通信程序

在 Socket 编程中,发送数据的函数 send() 和接收数据的函数 recv() ,往往需要等待发送和接收完成返回相应的值后才能执行下一条指令。所以当我们把 send() 和 recv() 放到同一个函数流程里的时候往往会导致I/O阻塞,无法实现同时收发数据。使用多线程编程,将监听函数、接收函数和发送函数分别放入不同的线程中,可以很好的避免出现以上问题。

如下为 Windows 下使用 Socket 编写 C/S 架构多线程通信 Demo ,代码很简单。

流程图

socket
Continue Reading…

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

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

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

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

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

Continue Reading…