首页

实战经验:WM_COPYDATA在不同权限进程中的接收问题

问题 在一次开发中,需要使用到WM_COPYDATA方式来实现两个进程之间的数据传输。在网络上可以找到很多关于WM_COPYDATA的示例代码,而且代码结构也比较简单易懂,所以WM_COPYDATA的示例代码不是今天要详细讨论的内容。 今天的问题存在于两个不同权限的进程,例如发送端进程运行在普通用户账户下,而接收端进程则运行在管理员账户下。在这种情况下,发送端发送的WM_COPYDATA消息,将不...

实战经验:在Windows 8.1/10上获取具体的系统版本号

碰到这样一个问题,需要获取当前运行系统的版本号。 对于Windows系统来说,主要需要关注的是两个版本号:主版本,次版本。例如:Windows 7系统的版本号为:6.1。Windows 10的版本号为:10.0。过去我们可以使用Windows API GetVersionEx来获取系统版本,但是从Windows8.1开始,如果程序没有进行Manifest(原谅我也不知道怎么翻译这个词比较合适,所以...

实战经验:通过NotifyAddrChange侦测网络变化  

在一次实验中,我需要程序可以自动检测到网络变化,例如: 1) 某一个或某几个网卡被禁用 2) 某一个或某几个网卡的地址变化 NotifyAddrChange可以帮我做到这些。今天来讲一讲这个函数的用法及程序功能在架构阶段需要注意的地方。 如何使用NotifyAddrChange NotifyAddrChange函数主要的功能是用来通知应用程序IPv4地址的变化。注意这个函数仅仅支持IPv4地址的变...

实战经验:使用IFileOperationProgressSink接收文件操作通知

思路 新版本的文件操作可以使用IFileOperation接口来实现,IFileOperation接口用来替代旧的SHFileOperation。SHFileOperation可以实现基本的文件操作,如复制,剪切,删除,重命名等,但缺乏文件操作进度通知这一特性。有时候,我们希望能得到文件的操作进度,进而在界面上进行操作进度的可视化呈现,那么,试试新的IFileOperation接口吧。 要想接收I...

深度理解:LockWindowUpdate和SetRedraw  

有时候,我们碰到这样一个需求:需要对界面控件进行一系列操作,每一次操作都会导致界面重绘。希望能在操作开始之前进行不让界面重绘发生,直至全部操作结束才一次性重绘。 我们可以想到两个函数可能会帮我们做到这一点:LockWindowUpdate和SetRedraw。但是,应该用哪一个? 我们先看看MSDN对这两个函数的描述: LockWindowUpdate The LockWindowUpdate f...

实战经验:使用IsWow64Process识别当前系统是32位还是64位

有时候碰到一个需求:如何通过代码的方式,判断当前系统是32位还是64位的? 废话不多说,直接上代码,稍后进行解释。 typedef BOOL (WINAPI * LPFN_ISWOW64PROCESS)(HANDLE, PBOOL); BOOL is_win_64() { #ifdef _WIN64 #pragma message("Compiling for x64 p...

小技巧:关于Sleep的用法及注意事项

在MFC程序开发中,我们经常会使用到Sleep函数。这个函数的作用是暂停当前线程的执行。其函数原型如下: VOID WINAPI Sleep( _In_ DWORD dwMilliseconds ); 这个函数接收一个参数dwMilliseconds,指定当前线程暂停执行的时间,以毫秒为单位。我们具体看看这个参数的用法: 1) 当传入的参数值为0时,表示当前线程向系统提出请求,放弃其剩余的执行时间...