Windows下如何检测用户修改了系统时间并且把系统时间改回来
有些时候我们不希望用户在使用我们的软件时修改系统时间,那么怎么检测用户是否修改系统时间呢?Windows会在系统时间修改时发送WM_TIMECHANGE消息,所以可以在C++的WindowProc函数中处理这个消息。如果是C#,可以直接用SystemEvents.TimeChan
有些时候我们不希望用户在使用我们的软件时修改系统时间,那么怎么检测用户是否修改系统时间呢?Windows会在系统时间修改时发送WM_TIMECHANGE消息,所以可以在C++的WindowProc函数中处理这个消息。如果是C#,可以直接用SystemEvents.TimeChan
在我之前的博文C#中只使用Invokerequired来判断是不是UI线程可靠吗?提到过除了检查InvokeRequired,还需要检查IsHandleCreated。今天再分享一段关于InvokeRequired的代码。 1234567891011121314public pa
我之前的博文使用ProcDump在程序没有响应时自动收集dump介绍过如何使用ProcDump自动收集无响应程序的dump。另外还有一个很有用的工具WhatIsHang也可以自动监测没有相应的程序,还能给出一个分析报告,包含调用栈Call Stack,栈上数据Stack Data
本文通过查看C#的GetProcessesByName的源代码来看如何在C++中获取所有系统进程信息。
之前的博客C++如何拿到一个窗口的标题介绍了如何用Windows的GetWindowText函数来获取窗口的标题,Windows是如何实现这个方法的,同时介绍了在使用GetWindowText时可能遇到的一些问题。下面我们来看看在C#中是怎么拿窗口标题的。 C#的Process.
本文介绍了如何用Windows的GetWindowText函数来获取窗口的标题。介绍了Windows是如何实现这个方法的。同时介绍了在使用GetWindowText时可能遇到的一些问题,比如调用方被挂起hang了,原因是什么,如何避免。另外还说明了使用GetWindow函数可能遇到的问题,应该尽量使用EnumWindows来替代。
C#根据Calendar.TwoDigitYearMax来做2位数字年份的转换,默认值是2029,所以30就是1930,29就是2029。
在我之前的博文C#的强迫执行域Constrained Execution Regions(CERs)中提到过一点可以通过在Visual Studio的Watch窗口输入@err,hr来显示GetLastError。今天把Visual Studio中能使用的Pseudovariab
本文介绍了如何通过SetWindowLongPtr和GetWindowLongPtr、SetWindowPos来去掉WinForm或者WPF的最大化和最小化按钮。
Compilers - What Every Programmer Should Know About Compiler Optimizations和Part 2介绍了Visual C++中的编译器优化。摘录几个定义如下: 链接期代码生成(Link-Time Code Gener
本文介绍了如何用C#来查看硬盘是不是“no seek penalty”,或者nominal media rotation rate是1,从而判断硬盘是不是固态硬盘SSD。
本文介绍了如何用C#通过Environment和ManagementClass来查看操作系统,环境变量,CPU情况,硬盘情况等。
本文介绍了如果用windbg的搜索内存的命令s [-[[Flags]Type]] Range Pattern在栈上寻找上下文CONTEXT,然后通过windbg的切换上下文的命令.cxr来找到C++的异常的调用栈(call stack)信息。
Data Structure Visualizations用图示的方式展示了各种数据结构和算法是怎么实现的,非常直观。它的Html5/Javascript的源代码是开源的(FreeBSD license),可以基于这个源代码实现新的算法和数据结构。
本文介绍了什么是LAA(LARGE ADDRESS AWARE),怎么设置LAA,怎么检查LAA。并且介绍了Windows PE格式。
我在之前的博客如何生成Dump文件中提到过,如果要用任务管理器收集32位应用程序dump的话,一定要确保用的是32位的任务管理器。假设用64位的任务管理器的话,用windbg打开,会发现类似如下的call stack。 123456789101112131415161718192
本文介绍如何在C++和C#代码中得到当前的栈回溯信息(call stack trace)。C#使用了System.Diagnostics.StackTrace,C++使用了CaptureStackBackTrace和DbgHelp中的SymSetOptions,SymInitialize,SymCleanup,SymFromAddr,SymGetLineFromAddr64。
内存泄漏(memory leak)是软件中经常遇到的一类问题,这类问题又是比较难以检测的,通常我们在程序遇到Out Of Memory的异常时才会注意到。拿到Out Of Memory的dump文件后,如何分析dump文件找到内存泄漏的线索又是一个难点。这篇文章分享了一些在Windows平台如何调试,检测C++和C#的内存泄漏的一些经验。Windbg,VLD,gflags,UMDH,Visual Studio。
本文介绍如何使用Visual Studio的Natvis来定制如何在调试时显示C++对象。如果是C#对象,可以直接使用Debugger Display Attributes。
Moq4为了实现返回值基于参数的功能支持超过4个参数的方法,导致Moq做了2个dll,分别是基于.NET3.5和.NET4。就是我们下载Moq时看到的Moq35和Moq40两个文件夹。这两个dll在大部分情况下可以混用,但是如果测试方法中包含要Mock超过4个参数的方法,并且需要根据参数值来决定返回值时,混用Moq35和Moq40会导致测试失败。