VB读取线程、句柄及写入内存的API代码实例

本文所述实例为VB读取内存、线程及句柄的一个API,对涉及系统底层操作的VB编程有一定的帮助,需要的读者可以参考使用。这个API可获取到线程ID,写内存,包括进程句柄,ByVal 内存区地址,数据,总长度,已经完成长度,读取进程,包括进程句柄,ByVal 内存区地址,读取来的数据存放处,要读取的长度,已经读取的长度,内存分配(进程柄,地址[好像只要丢个0进去就行],长度,权限1[MEM_COMMIT],权限2[PAGE_READWRITE])返回:分配到的内存起始地址等功能。

具体实现代码如下:

Attribute VB_Name = "API"
Option Explicit
Public Declare Function GetDesktopWindow Lib "User32.DLL" () As Long
Public Declare Function FindWindow Lib "User32.DLL" Alias "FindWindowA" (ByVal ClassName As String, ByVal Caption As String) As Long
Public Declare Function GetWindow Lib "User32.DLL" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowText Lib "User32.DLL" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Const GW_CHILD = (5)
Public Const GW_HWNDNEXT = (2)

Public Declare Function GetWindowThreadProcessId Lib "User32.DLL" (ByVal hwnd As Long, ProcessId As Long) As Long
'取找线程ID(句柄,返回的线程ID)

Public Declare Function OpenProcess Lib "Kernel32.DLL" (ByVal 操作权限 As Long, ByVal 继承句柄 As Long, ByVal 线程ID As Long) As Long
Public Declare Function ReadProcessMemory Lib "Kernel32.DLL" (ByVal 进程柄 As Long, ByVal 内存位置 As Long, 缓冲区 As Any, ByVal 长度 As Long, lpNumberOfBytesWritten As Long) As Long
'读取进程(进程句柄,ByVal 内存区地址,读取来的数据存放处,要读取的长度,已经读取的长度[0])
Public Declare Function WriteProcessMemory Lib "Kernel32.DLL" (ByVal 进程柄 As Long, 内存位置 As Any, 缓冲区 As Any, ByVal 长度 As Long, lpNumberOfBytesWritten As Long) As Long
'写内存(进程句柄,ByVal 内存区地址,数据,总长度,已经完成长度[0])
Public Declare Function CloseHandle Lib "Kernel32.DLL" (ByVal 进程柄 As Long) As Long
'释放(进程句柄)'不释放会出错

Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const RRAD_WRITE = &H1F0FFF
Public Const PROCESS_VM_OPERATION = &H8&
Public Const 读取 = &H10&
Public Const 写入 = &H20&

'---------变量转换API
Public Declare Sub MOV Lib "Kernel32.DLL" Alias "RtlMoveMemory" (变量1 As Any, 变量2 As Any, ByVal 长度 As Long)

