句柄

Windows线程+进程通信

丶灬走出姿态 提交于 2020-03-01 08:15:48
一 Windows线程进程 1)定义 按照MS的定义, Windows中的进程简单地说就是一个内存中的可执行程序, 提供程序运行的各种资源. 进程拥有虚拟的地址空间, 可执行代码, 数据, 对象句柄集, 环境变量, 基础优先级, 以及最大最小工作集. Windows中的线程是系统处理机调度的基本单位. 线程可以执行进程中的任意代码, 包括正在被其他线程执行的代码. 进程中的所有线程共享进程的虚拟地址空间和系统资源. 每个线程拥有自己的例外处理过程, 一个调度优先级以及线程上下文数据结构. 线程上下文数据结构包含寄存器值, 核心堆栈, 用户堆栈和线程环境块. 2) 如下图: 3)线程与进程的关系 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。 在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。 4) 进程和线程的区别   (1)、进程是资源管理的基本单位,它拥有自己的地址空间和各种资源,例如内存空间、外部设备;线程只是处理机调度的基本单位,它只和其他线程一起共享资源,但自己没有任何资源。   (2)、以进程为单位进行处理机切换和调度时,由于涉及到资源转移以及现场保护等问题,将导致处理机切换时间变长,资源利用率降低

AutoCAD_ ID 、指针、句柄和 ads_name的区别

不想你离开。 提交于 2020-02-29 22:20:07
访问实体的特性必须通过对象指针,但是一旦你获得了实体的ID、句柄或者ads_name,都能通过ID作中介而获得对象的指针。其中ID是一个桥梁。句柄是Windows编程一个常用的概念,在ObjectARX编程中一般指AcDbHandle类(也可指Windows编程的界面元素),该类封装了一个64位整形标识符,随DWG文件一同保存。ads_name则是在ADS编程中出现的一个概念,其实际上是一个二维数组,数组元素类型为长整型,在与用户交互的函数中经常用到。 ID、句柄和 ads_name 具有各自的 特点 : (1) AcDbObjectId:当dwg图形被打开后,数据库中的实体对象都会在内存中对应一个唯一的id(AcDbObjectId),AcDbObjectId也是与对象相关联的唯一标识符.AcDbObjectId仅存在于其所存在的数据库从内存中产生到数据库被删除之间.如果操作多个dwg,AcDbObjectId在多个数据库之间都是唯一的. (2) AcDbHandle:dwg文件中每一个实体都有一个唯一的标识符,用AcDbHandle表示,在一个AutoCAD中,不能保证每个实体的句柄都唯一。在autoCAD的两个Dwg中同一实体的句柄是相同的。实体的AcDbHandle可以随dwg文件被保存,所以即使dwg未被cad打开,也可以根据句柄搜索dwg文件获取对象信息. (3)

addEventListener与attachEvent

坚强是说给别人听的谎言 提交于 2020-02-29 08:45:34
一、attachEvent和addEventListener (一)addEventListener addEventListener() 方法用于向指定元素添加事件句柄。使用 removeEventListener() 方法来移除 addEventListener() 方法添加的事件句柄。 语法:element.addEventListener(event, function, useCapture) event (必须)字符串,指定事件名。注意: 不要使用 “on” 前缀。 例如,使用 “click” ,而不是使用 “onclick”。 function (必须)指定要事件触发时执行的函数。当事件对象会作为第一个参数传入函数。 事件对象的类型取决于特定的事件。例如, “click” 事件属于 MouseEvent(鼠标事件) 对象。 useCapture (可选)布尔值,指定事件是否在捕获或冒泡阶段执行。【true:事件句柄在捕获阶段执行; false:默认,事件句柄在冒泡阶段执行】 可以添加许多事件,添加的事件不会覆盖已存在的事件。 示例:给button绑定两个点击事件,点击按钮时,两个事件都是执行,执行顺序为:myFunction 、someOtherFunction ,不会覆盖。(当然也可以绑定不同的事件) var obj = document

php curl模拟post请求提交数据例子总结

