十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这个程序是你写的吗,如果不是,那你没办法做,如果是,你就在窗口模式的那个控件的changed事件中,写入文件即可。
创新互联自2013年创立以来,先为尼河口等服务建站,尼河口等地企业,进行企业商务咨询服务。为尼河口企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
无法从地址读取数值,建议你换一个更大内存的内存条就可以正常使用了。
先在外面定义一个全局变量dim isWindows as int16=0
以下是你按下窗口模式的按钮代码:
if isWindows=0 then
isWindows=1
else
isWindows=0
end if
Dim sw As StreamWriter = New StreamWriter("你的txt文件路径", True)
sw.WriteLine(isWindows)
sw.Close()
这个东西呢,现在的动能来看,需要的核心就这几部分
1、进程列表获取,VB6中都是用API,可是.NET里不用了。
2、进程操作权限的提升,修改了VB6的一些API声明来实现的。
3、进程内存的读写,也是修改了一些VB6的API实现的。
4、用BYTE结构存取2进制文件内容以获取配置。
5、一些进制的转换。
要陪媳妇去了,所以这篇写最简单的一个:BYTE数组与INTEGER类型的转换。
同志们可能要说了,这个是啥,还用你写。。。呵呵。。反正我是不知道.NET里面转换的方法,另外用分字节转化的办法代码太多,也懒得写。再就是公开一下这个API的使用方法,在网上找的头大手疼也没找到。
把它帖在这里,.NET2005下测试通过。
Private Declare Sub CopyMemoryToArr Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination() As Byte, ByRef Source As Integer, ByVal Length As Integer)
Private Declare Sub CopyMemoryToDec Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Int32, ByVal Source() As Byte, ByVal Length As Integer)
嘿嘿,看着眼熟吧,实际上就是VB6里咱们可爱的CopyMemory。。。不过因为用途不同,所以出现了2个定义方式,我弄了半天,还是没能写成一种定义形式。
写成函数:
Public Function HexArr2Dec(ByVal ByteArr() As Byte) As Integer
Dim Dec As Integer
CopyMemoryToDec(Dec, ByteArr, 4)
Return Dec
End Function
Public Function Dec2HexArr(ByVal Dec As Integer) As Byte()
Dim mTmpArr(3) As Byte
CopyMemoryToArr(mTmpArr, Dec, 4)
Return mTmpArr
End Function
调用方法:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim byteArr(3) As Byte, intnum As Integer = 511
byteArr = Dec2HexArr(intnum)
Debug.Print(byteArr(0) " " byteArr(1) " " byteArr(2) " " byteArr(3))
MsgBox(HexArr2Dec(byteArr))
End Sub
ok了,就这些啊。。回头看看这个定义,有几个有趣的地方
CopyMemoryToArr 中 ByVal Destination() As Byte 和 ByRef Source As Integer
CopyMemoryToDec 中 ByRef Destination As Int32 和 ByVal Source() As Byte
以往VB6里面,我们(至少是我)要像RtlMoveMemory函数传递值的时候,是这样定义的
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
在.NET里这个ANY被INTPTR代替了,但是在某些操作数组的API中,例如ReadProcessMemory、WriteProcessMemory等,写成INTPTR很难成功调用,我们就可以修改定义为XXXX() As Byte。还有一个有趣的地方,API里面传递数值时,一般Byval来做,可是上面,却定义为ByRef Source As Integer和ByRef Destination As Int32。。(懒啊我,没有统一定义,INT32和INTEGER一样吧)
总结一下:
若,VB6的API声明中参数为ANY则:
1、当需要向API内传递数组的指针时,将VB6声明修改为ByVal xxxx() As Byte (必须为BYVAL)
2、当需要向API内传递一个被其操作的数据时,将VB6声明修改为ByRef Source As (Integer)
3、仅传递数据时,可声明为ByRef XXXX As IntPtr(Int32,Integer)
另举2例:
Private Declare Function ReadProcessMemory Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpBaseAddress As Integer, _
ByVal lpBuffer() As Byte, _
ByVal nSize As Integer, _
ByRef lpNumberOfBytesWritten As Integer) As Integer
Private Declare Function WriteProcessMemory Lib "kernel32" ( _
ByVal hProcess As Int32, _
ByVal lpBaseAddress As Int32, _
ByVal lpBuffer() As Byte, _
ByVal nSize As Int32, _
ByRef lpNumberOfBytesWritten As Int32) As Integer
以上2声明在VS.NET 2005环境测试通过。其中Int32和Integer可互相替换。
sQueryString是SQL(增删查改)语句
public
Boolean
ExecSQL(string
sQueryString)
{
SqlConnection
con
=
new
SqlConnection(ConfigurationManager.AppSettings["conStr"]);
con.Open();
SqlCommand
dbCommand
=
new
SqlCommand(sQueryString,
con);
try
{
dbCommand.ExecuteNonQuery();
con.Close();
}
catch
{
con.Close();
return
false;
}
return
true;
}
}
建立一个类,明自己取,然后调用就是了
例如:
类
BC=NEW
类();
STRING
ist="INSERT
INTO
XX(1,2,3)VALUES(A,B,C)";
BC.ExecSQL(ist);
就可以了
完美存档...用修改器改掉不就完美了嘛...
这是vbvan修改器的地址
这是凉宫的全功能修改器地址