'---------内存保护分配释放
Public Declare Function VPE Lib "Kernel32.DLL" Alias "VirtualProtectEx" (ByVal 进程柄 As Long, 地址 As Any, ByVal 长度 As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Public Declare Function VAE Lib "Kernel32.DLL" Alias "VirtualAllocEx" (ByVal 进程柄 As Long, ByVal 地址 As Long, ByVal 长度 As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
'内存分配(进程柄,地址[好像只要丢个0进去就行],长度,权限1[MEM_COMMIT],权限2[PAGE_READWRITE])返回:分配到的内存起始地址
Public Declare Function VFE Lib "Kernel32.DLL" Alias "VirtualFreeEx" (ByVal 进程柄 As Long, ByVal 地址 As Long, ByVal 长度 As Long, ByVal 释放类型 As Long) As Long

Public Const MEM_COMMIT = &H1000
Public Const PAGE_READWRITE = &H4
Public Const STILL_ACTIVE = &H103&
Public Const INFINITE = &HFFFF

'---------取模块函数位置API
Public Declare Function GetModuleHandle Lib "Kernel32.DLL" Alias "GetModuleHandleA" (ByVal ModuleName As String) As Long
Public Declare Function LoadLibrary Lib "Kernel32.DLL" Alias "LoadLibraryA" (ByVal ModuleName As String) As Long
Public Declare Function GetProcAddress Lib "Kernel32.DLL" (ByVal hModule As Long, ByVal ProcName As String) As Long

Public Declare Function CreateRemoteThread Lib "Kernel32.DLL" (ByVal 进程柄 As Long, lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Public Declare Function GetTickCount Lib "kernel32" () As Long
(0)

相关推荐

  • VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法

    通常用VB 写的程序在32位系统上可以正常的运行,但到了64位系统中虽然可以运行但是无法修改OEM信息.经过查找原因可以发现,当我们在访问文件夹"SYSTEM32"的时候系统会自动转向到文件夹"SYSWOW64"下,当我们在访问某些注册表键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面. 先来谈谈文件系统的转向,查找了一些资料,并没有VB相关的资料,但是可以查到2个相关函数:Wow64DisableWow64FsRedirect

  • VB调用Word拼写检查功能实例

    众所周知,Word有自带的拼写检查功能.VB中想要实现调用 Word 拼写检查功能其实很简单就可以实现,方法是先建立word对象,然后把需要检查的字符串放到 WORD中,调用word拼写检查,再取出返回值,最后关闭对象. 各个步骤的具体实现代码如下所示: Function CheckSpell(IncorrectText as string) as string Dim Word As Object, retText$ On Error Resume Next '建立WORD对象并打开 Set

  • VB实现屏蔽文本框右键菜单的复制、粘贴等功能的方法

    本文实例讲述了VB屏蔽文本框中的右键菜单.复制.粘贴等功能的实现方法.该功能就是禁止文本框的右键功能,造成点击鼠标右键无效.是非常常见的一类实用功能. 具体的功能模块代码如下: '========================================================== '| 模 块 名 | TextBoxDisableAbility '| 说 明 | 禁止文本框的功能 '=================================================

  • VB使用XMLHTTP实现Post与Get的方法

    本文所述为visual basic6.0的一个模块方法,是使用XMLHTTP实现Post与Get功能,虽然是一个老代码,但是可以替代Inet控件,实现数据通讯.很值得学习借鉴一下. 主要模块代码如下: '========================================================== '| 模 块 名 | XMLHTTP '| 说 明 | 替代Inet控件,实现数据通讯 '============================================

  • VB实现的倒计时类代码详解

    本文所述为用VB制作倒计时程序用到的一个Module类代码,是基于控制台的倒计时程序,可供VB初学者或者VB爱好者参考学习,当然读者也可以将其拷贝代码到VB工程里面直接使用,不过需要自己创建相关的代码,对于初学者来说,也是很容易看懂的一段代码. 具体功能代码如下: Module Module1 Sub Main() Dim a As Date Dim h, m, s As Integer Dim n, i As Long Dim x, z As Long Dim y As Long Consol

  • VB6实现连接Access数据库的ADODB代码实现方法

    本文实例讲述了使用ADODB.Connection连接access数据库的方法,驱动类型版本为:Microsoft.Jet.OLEDB.4.0.在VB的数据库操作中,连接数据库是第一步,也是最基本的,本文所述的这个例子,对于初学者学习如何在VB中连接Access数据库有着很好的借鉴参考价值. 具体实现代码如下: VERSION 5.00 Begin VB.Form 操作数据库 Caption = "VB操作数据库" ClientHeight = 3645 ClientLeft = 49

  • VB使用shell函数打开外部exe程序的实现方法

    本文实例主要实现了VB调用外部exe程序来运行的功能,这里主要是使用shell函数来执行,shell函数主要用来打开一个外部的exe可执行文件,例如,在sub模块内:Shell "notepad", vbNormalFocus,代表以正常模式运行记事本程序,vbNormalFocus是shell的参数,意思是正常模式,当然它还有vbMaximizedFocus最大化模式,vbMinimizedFocus最小化模式,vbHide隐藏模式等多种运行方式可选择. 具体的代码例子及注释如下:

  • VB的TextBox文本框实现垂直居中显示的方法

    本文实例代码可以实现让VB的TextBox文本框垂直居中显示效果.此处需要注意:Form_Load()窗体代码中的多行属性设置必须为真,即Text1.MultiLine = True,该属性为只读属性,请在设计时修改,换行会被之后的代码屏蔽,不想屏蔽可自行修改,调用此函数就好了. 具体的功能代码如下: '================================================================================ '| 模 块 名 | TextB

  • VB实现鼠标绘图实例代码

    本文所述为VB实现鼠标绘图的实例,该实例实现线条颜色和线宽可自设,当按下鼠标按键时绘图开始并记录最初的起点,如果不是处在绘图状态则退出该过程,如果处在绘图状态则从起点到目前鼠标所在点绘制直线,然后将当前鼠标所在点作为新的起点,当释放鼠标按键时绘图结束. 具体的功能代码如下: VERSION 5.00 Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" Begin VB.For

  • VB读取线程、句柄及写入内存的API代码实例

    本文所述实例为VB读取内存.线程及句柄的一个API,对涉及系统底层操作的VB编程有一定的帮助,需要的读者可以参考使用.这个API可获取到线程ID,写内存,包括进程句柄,ByVal 内存区地址,数据,总长度,已经完成长度,读取进程,包括进程句柄,ByVal 内存区地址,读取来的数据存放处,要读取的长度,已经读取的长度,内存分配(进程柄,地址[好像只要丢个0进去就行],长度,权限1[MEM_COMMIT],权限2[PAGE_READWRITE])返回:分配到的内存起始地址等功能. 具体实现代码如下:

  • Java读取txt文件和写入txt文件的简单实例

    写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂! package edu.thu.keyword.test; import java.io.File; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream;

  • Ruby中用线程实现经典的生产者消费者问题代码实例

    示例代码: 复制代码 代码如下: require "thread" puts "ProAndCon"    queue = Queue.new    #用队列Queue实现线程同步     producer = Thread.new do     10.times do |i|          sleep rand(i) # 让线程睡眠一段时间          queue << i          puts "#{i} produced&

  • PHP按行读取、处理较大CSV文件的代码实例

    对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象. 为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的. 下面这个函数是读取CSV文件中指定的某几行数据: 复制代码 代码如下: /** * csv_get_lines 读取CSV文件中的某几行数据 * @param $csvfile csv文件路径 * @param $lines 读取行数 * @param $offset 起始行数 * @return array * */functi

  • 线程和进程的区别及Python代码实例

    在程序猿的世界中,线程和进程是一个很重要的概念,很多人经常弄不清线程和进程到底是什么,有什么区别,本文试图来解释一下线程和进程.首先来看一下概念: 进程(英语:process),是计算机中已运行程序的实体.进程为曾经是分时系统的基本运作单位.在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体:在面向线程设计的系统(如当代多数操作系统.Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器.程序本身只是指令.数据及其组织形式的

  • c++实现逐行读取配置文件写入内存的示例

    不解析配置内容,只读取文件内容,剪去注释和首尾空格后写入缓存: vector<string> 中.供其他方法使用.代码是在做一个MFC小工具时写的. ReadProtocol.h 复制代码 代码如下: /*** 从文件中 读取 protocol 的内容 写入缓存* 供外部方法使用* Alex Liu, 2014*/ #pragma once #include <vector>#include <map>#include <list>#include <

  • Python从数据库读取大量数据批量写入文件的方法

    使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将数据加载进内存,这时我们需要将数据进行预处理,分批次加载进内存. 下面是代码作用是将数据从数据库读取出来分批次写入txt文本文件,方便我们做数据的预处理和训练机器学习模型. #%% import pymssql as MySQLdb #这里是python3 如果你是python2.x的话,import MySQLdb #数据库连接属性 hst = '188.10.34.18' usr = 'sa' passwd = 'p@ssw0rd'

  • php从memcache读取数据再批量写入mysql的方法

    本文实例讲述了php从memcache读取数据再批量写入mysql的方法.分享给大家供大家参考.具体分析如下: 用 Memcache 可以缓解 php和数据库压力下面代码是解决高负载下数据库写入瓶颈问题,遇到最实用的:写入ip pv uv的时候,用户达到每分钟几万访问量,要记录这些数据,实时写入数据库必定奔溃. 用以下技术就能解决,还有如用户注册,同一时间断内,大量用户注册,可以缓存后一次性写入到数据库,代码如下: 复制代码 代码如下: public function cldata(){ $me

  • C#逐行分元素读取记事本数据并写入数据库的方法

    本文实例讲述了C#逐行分元素读取记事本数据并写入数据库的方法.分享给大家供大家参考.具体分析如下: 其实这里最关键的一个方法是 StreamReader类里的 ReadLine();这个方法可以逐行读取txt流里面的数据.写了个简单的demo,已经加上了详细的注释说明. ok,好了,不废话,下面直接上代码 复制代码 代码如下: public void InputData()  {      DataTable dt = new DataTable();      string strFilePa

  • java读取文件和写入文件的方式(简单实例)

    Java代码 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读

随机推荐