一笑奈何 提交于 2020-02-28 01:26:22
php curl模拟post请求提交数据例子总结 [导读] 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考。注意:curl函数在php中默认是不被支持的,如果需要使用curl函数我们需在改一改 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考。 注意:curl函数在php中默认是不被支持的,如果需要使用curl函数我们需在改一改你的php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 例1 代码如下 复制代码 <?php $uri = "http://tanteng.duapp.com/test.php"; // 参数数组 $data = array ( 'name' => 'tanteng' // 'pass word ' => 'password' ); $ch = curl_init (); // print_r($ch); curl_setopt ( $ch, CURLOPT_URL, $uri ); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl

【转】 自动化测试基础篇--Selenium多窗口、句柄问题

半腔热情 提交于 2020-02-26 14:28:00
https://www.cnblogs.com/sanzangTst/p/7680402.html 二、获取当前窗口句柄 1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。 2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。 3.获取当前页面的句柄:browser.current_window_handle 4.执行结果 三、获取所有窗口句柄 1、获取所有窗口句柄:brows.window_handles 2、执行结果 四、切换句柄 方法一: 1.循环判断是否与首页句柄相等; 2.如果不等,说明是新页面的句柄; 3.获取的新页面句柄后,可以切换到新打开的页面上; 4.打印新页面的title,看是否切换成功。 执行结果 方法二: 直接获取all_h这个list数据里面第二个hand的值:all_h[i] 执行结果 五、关闭新窗口,返回到原来的窗口 1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证; 2.验证完后切关闭新窗口; 3.切回句柄到首页; 4.打印当前页面的句柄,看是否切换到首页了。 执行结果 六、参考代码 #!/usr/bin/env python # -*- coding: utf-8 -*-

WinAPI【远程注入】hook注入 Delphi 实例一

