Windows
Matrix_Designer
专注: ArmLinux/.NET开发
展开
-
Windows 2008 / 2008 R2 开启显卡硬件加速
通过修改注册表项实现:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{187826E1-5903-40A9-BA63-0ED7D45282A8}\0000查看右邊的鍵值類型為 REG_DWORD 的 Acceleration.Level 如果其值為 0 , 那么表明其完全啟用了顯卡加速. 如果值是 5 表转载 2014-06-27 17:38:53 · 4659 阅读 · 0 评论 -
获取指定进程所有线程的当前执行模块
对于可扩充架构的软件,都存在着很多的插件。这样相对于主模块,插件的工作就是不安全的。为了防止插件的不安全性影响到主模块甚至全局,很多框架都采取了好的方式隔离插件的执行,如.NET中的执行域(AppDomain)。对于那些采用Exe/DLL架构的原始代码,DLL的运行相对于EXE来说就是不安全性的。为了最大限度的隔离DLL的运行,防止其对宿主EXE造成影响。需要做以下几点: 首先需要在主模块中采用结构化异常处理防止EXE对DLL导出函数的调用出现异常。这类问题一般比较容易解决。 其次,主模原创 2011-05-10 10:01:00 · 2122 阅读 · 0 评论 -
获取Windows进程的父进程编号
<br /> Windows API中没有提供直接获取指定进程父进程编号的函数。为此可以通过进程快照来遍历所有进程,从而获取进程的父进程编号。本文通过NTDLL.dll中未公开API NtQueryInformationProcess来获取进程的相关信息,其中就包含了进程的父进程编号。见代码:<br />#define NTSTATUS LONG#define ProcessBasicInformation 0typedef UINT PROCESSINFOCLASS;typede原创 2011-05-16 16:03:00 · 2166 阅读 · 0 评论 -
Windows 窗口分析
<br />(本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了)<br />问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在DLL中,而这部分界面又需要使用到Tooltip,但DLL中的虚函数PreTranslate转载 2011-05-17 10:16:00 · 1126 阅读 · 0 评论 -
跨线程激活窗体
VOID PureSetForegroundWindow(HWND hWnd){::AttachThreadInput(::GetCurrentThreadId(), ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL), TRUE);::ShowWindow(hWnd, SW_SHOWNORMAL);::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);原创 2011-03-31 13:20:00 · 616 阅读 · 0 评论 -
键盘/鼠标钩子的延迟问题
<br /><br /> 今天测试发现,键盘钩子有很大的延迟。而且延迟是不固定的,在不同的项目中情况也不同,有时延迟大,有时延迟小。最终发现问题的根源:键盘钩子和鼠标钩子都是在当前线程上下文中执行的,当某个键盘/鼠标事件发生时,系统会通过消息发送将此事件发送给建立钩子的线程,这个线程会在PeekMessage/GetMessage中处理钩子消息。这样对于加载钩子的线程是界面线程(特别是MFC的界面线程)时,就会由于消息提取的延迟而使得消息钩子的处理产生延迟。最终单独创建一个钩子,在这个线程上下文中进行原创 2011-06-02 11:19:00 · 1875 阅读 · 0 评论 -
AutoRedraw属性与窗体设备场景的深入探讨
大家知道AutoRedraw是设置窗体是否重画的。那为什么为false窗体上的图形就不会被重画,而为true则窗体在被覆盖后再显示,窗体上的图形仍旧在? 这个问题其实与窗体的设备场景有直接的关系。即使没接触过Windows GDI开发的朋友也一定听说过设备场景(Device Context),设备场景是用来控制窗体图形显示方式的对象。比如,我们可以通过设置设备场景的画笔对象来控制转载 2011-06-03 12:02:00 · 1175 阅读 · 0 评论 -
GetPixel取窗体颜色值
<br /><br /> 可以使用GetPixel和SetPixel对某个窗体的颜色值进行获取和设置,但是需要注意一下几点:<br /> 1:坐标采用的是客户坐标,即相对于窗体左上角的坐标,与屏幕无关,与滚动条无关。当窗体有滚动条时要特别注意,当滚动条滚动后,你要去的点的坐标也就变化了,任何时候都是此点相对于窗体左上角的坐标。<br /> 2:此点必须在屏幕上的可见范围。这有三层含义:一是此窗体必须可见,不能隐藏,不能最小化;二是此窗体目前必须在最前面,没有任何窗体挡住了它;三是此点必须在原创 2011-06-02 11:36:00 · 1575 阅读 · 0 评论 -
WaitForSingleObject 和 EnterCriticalSection 效率比较
Microsoft Windows 平台中两种最常用的锁定方法为 WaitForSingleObject 和 EnterCriticalSection 。WaitForSingleObject 是一个过载 Microsoft API ,可用于检查和修改许多不同对象(如事件、作业、互斥体、进程、信号、线程或计时器)的状态。Wa itForSingleObject 的一个不足之处是它会始终获取内核的锁转载 2011-06-07 18:54:00 · 998 阅读 · 1 评论 -
未处理异常的处理
<br /> 可以在Windows中通过SetUnhandledExceptionFilter设置未处理异常的默认处理。很多程序都用它来执行记录程序中的BUG,如QQ崩溃时弹出的框框。<br /> 捕获到异常后,需要分析异常新,这个可以通过Windows提供的DbgHelp完成。对于异常的处理,一般都是终止程序。但是也可以在处理函数中调用ExitThread退出当前线程,这样就仅有当前线程被破坏,不影响进程的其他部分。关于异常的代码意义,可以参看GCLsoft的博文,地址是:http://hi.原创 2011-05-09 10:59:00 · 1086 阅读 · 0 评论 -
设置计算机颜色保护眼睛
颜色值RGB(204, 232, 207),也就是YUV(85,90,205)是保护眼睛很好的颜色。为了保护好眼睛,可以将系统及各类软件的背景色都设置成此颜色值。 首先设置Window的窗口背景,可以通过在桌面上右击,属性->外观->高级,然后在项目里选窗口,然后点颜色,将其设置成上述颜色即可。 再看IE 8.0设置。选择工具->Internet选项->常规->外观。点颜色,取消"使用悬停颜色",选中"使用Windows颜色";点辅助功能,格式化里选中"忽略网页上指定的颜色"。 再原创 2011-03-11 11:00:00 · 1268 阅读 · 0 评论 -
Introduction to Debugging-1 (zz, By Richard "superpig" Fine )
<br />As much as we may wish to deny it, human beings are not perfect. We make mistakes. Programmers are not exempt from this and, frequently, the mistakes we make are in the programs we create; such mistakes lead to issues, defects or, as they a转载 2010-09-18 08:16:00 · 728 阅读 · 0 评论 -
低级钩子失灵原因
<br />Windows要求低级钩子必须在限定的时间内完成,如果超时系统就会自动调用钩子链的下一个函数。这个超时值是由HKEY_CURRENT_USER/Control Panel/Desktop下的键LowLevelHooksTimeout决定的。如果没有这个键,系统在一次超时后就会自动卸载钩子,以后钩子函数就再也得不到执行。默认情况下,XP有这个键,其值为5000(五秒钟);Vista和Win7都没有这个键,因而一旦超时钩子就会被卸载。原创 2010-09-19 08:20:00 · 2533 阅读 · 0 评论 -
语音识别LoadCmdFromFile错误码0x80045052原因
<br />出现0x80045052错误的原因是本地语音识别选的语言和装载的语法xml中要求的语言不同。可以通过设置解决:<br />控制面板---语音-语音认别选项卡------------》改成Microsoft Simplified Chinese原创 2010-09-19 08:21:00 · 2496 阅读 · 3 评论 -
Getting Oz Solomon’s Project Line Counter to work in VS2008
<br />John first published the blog in http://johnstewien.spaces.live.com/Blog/cns!E6885DB5CEBABBC8!1264.entry, here is the original paper as following:<br />----------------------------------------------------------------------<br />I'm a big fan of O转载 2010-09-21 08:29:00 · 576 阅读 · 0 评论 -
在输出的调试信息中统一加上模块名前缀
模块一多,调试起来就麻烦。为了在输出的调试信息前统一加上前缀,如模块名以区分不同模块输出的信息。可以通过在stdafx.h文件中添加以下代码实现:#ifndef MODULETAG#define MODULETAG "ModuleName!"#endif#ifdef TRACE#undef TRACE#define TRACE(sz, ...) ATLTRACE(MODULETAG##sz, __VA_ARGS__)#endif // TRACE#ifdef TRACE0#und原创 2010-10-06 16:53:00 · 939 阅读 · 0 评论 -
微软语音识别的汉字集
<br />今天调试程序发现,微软语音识别引擎的命令模式并不是支持完成的GBK字符集,而仅支持GB2312(准确说是其一个子集,很多符号都不支持)!一旦Xml文件中包含不可识别字符时,LoadCmdFromFile就会失败。因而在添加命令到Xml中前需要对命令文本进行过滤。写了一个过滤函数,代码如下:<br />/* <br />* 1.字符编码,共682个: <br /> 1)01区(94个):高位A1,低位A1-FE <br /> 2)02区(72个):高位A2,原创 2010-10-24 22:43:00 · 794 阅读 · 0 评论 -
VS2008/MFC/CDialog 的资源定位问题
发现VS2008带的MFC库似乎有问题。CDialog::DoModal和CDialog::Create中用FindResource寻找对话框资源时使用的模块句柄(由AfxFindResourceHandle得到)始终是Exe的句柄。所以在动态链接库中使用对话框时会出现资源定位失败。具体代码如下:INT_PTR CDialog::DoModal(){ // can be constructed with a resource template or InitModalIndirect原创 2010-12-25 17:52:00 · 1153 阅读 · 0 评论 -
[网游设计] 推荐一些书籍
<br />本来是写给新同学作为参考的,难得写这么多文字,贴到 blog 上自我陶醉下。咔咔。<br /><br />--------------------------------------------------------------------------------------<br />-- 学习资料/推荐书目<br />--<br />-- 一个人不可能把所有知识都掌握无余,本文只希望达到“在学习某一领域软件知识时,可很快<br />-- 找到一些比较不错的参考书籍”的目转载 2010-11-23 10:48:00 · 990 阅读 · 0 评论 -
MFC扩展dll里导出函数时资源切换的问题
<br />在MFC扩展dll里导出函数时应该也进行资源的切换。<br />在共享的(动态链接的)MFC规则dll里,在每一个导出函数前都需进行资源的切换,在扩展dll里同样也需要,因为它们都是动态链接到MFC库的,在调用导出函数时,若要加载对应的资源,MFC会首先从应用程序模块里查找,找不到时才从dll中查找,所以若存在同名的资源,则可能会加载错误。<br />例子:<br />dll:MFCExtDll,它里边存在一个对话框资源IDD_DIALOG2,它对应的编号是2000,在resourc转载 2011-04-20 14:21:00 · 1410 阅读 · 0 评论 -
使用mt.exe查看PE文件的manifest
Visual Studio 从2005开始使用程序集发布所有的托管/非托管程序。保存程序集信息的是一个manifest文件,这个文件可以单独存在,也可以内嵌到PE文件中,默认就是内嵌到PE文件中。当运行程序出现"应用程序配置不正确,程序无法启动"错误时,就要考虑是否是依赖的程序集无法定位。manifest中就保存了程序集所依赖的所有程序集,对于内嵌到PE中的程序集当然就得手动提取出这个manifest文件。可以用VS2008附带的工具mt.exe完成,示例如下:mt -inputresource:Tes原创 2011-04-25 10:19:00 · 2218 阅读 · 0 评论 -
C++Directx11开发笔记五:3D空间坐标系认识
在前一篇文章中我们知道了顶点着色器和像素着色器的用途,在例子中也知道了如何在3D的坐标系中画一个2D的图像,即画一个三角形,这次我们需要知道如何在3D坐标系中呈现一个3D的图像,并且了解一下在3D空间中几个坐标系的认识。这些在游戏编程中都会使用到,因为每个3D物件都有自己的坐标系转载 2011-10-07 13:04:11 · 915 阅读 · 0 评论 -
C++Directx11开发笔记六:3D空间坐标系变换,绘制3D图形动画
上一篇文章中我们认识了Direct3D中一些空间坐标系,其中包含了几何模型坐标系,世界坐标系,观察坐标系,投影坐标系以及屏幕坐标系,一些纯理论的知识。今天我们来了解一下这些坐标系的变换,并且通过一个例子来说明这些坐标系的关系。这些变换主要在于几何模型到世界坐标系的变化,世界坐标系转载 2011-10-07 13:04:52 · 1305 阅读 · 0 评论 -
C++Directx11开发笔记二:Direct3D基础设备的初始化
最近正在学习Directx 11的开发,上一次记录了Win32应用程序的基础,主要是注册窗体类,加载图标和鼠标,处理事件循环等,链接为:C++Directx11开发笔记一:Win32应用程序窗体创建。今天我们要介绍的是Direct3D基础,其中包括Direct3D 11的设备转载 2011-10-07 13:01:43 · 1768 阅读 · 0 评论 -
C++Directx11开发笔记四:着色器之顶点着色器和像素着色器
前面我们学习了Directx 11如何在屏幕上绘制一个图形(三角形),其中涉及到着色器,我们只是使用了其中的方法,而没有讲解着色器是如何工作的,到底什么是着色器等等,今天将来了解一下着色器到底是什么!!!由于在Directx 11中包含了多种着色器,而有些着色器在一些高级的应用中转载 2011-10-07 13:03:04 · 1103 阅读 · 0 评论 -
VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息
关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。如果要处理这两个消息需要手动在WM_MOUSEMOVE消息处理函数中添加:添加变量:BOOL m_bTracking;m_bTracking = FALSE;添加消息处理函数:afx_msg转载 2011-11-01 11:24:56 · 1084 阅读 · 0 评论 -
VMware卸载时提示The MIS '' is failed解决方案。
如果卸载时VMware WorkStation时提示The MIS '' is failed,此时可执行下面脚本,然后就可成功卸载!cls @echo off CLS color 0a echo 取消DLL文件的注册... regsvr32 /u /s "%cd%/vmappcfg.dll" regsvr32 /u /s "%cd%/vmappsdk.dll" re转载 2011-11-30 14:31:29 · 3277 阅读 · 0 评论 -
用ITaskbarList接口操纵Windows任务栏程序按钮的状态
class CXDlg : public CDialog{ ...... public: typedef ITaskbarList *LPITaskbarList; LPITaskbarList pTaskbar; ......};Step 2: 初始化 任务栏COM 对象BOOL CXDlg::OnInitDial转载 2012-07-24 14:24:29 · 530 阅读 · 0 评论 -
Windows设置进程在特定CPU上运行
通过Win32 API SetProcessAffinityMask实现,原型如下:BOOL WINAPI SetProcessAffinityMask( _In_ HANDLE hProcess, _In_ DWORD_PTR dwProcessAffinityMask);具体可参考:http://msdn.microsoft.com/zh-cn/librar原创 2013-03-20 11:58:28 · 987 阅读 · 0 评论 -
C++Directx11开发笔记三:绘制图形
在前面我们讲过了如何初始化D3D11Device设备初始化等等,这里所讲的绘制图形将在上一篇文章的项目里进行扩展,在屏幕中绘制图形。在3D的呈现中最小的单位为三角形,无论我们看到的是多么大或多么小的,都是有一个或很多个三角形通过各种方向,角度构成的,当然这会涉及到很多数学中的几何转载 2011-10-07 13:02:29 · 1455 阅读 · 0 评论 -
关于GetWindowText
偶然发现GetWindowText极不稳定。对于跨进程获取窗体的标题时,不同的环境下,这个函数执行的成功与否不同,甚至有时第一次会失败,第二次又成功了。该用SendMessage发送WM_GETTEXT和WM_GETTEXTLENGTH消息成功解决这个问题。原创 2011-09-09 13:19:18 · 835 阅读 · 0 评论 -
Microsoft Visual C++ 2008 发布程序的部署问题
<br /> VC2005和VC2008编译出来的程序放到别人的电脑上为什么有可能无法运行呢?<br /> 这个问题无数人在问,但是很遗憾,没有人给出完整的解释和完美的解决方案。其实我也只有一台电脑,而且装了VC了,这个问题必须要台没有装这类软件的电脑才容易去分析。感谢那些为了测试我小程序的朋友,是你们一次次在如此恶劣的网络速度下收取我一次次修改的dll包和部署文件,才让这个问题的完美解决方案浮出水面。这里就把我的经验给大家分享吧。<br /><br />1:转载 2011-04-23 15:48:00 · 564 阅读 · 0 评论 -
VS2008下使用PLC
Project Line Counter这个代码行统计工具相信大家在VS9之前的IDE下用的都很爽,可以他没有直接支持VS2008,稍微做点工作,就可以让他在VS2008下完美运行了:)新建一个记事本,里面输入:Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/转载 2011-06-15 09:47:00 · 934 阅读 · 0 评论 -
gflags调试工具
gflags Windows调试工具。使用它帮助我解决了瞎调了一整天的内存问题。 由于使用了已经delete的指针,VS提示位置又错误的情况下,瞎调了一通。怎么想那块也不会有问题,可是抱着对VS的信任把错就归咎于自己吧! 偶然的机会,搜到了gflags,抱着试一试的心态,使用该工具: 1. 安装:Debugging Tools for Win转载 2011-06-15 10:34:00 · 1207 阅读 · 0 评论 -
一个让我怀疑信仰的BUG——关于临界区
最近,调程序时偶然发现一个纠结的问题,关于临界区的。临界区是一个容易出问题的东西,但是大部分都是死锁,而我却出现了另外一个问题,受临界区保护的临界资源访问发生了不一致! 一开始我的直觉是肯定是临界区的代码没有处理好,某个地方临界区的进入和退出没配对,不是只退没进,就是进一退多。于是乎我仔细的检查了所有访问临界资源的地方,都是严格的受到临界区的保护,而且进入和退出计数都是一致的啊。后来原创 2011-06-24 11:34:00 · 845 阅读 · 0 评论 -
ISAPI精彩编程
<br /> 以前想做一点ISAPI方面的程序,上网找了很长时间一直没有写得全一些的,书店里的书里写的又不是很深,于是经过两个月的摸索,总算做了一些东西。很长一段时间以来,总想写一写ISAPI方面的文章,可是一直没有时间,今稍有空,遂把最近所学写下,以归所愿。<br />略作构思,欲写以下几点:<br />1, ISAPI简介<br />2, 一个简单的ISAPI程序<br />3, ISAPI实现 客户/服务器 交互<br />4, ISAPI操作数据库<br />5, 利用ISAPI进行网络数据传送转载 2011-05-04 15:46:00 · 748 阅读 · 0 评论 -
输入法信息捕获总结
输入法信息捕获相关的消息有WM_IME_SETCONTEXT、WM_IME_SELECT和WM_IME_NOTIFY。WM_IME_SETCONTEXT为文本框激活后输入法上下文激活的消息,WM_IME_SELECT为输入法改变的消息,WM_IME_NOTIFY为输入法相关通知消息,根据wParam区分不同的消息,其中IMN_OPENCANDIDATE为候选项打开,IMN_CHANGECANDIDATE为候选项改变,IMN_CLOSECANDIDATE为候选项关闭。 通过Hook GetMes原创 2011-05-05 12:01:00 · 3726 阅读 · 0 评论 -
在同一地址空间里运行多个exe文件
在同一地址空间里运行多个exe文件是很多人梦寐以求的,我也想实现。最近查了点资料,虽然没有彻底实现,也学了点新知识。记录下来被网吧。 可以通过LoadLibrary将一个exe文件加载到当前进程地址空间中。但是对于dll文件系统会自动进行地址重定位,而对于exe文件则不做任何处理。因此需要解决的一个重要问题就是地址重定位。从所获资料中了解到,大体有两种方法。 一种是让内核将exe当做dll处理。系统对一个PE文件格式的识别是通过PE文件的PE头中的特征值实现的。此特征值是一个WORD,其原创 2011-05-08 14:41:00 · 799 阅读 · 0 评论 -
主线程退出,不代表进程会终止
核心编程上说的比较清楚,主线程返回了,系统会自动终止其他所有线程,回收资源,从而结束进程。偶尔间我发现.net里面的主线程退出时,只要还有前台线程存活,进程就不会退出。很迷惑其实现原理。查了些资料,了解到,默认情况下,只要进程中还有一个线程存活,进程就不会终止,与存活的线程是不是主线程无关,除非某个线程直接或间接的通过ExitProcess等全局性的API提前结束了进程的执行。这似乎与很多人的观点不同,呵呵。 为了简单明了,看下面代码:DWORD WINAPI OtherThread(LPVO原创 2011-05-09 17:49:00 · 2400 阅读 · 0 评论 -
配置EditPlus为汇编的编辑工具
<br />#TITLE=ASM<br />; Assemble syntax file written by LuoYunBin<br />#DELIMITER=,(){}[]-+*%/="'~!&|<>?:;.#<br />#QUOTATION1='<br />#QUOTATION2="<br />#CONTINUE_QUOTE=n<br />#LINECOMMENT=;<br />#LINECOMMENT2=<br />#COMMENTON=<br />#COMME转载 2010-09-17 08:22:00 · 675 阅读 · 0 评论