![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
windows机制
文章平均质量分 72
程序执行机制
luckyone906
这个作者很懒,什么都没留下…
展开
-
C++中运行一个程序的内存分配情况及qt中的内存管理机制
c++原创 2022-11-10 18:57:50 · 2151 阅读 · 0 评论 -
C++中HANDLE句柄的概念
c++原创 2022-11-10 18:30:40 · 2098 阅读 · 0 评论 -
c#中怎么截获按钮消息的几种方法实例验证
C#原创 2022-11-01 21:47:26 · 528 阅读 · 0 评论 -
c#中的消息处理函数和vc中的消息处理函数区别
c#原创 2022-11-01 21:29:18 · 533 阅读 · 0 评论 -
mfc-钩子的使用方法详解
MFC原创 2022-11-01 21:05:07 · 531 阅读 · 0 评论 -
mfc-钩子的使用方法详解
MFC原创 2022-11-01 21:03:27 · 326 阅读 · 0 评论 -
mfc中钩子的使用
MFC原创 2022-11-01 21:02:52 · 224 阅读 · 0 评论 -
MFC中手动添加消息处理函数PreTranslateMessage截获按键等消息
C++原创 2022-11-01 21:02:10 · 1544 阅读 · 0 评论 -
控件中的Cliked事件和MouseDown事件执行优先级问题
c#原创 2022-11-01 20:41:29 · 355 阅读 · 0 评论 -
MFC中的模态对话框与非模态对话框的消息循环及消息传递问题(都可以通过SendMessage传递消息)
C++原创 2022-10-29 14:00:21 · 2171 阅读 · 0 评论 -
模态对话框阻塞主线程的话不影响其他线程操作主线程控件(不阻塞)
Task.Factory.StartNew(() => { Thread.Sleep(5000); this.Invoke(new Action(() => { this.button7.Text = "aaaaaaaaaaaaaa"; })); }); MessageBox.S...原创 2022-03-26 09:17:35 · 1048 阅读 · 0 评论 -
C#-invoke与sendmessage,findWindow的阻塞实验
虽然模态对话框阻塞了顶层窗体,但是仍然可以通过findwindow查找顶层窗体句柄,并使用sendmessage向顶层窗体发送消息并执行消息内的逻辑(验证实例如下)public partial class Form6 : Form { #region [DllImport("User32.dll", EntryPoint = "FindWindow")] private extern static IntPtr FindWindow(string ...原创 2022-02-07 20:41:33 · 356 阅读 · 0 评论 -
C#-Hook钩子实例
一。写在最前本文的内容只想以最通俗的语言说明钩子的使用方法,具体到钩子的详细介绍可以参照下面的网址:http://www.microsoft.com/china/community/program/originalarticles/techdoc/hook.mspx二。了解一下钩子从字面上理解,钩子就是想钩住些东西,在程序里可以利用钩子提前处理些Windows消息。例子:有一个Form,Form里有个TextBox,我们想让用户在TextBox里输入的时候,不管敲键盘的哪个键,TextB原创 2022-02-06 21:32:09 · 1649 阅读 · 0 评论 -
c++中类创建对象的两种方式
class A{};1.A a;2.A *a =new A();第一种方式对象数据存在栈中,是局部变量;第二种方式方式申请了动态内存,即对象数据在堆区。原创 2022-02-05 21:19:24 · 1745 阅读 · 0 评论 -
C++类与对象概念详解
一、 简介1.类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。2.类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。二、类成员函数1.类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。2.成员函数可以定义在类定义内部,或者单独使用范围解析运算符 ::来定义。在类.原创 2022-02-05 21:15:07 · 1603 阅读 · 0 评论 -
C#截获其它窗口的WM_PAINT 消息
在C#底下如何截获其它窗口的WM_PAINT 消息啊?自己窗口可以这样截获protected override void WndProc( ref Message m ){switch(m.Msg){case WM_PAINT:{}}原创 2022-02-05 20:48:21 · 627 阅读 · 0 评论 -
一个线程资源中有多个模态对话框的问题
一个线程资源中有多个模态对话框下,不是激活的无法调用关闭,只有非激活状态才可以调用关闭,但是可以通过sendmessage发送消息给非激活状态下的模态对话框处理关闭等逻辑。原创 2022-01-19 21:17:40 · 321 阅读 · 0 评论 -
WindowsAPI-获得当前活动窗口(运行自身消息循环的窗体)的句柄
/************************GetForegroundWindow() 返回 Windows 系统的当前激活的窗口句柄。GetActiveWindow() 返回自己程序的当前激活窗口的句柄。Screen->ActiveForm 返回自己程序的激活的TForm派生的窗口。Screen->ActiveForm->Handle 不一定等于 GetActiveWindow()。比如,当调用TOpenDialogTSaveDialog TFontDialog TCo原创 2022-01-19 21:15:29 · 4457 阅读 · 0 评论 -
c#实例-子线程查找另一线程模态对话框句柄(invoke测试)
private void button3_Click(object sender, EventArgs e) { Task.Factory.StartNew(() => { Form1form1 = new Form1(); form1.Name = "MyForm"; form1.Text = "子窗体"; form1....原创 2022-01-18 20:57:32 · 383 阅读 · 0 评论 -
Windows消息机制-PreTranslateMessage
PreTranslateMessage作用和使用方法Windows消息机制的流程: A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中 B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。 C. 应用程序调用DispatchMessage,将消息回传给操作系统。 D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。原创 2021-12-20 19:15:46 · 721 阅读 · 0 评论 -
TranslateMessage ,GetMessage, DispatchMessage分析
TranslateMessage(&msg);TranslateMessage是用来把快捷键消息转换为字符消息,并将转换后的新消息投递到调用线程的消息队列中。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。LONG DispatchMessage(CONST MSG*lpmsg);函数功能:该函数分发一个消息给窗口程序,即把消息推送原创 2021-12-20 19:16:08 · 1552 阅读 · 0 评论 -
Windows消息机制详解-6
消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。 消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做MSG,MSG含有来自windows应用程序消息队...原创 2021-12-20 19:02:10 · 839 阅读 · 0 评论 -
Windows句柄-2
这里需要说明:1.这里将句柄所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4个字节。3.图解的目的是为了直观易懂,所以不一定与源码完全对应,会有一定的简化。让我们先看图,再解释。其中,图1是程序运行到某时刻时的内存快照,图2是程序往后运行到另一时刻时的内存快照。红色部分标出了两次的变化。简单解释:Windows是一个以虚拟内存为基础的操作系统,很多时候,进程原创 2021-12-19 10:26:26 · 217 阅读 · 0 评论 -
Windows消息机制详解-5
一、 什么是消息在解释什么是消息之前,我们先讨论一下程序的执行机制问题。大体上说,程序按照执行机制可以分为两类:第一类是过程驱动。比如我们最早接触编程时写的C程序,又或者单片机程序。这类程序往往预先已经设定好了执行流程,我们执行时只是按部就班的执行;第二类是事件驱动。事件,相信大家都能够理解。每个事件的发生都是随机的,每个事件都会有发生的时刻,类似生活中的事件。程序中的事件也会有自己的触发点,事件驱动程序就是事先编写好了针对每个事件的处理流程。在Windows的操作系统中,消息就是Windows中的原创 2021-12-19 10:21:47 · 318 阅读 · 0 评论 -
windows消息机制-4(MFC)
消息分类与消息队列Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型,而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据的含义也不一样。time表示产生消息的时间,pt表示产生消息时鼠标的位置。按照类型,Windows将消息分为:(0) 消息ID范围系统定义消息ID范围:[0x0000, 0x03ff] 例:WM_NULL(0x0000)表示空消息 WM_CLOSE(0x0010)表示窗口关...原创 2021-12-19 10:17:59 · 299 阅读 · 0 评论 -
Windows消息机制详解-2
消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。 消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做MSG,MSG含有来自w...原创 2021-12-19 10:14:47 · 378 阅读 · 0 评论 -
windows消息机制深入详解-1
Windows 是一个事件驱动的操作系统。事件驱动围绕着消息的产生与处理展开,事件驱动是靠消息循环机制来实现的。也可以理解为消息是一种报告有关事件发生的通知,消息是Windows 操作系统的灵魂。在屏幕显示一个窗口一般是以下几个步骤:1. 得到应用程序的句柄(GetMouduleHandle,一个程序被加载进内存之后,被称为一个模块,代表着这个文件中所有的代码和资源,取这个模块的句柄方便以后操作这个应用程序)。2. 注册窗口类(RegisterClassEx),在注册之前,要先填写Regis原创 2021-12-19 10:11:24 · 4003 阅读 · 0 评论 -
windows消息机制详解-3
1. 引言Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛。Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos 程序员不能习惯Windows 的程序开发。而很多Windows 程序开发人员也只是对消息运行机制一知半解,想要掌握Windows 编程的核心,必须深刻理解消息机制。事件驱动围绕着消息的产生与处理展开,事件驱动是靠消息循环机制来实现的。也可以理解为消息是一种报告有关事件发生的通知,消息是Windows 操作原创 2021-12-19 10:10:46 · 2731 阅读 · 0 评论 -
WindowsAPI-Findwindow函数和FindWindowEx用法
1.函数说明:FindWindow,Win32 API函数。FindWindow函数返回与指定字符串相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。2.函数原型:HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName );3.参数说明:lpClassName指向一个以null结尾的、用来指定类...原创 2021-12-13 19:58:13 · 18032 阅读 · 0 评论 -
句柄的概念详解
1.这里将句柄所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4个字节。程序运行到某时刻的内存快照 程序往后运行到另一时刻时的内存快照Windows是一个以虚拟内存为基础的操作系统,很多时候,进程的代码和数据并不全部装入内存,进程的某一段装入内存后,还可能被换出到外存,当再次需要时,再装入内存。两次装入的地址绝大多数情况下是不一样的。也就是说,同一对象...原创 2021-12-13 19:48:00 · 17420 阅读 · 1 评论 -
利用FindWindow和SendMessage进程通信
利用FindWindow和SendMessage,特此记下。首先说FindWindow。FindWindow返回与指定字符创相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。函数原型为:C++:HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName );lpClassName就是窗口类名,大多数情况不会用到它。lpWindowName是窗口名,就是窗口标题,任何一个窗口都有标题,当然也会有相同...原创 2021-12-13 19:38:26 · 606 阅读 · 0 评论 -
关于SetCapture() 和 ReleaseCapture()的用法
MSND中对SetCapture()函数的说明为:“该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。”一开始我看这个解释误认为了只要在属于窗口里的一个线程调用了SetCapture(hWnd)把hWnd设为当前的窗口句柄,那么以后的所有窗口消息都会发到我们指定的那个窗口消息队列中。这样的理解是错误的!!!在你调用Set原创 2021-12-10 19:39:00 · 951 阅读 · 0 评论 -
c#中WinForm中拖拽窗体实现移动功能(无边框模态窗体)
在WindowsForm 应用程序中,如果将窗体的FormBorderStyle属性设置为none,这时,用鼠标拖拽窗体时就无法实现移动的功能了,下面就是解决方案.在FormBordeStyle属性设置为none的窗体的后台代码中添加以下代码: [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public s原创 2021-12-10 19:37:12 · 6507 阅读 · 0 评论 -
MFC框架机制详细论述
1.1 Windows消息机制要点1.1.1 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle), 消息ID(Message ID), 和两个消息参数(wParam, lParam), 当窗口收到消息时系统就会调用此窗口过程来处理消息。(所以叫回调函数)1.1.2 消息类型 1. 系统定义消息(System-Defined Messages) 在SDK中事先定义好的消息,非用户定义的,其范围在[0x000原创 2021-12-09 20:30:35 · 960 阅读 · 0 评论 -
MFC框架结构简述
现在直接给出MFC程序执行顺序,但着重分析其运行机制和功能分析,其流程是“theApp全局对象定义->TestApp构造函数->WinMain函数”。在执行theApp对象的构造函数之前先执行CWinApp基类的构造函数,从而把我们自己创建的类和MFC类相关联起来了。文档应用程序中,都有五个类,部分类名和工程名相关联。在MFC程序有且仅有一个从应用程序类(CWinApp)派生的类,而且仅有一个该派生类的实例化对象每个窗口会有一个称为窗口过程的回调函数(WndProc)..原创 2021-12-09 20:24:42 · 907 阅读 · 0 评论 -
MFC的框架程序分析3
本文将剖析基于MFC的框架程序,探讨MFC框架程序的内部组织结构,MFC是微软为了简化程序员的开发工作而设计的一套c++类集合,利用这些类有效地帮助程序员完成windows应用程序开发。代码结构我们利用VS2008 IDE创建一个名为Test的工程,程序类型选择为单文档,其他默认不变,最终会生成一套代码,这套代码可以直接运行。在生成的单文档应用程序中,都有五个类,部分类名和工程名相关联。图1展示了IDE向导生成的代码结构示意图以及对应的类功能。 ...原创 2021-12-09 20:22:25 · 229 阅读 · 0 评论 -
MFC框架简介2
MFC框架简介一、MFC框架MFC库是开发Windows应用程序的C++接口。MFC提供了面向对象的框架,采用面向对象技术,将大部分的Windows API 封装到C++类中,以类成员函数的形式提供给程序开发人员调用。CWnd类是MFC中一个非常重要的类,它封装了与窗口相关的操作。在前面中,曾经有构建一个Windwos程序的几个部分:http://blog.163.com/zhoumhan_0351/blog/static/3995422720103401415721 MFC中的..原创 2021-12-09 20:19:09 · 392 阅读 · 0 评论 -
MFC框架1
第一点:类别型录网的搭建:类别型录网搭建的目的是为了实现所谓的"执行期类型识别",也就是在程序运行的时候识别出某个对象是否是某个类的实例(基类也可以)。这里还不是很明白为什么需要实现"执行期类型识别",这种技巧具体被应用在哪里。例如在MFC中CView继承于CWnd,那么可以进行这样的判断:CView view;bool result = view.IsKindOf(CWnd); // result == true如上,通过调用IsKindOf函数,可以判断出view对象是一个CWnd类原创 2021-12-09 20:16:23 · 786 阅读 · 0 评论 -
MFC中动态创建控件以及添加事件响应
本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考。具体实现方法如下:动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。一、创建动态控件: 为了对照,我们先来看一下静态控件的创建。 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。 静态控件不需要调用Create原创 2021-12-09 20:13:25 · 3678 阅读 · 2 评论 -
模态对话框的消息循环原理及分析笔记
1.模态对话框有自己的消息循环,而非模态对话框没有自己的消息循环,所以在异步线程里创建了一个非模态的窗体此窗体会一闪而过(无消息循环不能处理各种消息事件),而在本线程里创建则是共享本线程的消息循环不会闪退。2.本线程里创建模态对话框A后,A的消息循环活动而本线程(主UI线程)被阻塞。2.模态对话框在创建后,主程序的的消息循环是空的(除非对话框给主程序发送消息就另当别论了),就是与系统消息循环断开联系了,而进入了自己独有的一个消息循环。 然而非模态对话框在创建后立即返回,并且和主程序共用一个消息循环。原创 2021-12-06 22:07:37 · 1161 阅读 · 0 评论