旧时模样 提交于 2020-02-26 14:00:12
(okwary) 小叹的学习园地 线程注入实例: 我们知道在NT及以上操作系统提供了一个函数VirtualAllocEx,利用这个函数我们可以在其它进程中申请一块内存,其定义如下: function VirtualAllocEx( //在其它进程中申请一块内存 hProcess: THandle;// hProcess为要申请内存的进程的句柄 lpAddress: Pointer;// lPAddress为地址指针,指向需要分配的某地址范围内的页面的起始地址,可以设为nil,由系统确定分配空间的地址. dwSize:dword; //分配内存区域的大小. flAllocationType: DWORD; //flAllocationType为分配类型,在这儿我们设为MEM_COMMIT. flProtect: DWORD//flProtect为新分配内存的存取保护类型,可设为PAGE_EXECUTE_READWRITE来定义其为可执行可读写. ): Pointer; stdcall;//函数执行成功后,将会返回所分配页面的基址. 其中,可以用如下方法得到指定的窗口所属的进程的进程句柄. Function GetProcessHandle: THandle; var WndHandle, PID: THandle; begin WndHandle := FindWindow(nil,

final关键字的使用(Thinking In Java 读书笔记)

怎甘沉沦 提交于 2020-02-25 23:56:47
final关键字最基本的含义就是表明“这个东西不能改变”。之所以这样,可能是考虑到两方面的因素:设计或效率。 final关键字可应用在三种场合: 数据、方法以及类 1. final数据 表明某个数据是“常数”,永远不会改变。使用final定义,编译器可以直接将常数值封装到需要的计算过程里。也就是说,计算可以在编译期前执行,从而节省运行时的开销。在JAVA中,这些常数必须属于基本数据类型。并且在对这样的一个常数进行定义的时候,必须给出一个值。 而当对象句柄使用final时,必须将句柄初始化到一个具体的对象,而且永远不能将句柄指向另一个对象。然而,对象本身可以修改。 空白final Java允许创建“空白final”。即不赋初始值,但空白final必须在实际使用前得到正确的初始化。如果将赋初始值的语句放在不同的构造器中,则final字段可以随着调用不同的构造器而获得不同的初始值。但一旦确定,值将无法改变。 final数据无法更改: { final int i=5; i=6; } 以上语句会在编译期间出错: :cannot assign a value to final variable i=6; final自变量 JAVA允许将自变量设成final属性。即在方法的变量列表中进行声明。这样意味着在一个方法内部,不能改变自变量句柄所指向的东西。 2. final 方法

读取“记住密码”账号记住的密码

别说谁变了你拦得住时间么 提交于 2020-02-25 21:46:58
目录 1 思路和适用条件 2 软件需求 2.1 SPY++ 2.2 Python和pywin32库 3 读取密码 3.1 查找密码输入文本框句柄 3.2 读取文本框的内容 参考 1 思路和适用条件 本文所述的方法实际是利用部分软件记住密码时 没有加入保护机制 的漏洞。记住的密码在界面上显示是一排星号,但是这部分密码实际上是以明码的格式存储在控件内。这种方法对于大厂开发的保护机制做的很完善的软件并不适用,但是对于一些不规范开发的软件很有效。 适用情况如下: 软件输入密码界面使用Windows的文本输入控件,而不是独立开发的第三方控件。 记住的密码采用明码存储,而不是加密后的数值(例如MD5)。如果你知道怎么从加密后的密码译回去也可(笑)。 整体思路如下: 找到输入密码的文本框,获取句柄。 读取文本框内数据值。 2 软件需求 2.1 SPY++ Windows电脑安装了Visual Studio就自带了SPY++,对于Win10可以在Cortana搜索“SPY++”,或者在开始界面直接找到。如果电脑上没有安装的话,可以直接在度娘处找到安装包。 我的电脑上有 SPY++ 和*SPY++(64位)*两个程序,功能上是一样的,不过64位的程序还是建议用64位的SPY++。我实际使用的时候发现,也有部分程序只有在32位的SPY++下才能正常工作。 2.2 Python和pywin32库

【2019秋冬】【面经】JVM

血红的双手。 提交于 2020-02-25 01:18:29
Java运行时数据区/内存区域 程序计数器 虚拟机栈 基本数据类型和对象引用 Java堆 对象实例及数组 本地方法栈 native方法 方法区 被虚拟机加载的类,静态变量,常量,编译后代码 判断常量是废弃常量 看这个常量是否还被引用 判断类是无用类 1.该类不存在任何实例 2.该类的类加载器已经被回收 3.无法通过反射的方法调用该类 垃圾收集算法,特点 1.标记清除 常用于老年代,把要回收的进行标记,标记完成后统一回收 2.标记整理 用于老年代,把存活的统一向一边移动,按边界清除回收 3.复制算法 分两半,当一半快满时,把存活的移动至另一半 4.分代算法 把Java堆分为新生代和老年代 1/3 2/3 新生代按8:1:1的Eden和Survivor,每次使用一个Eden和一个Survivor,当快满时,把所有存活的放入另一块Survivor,另外两块清空 新生代没更新一次就+1,当达到15时自动转化为老年代 HotSpot为什么要分老年代新生代 对不同的代可以采用不同的回收算法,效率更高 常见垃圾收集器 Serial 单线程,新生代 ParNew 多线程,新生代,和CMS一起用 Parallel Scavenge 多线程,新生代,考虑吞吐量 Serial Old 单线程,老生代 Parallel Old 多线程,老生代 CMS 老生代,初始标记,并发标记,重新标记,并发清理 G1

vue 可拖拽可缩放 vue-draggable-resizable 组件常用总结

若如初见. 提交于 2020-02-24 11:14:52
特征 没有依赖 使用可拖动,可调整大小或两者兼备 定义用于调整大小的句柄 限制大小和移动到父元素或自定义选择器 将元素捕捉到自定义网格 将拖动限制为垂直或水平轴 保持纵横比 启用触控功能 使用自己的样式 为句柄提供自己的样式 安装和基本用法 npm install --save vue-draggable-resizable 全局注册组件main.js中写入: import Vue from 'vue' import VueDraggableResizable from 'vue-draggable-resizable' // 可选择导入默认样式 import 'vue-draggable-resizable/dist/VueDraggableResizable.css' Vue.component('vue-draggable-resizable', VueDraggableResizable) 局部注册:在使用的组件里引用 import VueDraggableResizable from 'vue-draggable-resizable' import 'vue-draggable-resizable/dist/VueDraggableResizable.css' 常用属性总结 :w 默认宽度 :h 默认高度 :x="50" 默认水平坐标 注意相对元素是谁 :y="50"