Dawei XU 徐大伟

Dawei XU 徐大伟

Flying in the free sky

    • Home
    • Archives
    • About

Windows下如何检测用户修改了系统时间并且把系统时间改回来

有些时候我们不希望用户在使用我们的软件时修改系统时间,那么怎么检测用户是否修改系统时间呢?Windows会在系统时间修改时发送WM_TIMECHANGE消息,所以可以在C++的WindowProc函数中处理这个消息。如果是C#,可以直接用SystemEvents.TimeChan

Sep 16 2015

为什么只有在用Visual Studio启动程序时会抛出InvalidOperationException异常

在我之前的博文C#中只使用Invokerequired来判断是不是UI线程可靠吗?提到过除了检查InvokeRequired,还需要检查IsHandleCreated。今天再分享一段关于InvokeRequired的代码。 1234567891011121314public pa

Sep 14 2015

使用Windows的分析等待链(analyze wait chain)来诊断没用响应的应用

我之前的博文使用ProcDump在程序没有响应时自动收集dump介绍过如何使用ProcDump自动收集无响应程序的dump。另外还有一个很有用的工具WhatIsHang也可以自动监测没有相应的程序,还能给出一个分析报告,包含调用栈Call Stack,栈上数据Stack Data

Sep 11 2015

如何通过进程名获取进程ID

本文通过查看C#的GetProcessesByName的源代码来看如何在C++中获取所有系统进程信息。

Aug 20 2015

C#是怎么获取窗口标题的

之前的博客C++如何拿到一个窗口的标题介绍了如何用Windows的GetWindowText函数来获取窗口的标题,Windows是如何实现这个方法的,同时介绍了在使用GetWindowText时可能遇到的一些问题。下面我们来看看在C#中是怎么拿窗口标题的。 C#的Process.

Aug 20 2015

C++如何拿到一个窗口的标题

本文介绍了如何用Windows的GetWindowText函数来获取窗口的标题。介绍了Windows是如何实现这个方法的。同时介绍了在使用GetWindowText时可能遇到的一些问题,比如调用方被挂起hang了,原因是什么,如何避免。另外还说明了使用GetWindow函数可能遇到的问题,应该尽量使用EnumWindows来替代。

Aug 19 2015

C#如何转换2位数字表示的年

C#根据Calendar.TwoDigitYearMax来做2位数字年份的转换,默认值是2029,所以30就是1930,29就是2029。

Aug 12 2015

在Visual Studio中使用Pseudovariables来帮助调试

在我之前的博文C#的强迫执行域Constrained Execution Regions(CERs)中提到过一点可以通过在Visual Studio的Watch窗口输入@err,hr来显示GetLastError。今天把Visual Studio中能使用的Pseudovariab

Jul 15 2015

如何去掉WinForm或者WPF的最大化和最小化按钮

本文介绍了如何通过SetWindowLongPtr和GetWindowLongPtr、SetWindowPos来去掉WinForm或者WPF的最大化和最小化按钮。

Jul 14 2015

Visual C++中的编译器优化

Compilers - What Every Programmer Should Know About Compiler Optimizations和Part 2介绍了Visual C++中的编译器优化。摘录几个定义如下: 链接期代码生成(Link-Time Code Gener

Jul 13 2015

如何用C#检查硬盘是否是固态硬盘SSD

本文介绍了如何用C#来查看硬盘是不是“no seek penalty”,或者nominal media rotation rate是1,从而判断硬盘是不是固态硬盘SSD。

Jul 9 2015

用C#来查看电脑硬件和系统信息

本文介绍了如何用C#通过Environment和ManagementClass来查看操作系统,环境变量,CPU情况,硬盘情况等。

Jul 8 2015

如何用Windbg找到被catch住的C++的异常

本文介绍了如果用windbg的搜索内存的命令s [-[[Flags]Type]] Range Pattern在栈上寻找上下文CONTEXT,然后通过windbg的切换上下文的命令.cxr来找到C++的异常的调用栈(call stack)信息。

Jul 4 2015

图示化各种数据结构和算法是怎么实现的

Data Structure Visualizations用图示的方式展示了各种数据结构和算法是怎么实现的,非常直观。它的Html5/Javascript的源代码是开源的(FreeBSD license),可以基于这个源代码实现新的算法和数据结构。

Jun 28 2015

聊聊LAA(LARGE ADDRESS AWARE)

本文介绍了什么是LAA(LARGE ADDRESS AWARE),怎么设置LAA,怎么检查LAA。并且介绍了Windows PE格式。

Jun 25 2015

用wow64exts调试64位任务管理器抓取的32位程序的dump

我在之前的博客如何生成Dump文件中提到过,如果要用任务管理器收集32位应用程序dump的话,一定要确保用的是32位的任务管理器。假设用64位的任务管理器的话,用windbg打开,会发现类似如下的call stack。 123456789101112131415161718192

Jun 23 2015

怎么从代码中拿到栈回溯信息(call stack trace)

本文介绍如何在C++和C#代码中得到当前的栈回溯信息(call stack trace)。C#使用了System.Diagnostics.StackTrace,C++使用了CaptureStackBackTrace和DbgHelp中的SymSetOptions,SymInitialize,SymCleanup,SymFromAddr,SymGetLineFromAddr64。

Jun 21 2015

调试内存泄漏问题的一些经验

内存泄漏(memory leak)是软件中经常遇到的一类问题,这类问题又是比较难以检测的,通常我们在程序遇到Out Of Memory的异常时才会注意到。拿到Out Of Memory的dump文件后,如何分析dump文件找到内存泄漏的线索又是一个难点。这篇文章分享了一些在Windows平台如何调试,检测C++和C#的内存泄漏的一些经验。Windbg,VLD,gflags,UMDH,Visual Studio。

Jun 21 2015

用Natvis定制C++对象在Visual Studio调试时如何显示

本文介绍如何使用Visual Studio的Natvis来定制如何在调试时显示C++对象。如果是C#对象,可以直接使用Debugger Display Attributes。

Jun 17 2015

Moq4在.NET3.5和.NET4版本之间的差异

Moq4为了实现返回值基于参数的功能支持超过4个参数的方法,导致Moq做了2个dll,分别是基于.NET3.5和.NET4。就是我们下载Moq时看到的Moq35和Moq40两个文件夹。这两个dll在大部分情况下可以混用,但是如果测试方法中包含要Mock超过4个参数的方法,并且需要根据参数值来决定返回值时,混用Moq35和Moq40会导致测试失败。

Jun 12 2015
<span></span>Prev123456…22Next<span></span>
RSS

Total Posts: 421


Recent Posts

  • * 代码审查(Code Review)的一些最佳实践
  • * 关于Service Level Agreement (SLA)的一些建议
  • * 程序员的开发效率可以衡量吗?
  • * 开好会议的一些小技巧
  • * 什么是好的会议

Tags

  • Programming196
  • Tool132
  • Debug35
  • Other32
  • SoftSkill19
  • Development16
  • Testing13
  • Manage12
  • Design9
  • Process8
  • Life6
  • Algorithm5
  • Cloud3
  • Installer2
  • Productivity1
  • DevOps1

Powered by hexo and Theme by Jacman © 2024 Dawei XU