首页

使用WMI来获取系统信息  

WMI,是Windows Management Instrumentation的英文缩写。它是一个用来读写系统配置信息的接口,另外它还支持脚本化语言访问。有了这个玩意,你就可以不必专注细节,将节省下来的时间用来享受生活,我看,挺好。 下面是一个例子,代码很简短,主要是用来枚举当前系统的所有CPU信息并将它们的基础信息打印出来。 要测试上面的脚本代码,很简单,将这段程序代码保存为一段js文件,例如...

外壳如何确定程序是否支持长文件名的  

当你注册你开发的程序为文件拓展处理程序时,外壳需要判断你的程序是否支持长文件名,这样它就可以决定向你的程序传递长文件名(路径中可能包含空格,所以在注册脚本中请为文件路径添加上双引号,例如”%1″)还是短文件名。 规则很简单:外壳会检查你的程序的的PE头部,来判定程序的类别。 > 如果它是一个16位的程序,则外壳会这样假设:如果程序被标记为”兼容Window...

关于ListView控件的兼容性的一则轶事  

ListView是一个用来呈现数据的,非常强大的控件。当它处于报告模式(report mode)时,它会创建一个列头控件,用来显示表格中每一列的标题。这个列头控件是ListView控件的属性,但是ListView还是十分善意第提供了一个获取其句柄的方法,这样你就可以操作列头控件。 但是,有些开发者却滥用了这种善意。 在原始版本的ListView控件中,它没有使用列头控件条目的LPARAM来保存任何...

实现多次鼠标点击  

另一个人们会问起的问题是,”如何实现鼠标的三次点击或者更多次点击?” 如果你读过上一篇关于双击的文章,并理解了其中所用到的算法,则将它扩展到三击也会十分自然。你需要做的第一件事是,将CS_DBLCLKS风格从类中移除,因为我们希望手动管理鼠标的点击。 接下来,你需要重新实现Windows窗口管理器所使用的相同算法,并实现鼠标三击而不是双击。让我们动手试试,将如下代码添加到例...

Windows将鼠标单击转换为双击的原理  

对于这个问题,我还是建议你先看看MSDN技术文档中关于鼠标点击方面的内容,因为这些内容是我们开展研究的起点。我也假定你基本了解鼠标的单击转换为双击的基本工作原理。 在阅读了相关的MSDN文档之后,下面我们来看看文档中的设计以及它如何影响你自己的用户界面设计。 首先,有些开发者将鼠标双击动作设计为执行不同于鼠标单机的独立任务。他们想知道是否可以在处理鼠标双击消息时,安全的忽略掉WM_LBUTTOND...

任务栏发明之前,窗口是如何最小化的?  

在Windows 95操作系统引入资源管理器之前,Windows的桌面是一个非常与众不同的存在。 当时的桌面上的图标并不代表文件,而是当你最小化一个程序时,它会最小化成为桌面上的一个图标。如果你希望打开一个已经最小化的程序时,你必须在桌面上寻找它对应的图标,有可能你还需要最小化其他程序,从而让这个图标可见,然后双击对应的图标,从而恢复窗口的显示。(当然,你可以使用ALT + TAB这个组合键进行程...

有时候你并不能获取光标下的文本

我在之前的一篇文章中有介绍到如何获取鼠标光标下的文本,聪明的你一定发现了这样一个现象:有些程序可以正常获取,而有些程序却不行,这是为啥呢? 这取决于这个程序的实现。有些程序在开发的时候,就非常注重对屏幕阅读器的支持。例如,IE浏览器在开发的时候,就对ActiveAcessibility有出色的支持,因为开发团队认为,浏览器是那些残障人士了解这个世界的大门。 相对来说,其他程序的支持力度就没有那么好...

一种最奇怪的检测Windows NT系统的方法  

我的一位同事推荐了下面的代码为年度函数(Function of the Year),他也是第一个报告Windows Beta版本使用了一个值得怀疑的URL的人。 我不得不承认,这段代码确实令人印象深刻。和所有其他检查操作系统版本的方法相比,通过检测内存映射文件里的未公开实现细节来判断操作系统版本,确实是非常具有创造性。 请看代码 请不要诧异,这段函数并没有关闭映射文件句柄,并在你每次调用此函数时...

如何从一个静态库中访问当前模块的实例句柄  

如果你正常编写一个静态库,则可能有这样一个需求:需要访问主链接模块的HINSTANCE(实例句柄)。我们可以要求主链接模块传递它的实例句柄到一个特殊的初始化函数中,这确实可行,但是人们经常忘记这样做,从而导致奇怪的事情发生。 如果你使用微软的链接器来链接代码,你可以使用一个链接器提供的一个虚拟变量来实现这个需求,如下图所示: 在上面的代码中,我们使用了__ImageBase这个虚拟变量来代表一个...

说说RegisterClass这个函数返回值的作用

众所周知,我们会使用RegisterClass和RegisterClassEx这两个函数来注册窗口类。有细心的人注意到了,它们的返回值是一个ATOM类型。那么,它的作用是什么呢? 对于所有已注册的窗口类来说,它们的名称都保留在一个USER32模块内部的ATOM表格中。上述函数返回的就是这个ATOM值。如果你想获取一个窗口类的ATOM,可以调用GetClassWord(hwnd, GCW_ATOM)...