Windows API的不同返回状态

在Windows编程中,我们经常接触到的Windows API返回值类型有: BOOL HRESULT LSTATUS

Windows编程

为什么SetParent会失败

SetParent是Windows提供的设置窗口父窗体的API,函数原型比较简单: 1234HWND SetParent( [in] HWND hWndChild, [in, optional] HWND hWndNewParent);

Windows编程

窗口如何逃脱显示桌面指令

在Windows系统中,在按下Win+D快捷键等操作执行“显示桌面”时,会将桌面上的所有窗口都最小化到任务栏,再次按下还原窗口。在显示桌面时,有些窗口仍然保持显示状态,不被最小话,即称之为逃脱显示桌面指令。 实现逃脱显示桌面的方式有三种,每种方式有不同的应用场景。

Windows编程

认识Windows顶级(top-level)窗口

在Windows API中经常会出现关于顶级窗口的描述,如 EnumWindows函数的说明: Enumerates all top-level windows on the screen by passing the handle to each ...

Windows编程

由HANDLE返回值不确定性引发的思考

HANDLE类型返回值的不确定性指的是Windows API函数的返回值为HANDLE类型时,有两种表示失败的方式: HANDLE == NULL,如CreateEvent等 HANDLE == INVALID_HANDLE_VALUE,如CreateFile等 其中,NULL的值始终为0,而INVALID_HANDLE_VALUE的值为-1,其在32位和64位程序中分别等于0xFFFFFFFF和0xFFFFFFFFFFFFFFFF。 具体哪些函数失败时返回NULL,哪些返回INVALID_HANDLE_VALUE了?这个需要查阅MSDN文档来确定。

Windows编程

窗口无法接收WM_LBUTTONDBLCLK消息

在开发中遇到了如下问题: 通过鼠标钩子获取某窗口的消息,发现可以接收到WM_LBUTTONDOWN消息,但始终无法接收到WM_LBUTTONDBLCLK消息。 经过一番排查,发现Windows窗口只有在拥有CS_DBLCLKS类样式时才能接收到鼠标双...

Windows编程

Windows的DLL全局共享变量

同一个DLL文件可以被多个进程加载。当不同的进程将DLL映射到自己的内存空间时,系统会为DLL中的全局和静态变量创建不同的实例,而不会共享同一个变量实例。 那我们如何实现在进程间共享DLL全局变量呢?我们可以在DLL中使用如下语句来创建一个段,用来存...

Windows编程

Windows平台文件自签名

本文使用的工具都是 Windows SDK 自带的,可以采用单独安装 Windows SDK的方式,也可以通过安装 Visual Studio 来附带安装 Windows SDK。 123456# 在弹出界面设置密码123456makecert.ex...

Windows编程

Windows音频环回录制

所谓音频环回录制就是录制扬声器播放的声音。播放到扬声器的声音已经过混合,Windows 提供了 WASAPI 来获取这种混合的音频信号。 本文将录制到原始音频样本数据写入到文件,可以使用Audacity导入原始数据试听。

Windows编程

获取其他进程的命令行参数

本文介绍如何根据进程 ID 获取进程命令行参数,使用 Windows NTDLL 提供的未公开 API 实现。 由于需要使用到Windows应用层未公开的 API,而且这些 API 在 Windows 头文件中未提供函数定义,因此我们需要使用GetProcessAddress动态地从 ntdll.dll 中获取函数地址。 动态获取函数地址本不是一件困难的事情,但是当涉及调用函数比较多时,这个操作就显得比较繁琐了,我们可以直接使用下面的库来简化上述操作。https://github.com/winsoft666/ndk

Windows编程

Windows实现文件强制占用

本文介绍在 Windows 系统上实现使某个文件无法被用户或其他程序删除。

Windows编程

Windows平台生成Dump文件

转储文件也就是我们常说的 dump 文件,可以把转储文件看成软件的某个时刻的一个快照,我们一般在软件出现问题时手动生成或者程序自动生成转储文件。

Windows编程
123