火炬之光2_辅助工具 内存读写相关

一个共公类 Data.cs ,用于存放游戏的 信息,如人物属性,

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Diagnostics;
 4 using System.Linq;
 5 using System.Runtime.InteropServices;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace huojuzhiguang
10 {
11
12     public class Game
13     {
14         public static String gameName = "Torchlight2";  //游戏的进程名称
15         public static bool findGame = false;
16
17     }
18     public class Role
19     {
20         public static int Name_Addr;  //人物名称地址
21         public static int Level_Addr;  //等级地址
22         public static int Strength_Addr;  //力量
23         public static int Dexterity_Addr; //敏捷
24         public static int Wit_Addr;    //智力
25         public static int Tizhi_Addr;    //体质
26         public static int ShuXingDian_Addr;    //属性点
27         public static int JiNengDian_Addr;    //技能点
28         public static int Money_Addr;    //金币
29         public static int Move_Addr;    //移动速度
30
31     }
32     public class ZhuangBei
33     {
34         public static int Name_Addr;  //装备名称
35         public static int wlgj_Addr1;  //物理攻击1
36         public static int wlgj_Addr2;  //物理攻击2
37         public static int wlfy_Addr1;  //物理防御1
38         public static int wlfy_Addr2;  //物理防御2
39         public static int fmcs_Addr;  //附魔次数
40         public static int kongshu_Addr;  //孔数
41
42     }
43
44     public class Pet
45     {
46         public static int Level_Addr;  //宠物等级
47         public static int XueLiang_Addr;  //宠物血量
48         public static int MoFa_Addr;  //宠物魔法
49         public static int Jingyan_Addr;  //宠物经验
50         public static int Move_Addr;  //宠物经验
51     }
52 }

写一个共公方法 OperateMemory.cs ,减少窗体内的的代码

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Diagnostics;
  4 using System.Linq;
  5 using System.Runtime.CompilerServices;
  6 using System.Runtime.InteropServices;
  7 using System.Text;
  8 using System.Windows.Forms;
  9
 10 namespace huojuzhiguang
 11 {
 12     public class OperateMemory
 13     {
 14         /// <summary>
 15         /// 从指定内存中读取字节集数据
 16         /// </summary>
 17         /// <param name="hProcess">进程句柄</param>
 18         /// <param name="pvAddressRemote">内存地址</param>
 19         /// <param name="pvBufferLocal">数据存储变量</param>
 20         /// <param name="dwSize">长度</param>
 21         /// <param name="pdwNumBytesRead">读取长度</param>
 22
 23          #region 引入DLL
 24         private const uint PROCESS_ALL_ACCESS = 0x1f0fff;
 25         [DllImport("kernel32.dll")]
 26         private extern static IntPtr OpenProcess(uint dwDesiredAccess,int bInheritHandle,int dwProcessId);
 27
 28
 29         [DllImport("kernel32.dll")]
 30         private extern static bool ReadProcessMemory(IntPtr hProcess, UInt32 pvAddressRemote, int[] pvBufferLocal, UInt32 dwSize, Int32[] pdwNumBytesRead);
 31
 32         [DllImportAttribute("kernel32.dll", EntryPoint = "WriteProcessMemory")]
 33         private static extern int WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, int[] lpBuffer, int nSize, IntPtr lpNumberOfBytesWritten);
 34         [DllImportAttribute("kernel32.dll", EntryPoint = "WriteProcessMemory")]
 35         private static extern int WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, int lpBuffer, int nSize, IntPtr lpNumberOfBytesWritten);
 36
 37         #endregion
 38
 39         private static Process[] p = Process.GetProcessesByName(Game.gameName);  //读取游戏进程
 40         private static IntPtr handle = OpenProcess(0x1F0FFF, 0, p[0].Id);    //获取句柄权限
 41
 42         /// <summary>
 43         /// 判断游戏是否已运行
 44         /// </summary>
 45         /// <param name="gameName">程序进程名</param>
 46         /// <returns>false 未运行,true已运行</returns>
 47         public static Boolean findGame(String gameName)
 48         {
 49             if (p == null || p.Length < 1)
 50             {
 51                 return Game.findGame = false;
 52             }
 53             else
 54             {
 55                 return Game.findGame = true;
 56             }
 57
 58         }
 59
 60         /// <summary>
 61         /// 读取内存,int默认读取4个字节
 62         /// </summary>
 63         /// <param name="readAddr">读取地址</param>
 64         /// <returns></returns>
 65         public static Int32 readMemory(UInt32 readAddr)
 66         {
 67             int[] result = new int[1];
 68             int[] lpdw = new int[1];
 69             bool b = ReadProcessMemory(handle, readAddr, result, 4, lpdw);
 70             return result[0];
 71         }
 72
 73         /// <summary>
 74         /// 读取内存,数组为[基址,便宜地址]
 75         /// </summary>
 76         /// <param name="readAddr">读取地址</param>
 77         /// <returns></returns>
 78        public static Int32 readMemory(int[] readAddr)
 79        {
 80            int values = 0;
 81            for (int i = 0; i < readAddr.Length; i++)
 82            {
 83                values = readMemory((uint)(values + readAddr[i]));
 84            }
 85            return values;
 86        }
 87
 88         /// <summary>
 89         /// 读取内存,数组为[基址,便宜地址]
 90         /// </summary>
 91        /// <param name="readAddr">读取地址</param>
 92         /// <param name="addr">数值存放的逻辑地址</param>
 93         /// <returns></returns>
 94        public static Int32 readMemory(int[] readAddr,out int addr)
 95        {
 96            int values = 0;
 97            int temp=0;  //临时存放人物属性的逻辑地址
 98            for (int i = 0; i < readAddr.Length; i++)
 99            {
100                temp = values + readAddr[i];
101                values = readMemory((uint)(values + readAddr[i]));
102            }
103            addr = temp;
104            return values;
105        }
106
107         /// <summary>
108        ///  写入内存4字节
109         /// </summary>
110        /// <param name="writeAddr">写入地址</param>
111        /// <param name="writeNumber">写入数值</param>
112        public static void writeMemory(UInt32 writeAddr, UInt32 writeNumber)
113        {
114            Process[] p = Process.GetProcessesByName(Game.gameName);
115            IntPtr handle = OpenProcess(0x1F0FFF, 0, p[0].Id);
116            WriteProcessMemory(handle, (IntPtr)writeAddr, new int[] { Convert.ToInt32(writeNumber) }, 4, IntPtr.Zero);
117        }
118
119         /// <summary>
120        /// 写入内存,类型Byte,1字节
121         /// </summary>
122        /// <param name="writeAddr">写入地址</param>
123        /// <param name="writeNumber">写入数值</param>
124        public static void writeByte(UInt32 writeAddr, UInt32 writeNumber)
125        {
126            WriteProcessMemory(handle, (IntPtr)writeAddr, new int[] { Convert.ToInt32(writeNumber) }, 1, IntPtr.Zero);
127        }
128
129         /// <summary>
130         /// 读取文本
131         /// </summary>
132        /// <param name="readAddr">读取地址</param>
133        /// <param name="str_length">读取长度</param>
134        /// <returns>读取内存中的 文本内容,文本长度就是偶数,且2位字节表示一个汉字</returns>
135        public static string readText(int[] readAddr, int str_length)
136        {
137            str_length = str_length * 2;//Unicode每个字符占用2个字节
138            int nameAddr;  // 读取每个字节时,放入此临时变量
139            byte[] num_String = new byte[str_length]; //存放读取的内容
140            byte[] arr1 = new byte[str_length]; //存放整理后的内容
141            for (int i = 0; i < str_length; i++)
142            {
143                readMemory(readAddr, out nameAddr).ToString();//此处读取每个字节
144                num_String[i] = (byte)readMemory((uint)nameAddr + (uint)i);
145            }
146            for (int i = 0; i < num_String.Length; i++)
147            {
148                arr1[i] = num_String[i];
149                if (i > 0 && i % 2 == 1)
150                {
151                    swap(ref arr1[i - 1], ref arr1[i]);
152                }
153            }
154            return System.Text.Encoding.BigEndianUnicode.GetString(arr1);
155        }
156
157         /// <summary>
158        /// 读取float数值
159         /// </summary>
160        /// <param name="readAddr">读取地址</param>
161         /// <returns>/浮点类型的单精度值具有 4 个字节,所以此次数组下标没写成动态的</returns>
162        public static Int32 readMemoryFloat(UInt32 readAddr)
163        {
164            int[] result = new int[1];
165            int[] lpdw = new int[1];
166            bool b = ReadProcessMemory(handle, readAddr, result, 1, lpdw);
167            return result[0];
168        }
169
170         /// <summary>
171        /// 读取float数值
172         /// </summary>
173        /// <param name="readAddr">读取地址</param>
174        /// <param name="addr">数值存放的逻辑地址</param>
175         /// <returns>/浮点类型的单精度值具有 4 个字节,所以此次数组下标没写成动态的</returns>
176        public static float readMemoryFloat(int[] readAddr, out int addr)
177        {
178            int values = 0;
179            byte[] valuesF = new byte[4];
180            for (int i = 0; i < readAddr.Length - 1; i++)
181            {
182                values = readMemory((uint)(values + readAddr[i]));  //拿到最后偏移地址的上一次地址(后面与得到最后地址,而非数值)
183            }
184            for (int j = 0; j <= 3; j++)
185            {
186                valuesF[j] = (byte)readMemoryFloat((uint)(values + readAddr[readAddr.Length - 1] + j));
187            }
188            addr = values + readAddr[readAddr.Length - 1];
189            float result = BitConverter.ToSingle(valuesF, 0);
190            return result;
191
192        }
193         /// <summary>
194        /// 写入float数值
195         /// </summary>
196        /// <param name="writeAddr">读取地址</param>
197        /// <param name="value">写入的float数值</param>
198        public static void writeMemoryFloat(UInt32 writeAddr, float value)
199        {
200            byte[] byteArray = BitConverter.GetBytes(value);
201
202            for (int i = 0; i <= byteArray.Length-1; i++)
203            {
204                writeByte((uint)writeAddr + (uint)i, byteArray[i]);
205            }
206
207        }
208
209         //交换数组的两个元素
210        private static void swap(ref byte num1,ref byte num2)
211        {
212            byte temp;
213            temp = num1;
214            num1 = num2;
215            num2 = temp;
216        }
217     }
218 }

likehc

然后就是 窗体上的按钮 相应的 事件

  1 using System;
  2 using System.Collections;
  3 using System.Collections.Generic;
  4 using System.ComponentModel;
  5 using System.Data;
  6 using System.Diagnostics;
  7 using System.Drawing;
  8 using System.Linq;
  9 using System.Text;
 10 using System.Threading.Tasks;
 11 using System.Windows.Forms;
 12
 13 namespace huojuzhiguang
 14 {
 15     public partial class hjzg : Form
 16     {
 17         public hjzg()
 18         {
 19             InitializeComponent();
 20         }
 21
 22         public void btn_readData_Click(object sender, EventArgs e)
 23         {
 24             try
 25             {
 26                 lab_Role_Name.Text = OperateMemory.readText(new[] { 0x0289F22C, 0x34, 0x14, 0x5F0 }, 20);  //角色名称
 27                 lab_Role_SW.Text = (OperateMemory.readText(new[] { 0x0289F22C, 0x34, 0x14, 0x9985c }, 20)); //角色声望
 28                 txt_Role_Move.Text = OperateMemory.readMemoryFloat(new int[] { 0x0289F22C, 0x34, 0x14, 0x2A0 }, out Role.Move_Addr).ToString(); //角色奔跑速度
 29                 txt_Level.Text = OperateMemory.readMemory(new int[] { 0x0289F22C, 0x34, 0x14, 0x110 }, out Role.Level_Addr).ToString(); //等级
 30                 txt_Strength.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x0249F22C, 0x34, 0x14, 0x578 }, out Role.Strength_Addr).ToString();//力量
 31                 txt_Dexterity.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x0249F22C, 0x34, 0x14, 0x574 }, out Role.Dexterity_Addr).ToString();//敏捷
 32                 txt_Wit.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x0249F22C, 0x34, 0x14, 0x580 }, out Role.Wit_Addr).ToString();//智力
 33                 txt_Tizhi.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x0249F22C, 0x34, 0x14, 0x57C }, out Role.Tizhi_Addr).ToString();//体质
 34                 txt_ShuXingDian.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x0249F22C, 0x34, 0x14, 0x5A8 }, out Role.ShuXingDian_Addr).ToString();//属性点
 35                 txt_JingNengDian.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x0249F22C, 0x34, 0x14, 0x5AC }, out Role.JiNengDian_Addr).ToString();//技能点
 36                 txt_Money.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x0249F22C, 0x34, 0x14, 0x590 }, out Role.Money_Addr).ToString();//金币
 37
 38                 btn_write.Enabled = true;// 保存人物属性按钮
 39
 40             }
 41             catch (Exception)
 42             {
 43             }
 44
 45         }
 46
 47         private void btn_write_Click(object sender, EventArgs e)
 48         {
 49             try
 50             {
 51                 if (lab_Role_Name.Text.Length <= 0)
 52                 {
 53                     MessageBox.Show("游戏保存错误!");
 54                 }
 55
 56                 OperateMemory.writeMemory((uint)Role.Level_Addr, (uint)int.Parse(txt_Level.Text));
 57                 OperateMemory.writeMemory((uint)Role.Strength_Addr, (uint)int.Parse(txt_Strength.Text));
 58                 OperateMemory.writeMemory((uint)Role.Dexterity_Addr, (uint)int.Parse(txt_Dexterity.Text));
 59                 OperateMemory.writeMemory((uint)Role.Wit_Addr, (uint)int.Parse(txt_Wit.Text));
 60                 OperateMemory.writeMemory((uint)Role.Tizhi_Addr, (uint)int.Parse(txt_Tizhi.Text));
 61                 OperateMemory.writeMemory((uint)Role.ShuXingDian_Addr, (uint)int.Parse(txt_ShuXingDian.Text)); //属性点
 62                 OperateMemory.writeMemory((uint)Role.JiNengDian_Addr, (uint)int.Parse(txt_JingNengDian.Text)); //技能点
 63                 OperateMemory.writeMemory((uint)Role.Money_Addr, (uint)int.Parse(txt_Money.Text)); //金币
 64                 OperateMemory.writeMemoryFloat((uint)Role.Move_Addr, float.Parse(txt_Role_Move.Text));//角色奔跑速度
 65             }
 66             catch (Exception)
 67             {
 68             }
 69         }
 70
 71         private void timer_findGame_Tick(object sender, EventArgs e)
 72         {
 73             try
 74             {
 75                 if (OperateMemory.findGame(Game.gameName))
 76                 {
 77                     lab_State.Text = "游戏已运行!";
 78                     if (OperateMemory.readMemory(new int[] { 0x0289F22C, 0x34, 0x14, 0x110 }) >= 1)
 79                     {
 80                         txt_Level.Enabled = true;
 81                         txt_Strength.Enabled = true;
 82                         txt_Dexterity.Enabled = true;
 83                         txt_Wit.Enabled = true;
 84                         txt_Tizhi.Enabled = true;
 85                         txt_ShuXingDian.Enabled = true;
 86                         txt_JingNengDian.Enabled = true;
 87                         txt_Money.Enabled = true; //金币
 88                         txt_Role_Move.Enabled = true;
 89
 90                         btn_readData.Enabled = true;  //读取人物属性按钮
 91                     }
 92
 93                 }
 94                 else
 95                 {
 96                     lab_State.Text = "抱歉,游戏未运行!";
 97                     txt_Level.Text = "";
 98                     txt_Level.Enabled = false;
 99
100                     txt_Strength.Text = "";
101                     txt_Strength.Enabled = false;
102
103                     txt_Dexterity.Text = "";
104                     txt_Dexterity.Enabled = false;
105
106                     txt_Wit.Text = "";
107                     txt_Wit.Enabled = false;
108
109                     txt_Tizhi.Text = "";
110                     txt_Tizhi.Enabled = false;
111
112                     txt_ShuXingDian.Text = "";
113                     txt_ShuXingDian.Enabled = false;
114
115                     txt_JingNengDian.Text = "";
116                     txt_JingNengDian.Enabled = false;
117
118                     txt_Money.Text = "";
119                     txt_Money.Enabled = false;
120
121                     txt_Role_Move.Text= "";
122                     txt_Role_Move.Enabled = false;
123
124                     btn_readData.Enabled = false;  //读取人物属性
125                     btn_write.Enabled = false;  //保存人物属性
126
127                 }
128             }
129             catch (Exception ex)
130             {
131             }
132         }
133
134         private void btn_ReadZB_Click(object sender, EventArgs e)
135         {
136
137             try
138             {
139                 txt_ZBName.Text = "";
140                 txt_ZBName.Text = OperateMemory.readText(new[] { 0x00400000 + 0x03437E04, 0x18, 0x98, 0xA0 }, 20);
141                 if (txt_ZBName.Text.Length <= 0)
142                 {
143                     MessageBox.Show("请将物品放入附魔窗体内!","头上有小闪电");
144                     return;
145                 }
146                 txt_ZBwlgj.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x03437E04, 0x18, 0x98, 0x134 }, out ZhuangBei.wlgj_Addr1).ToString();//物理攻击1
147                 txt_ZBwlgj.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x03437E04, 0x18, 0x98, 0x138 }, out ZhuangBei.wlgj_Addr2).ToString();//物理攻击2
148
149                 txt_ZBwlfy.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x03437E04, 0x18, 0x98, 0x140 }, out ZhuangBei.wlfy_Addr1).ToString();//物理防御1
150                 txt_ZBwlfy.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x03437E04, 0x18, 0x98, 0x13C }, out ZhuangBei.wlfy_Addr2).ToString();//物理防御2
151
152                 txt_ZBfmcs.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x03437E04, 0x18, 0x98, 0x148 }, out ZhuangBei.fmcs_Addr).ToString();//附魔次数
153                 com_ZBks.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x03437E04, 0x18, 0x98, 0x1D4 }, out ZhuangBei.kongshu_Addr).ToString();//打孔数
154
155             }
156             catch (Exception ex)
157             {
158
159             }
160         }
161
162         private void btn_ZBSave_Click(object sender, EventArgs e)
163         {
164             try
165             {
166                 if (txt_ZBName.Text.Length <= 0)
167                 {
168                     MessageBox.Show("请将物品放入附魔窗体内!", "头上有小闪电");
169                     return;
170                 }
171                 OperateMemory.writeMemory((uint)ZhuangBei.wlgj_Addr1, (uint)int.Parse(txt_ZBwlgj.Text));//物理攻击1
172                 OperateMemory.writeMemory((uint)ZhuangBei.wlgj_Addr1, (uint)int.Parse(txt_ZBwlgj.Text));//物理攻击2
173
174                 OperateMemory.writeMemory((uint)ZhuangBei.wlfy_Addr1, (uint)int.Parse(txt_ZBwlfy.Text));//物理防御1
175                 OperateMemory.writeMemory((uint)ZhuangBei.wlfy_Addr2, (uint)int.Parse(txt_ZBwlfy.Text));//物理防御2
176
177                 OperateMemory.writeMemory((uint)ZhuangBei.fmcs_Addr, (uint)int.Parse(txt_ZBfmcs.Text));//附魔次数
178                 OperateMemory.writeMemory((uint)ZhuangBei.kongshu_Addr, (uint)int.Parse(com_ZBks.Text));//打孔数
179             }
180             catch (Exception)
181             {
182             }
183         }
184         private void btn_CWread_Click(object sender, EventArgs e)
185         {
186             try
187             {
188                 lab_Pet_Name.Text = OperateMemory.readText(new[] { 0x00400000 + 0x31C6674, 0x14, 0x3b5f0 }, 20);
189                 txt_CWLevel.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x31C6674, 0x14, 0x3b110 }, out Pet.Level_Addr).ToString(); //宠物等级
190                 txt_Pet_XueL.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x31C6674, 0x14, 0x3b564 }, out Pet.XueLiang_Addr).ToString(); //宠物血量
191                 txt_Pet_MF.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x31C6674, 0x14, 0x3b588 }, out Pet.MoFa_Addr).ToString(); //宠物魔法
192                 txt_CWJingyan.Text = OperateMemory.readMemory(new int[] { 0x00400000 + 0x31C6674, 0x14, 0x3b594 }, out Pet.Jingyan_Addr).ToString(); //宠物经验
193                 txt_Pet_Move.Text = OperateMemory.readMemoryFloat(new int[] { 0x00400000 + 0x31C6674, 0x14, 0x3b2a0 }, out Pet.Move_Addr).ToString(); //宠物移动速度
194             }
195             catch (Exception ex)
196             {
197
198             }
199         }
200
201         private void btn_CWsave_Click(object sender, EventArgs e)
202         {
203             try
204             {
205                 if (lab_Pet_Name.Text.Length <= 0)
206                 {
207                     MessageBox.Show("游戏保存错误!");
208                 }
209
210                 OperateMemory.writeMemory((uint)Pet.Level_Addr, (uint)int.Parse(txt_CWLevel.Text));//等级
211                 OperateMemory.writeMemory((uint)Pet.XueLiang_Addr, (uint)int.Parse(txt_Pet_XueL.Text));//血量
212                 OperateMemory.writeMemory((uint)Pet.MoFa_Addr, (uint)int.Parse(txt_Pet_MF.Text));//魔法
213                 OperateMemory.writeMemory((uint)Pet.Jingyan_Addr, (uint)int.Parse(txt_CWJingyan.Text));
214                 OperateMemory.writeMemoryFloat((uint)Pet.Move_Addr, float.Parse(txt_Pet_Move.Text));//角色奔跑速度
215             }
216             catch (Exception)
217             {
218             }
219         }
220
221     }
222 }

likehc

游戏修改截图  虐boss啦

时间: 2024-10-24 15:25:03

火炬之光2_辅助工具 内存读写相关的相关文章

PowerTool(杀毒辅助工具) V4.6 中文免费绿色版

软件名称: PowerTool(杀毒辅助工具)软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 968KB图片预览: 软件简介:目前版本主要功能:1. 所有进程的枚举(包括内核中隐藏的进程)2. 所有文件的枚举(包括内核中隐藏的文件)3. 进程中所有模块的枚举(包括内核中隐藏的模块)4. 进程的强制结束5. 进程中模块的强制卸载6. 模块被哪些进程加载的检索7. 查看文件/文件夹被占用的情况8. 可以Unlock占用文件

Windows开发中一些常用的辅助工具

经常有人问如何快速的定位和解决问题,很多时候答案就是借助工具, 记录个人Windows开发中个人常用的一些辅助工具. (1) Spy++ 相信windows开发中应该没人不知道这个工具, 我们常用这个工具查看窗口层次,跟踪窗口消息. (2) WinSpy 一个窗口相关的小工具,非常有用,可以帮我们快速查看和修改窗口属性.(这个工具是开源的, 拿来学习挺不错的) (3) Process Explorer 非常有用的工具,类似任务管理器,但是比任务管理器强大的多. 可以让我们查看查看每个进程的详细信

程序员必备简捷开发辅助工具总结

程序员必备简捷开发辅助工具总结 本文独家授权给stormzhang运营的公众号AndroidDeveloper,拒绝其他任何形式的转载. 写在前面: 工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率.Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马上开始~! 零:Notepad++ Notepad++ 程序员必备的文本编辑器,软件小巧高效,支持27种编程语言,通吃C,C++ ,Java ,C#, XML, HTML, PHP,JS

Python的扩展接口[2] -&gt; 动态链接库DLL[0] -&gt; 动态链接库及辅助工具

动态链接库 / Dynamic Link Library 目录 动态链接库简介 函数封装DLL 组件对象模型COM 如何判断.dll文件是COM还是DLL 辅助工具 1 动态链接库简介 / DLL Introduction 动态链接库(Dynamic Link Library, DLL),是微软在Windows操作系统中,实现共享函数库概念的一种方式,在Windows下,这些库函数的扩展名可以是.dll/.ocx(ActiveX)/.drv(旧式系统驱动程序),在Linux系统中常常是.so文件

大数据data开发有哪些好的辅助工具?

作为一个程序员开发工具好比是人的手和脚,只有把这些开发工具用好,才能做好一个产品的需求.大多使用SQL数据库存储/检索数据,如今很多情况下,它都不再能满足我们的需求.下面小编就介绍一些大数据data开发常用的辅助工具. 开源企业搜索平台:Solr 用Java编写,来自Apache Lucene项目.Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操

Java内存模型相关原则详解

在<Java内存模型(JMM)详解>一文中我们已经讲到了Java内存模型的基本结构以及相关操作和规则.而Java内存模型又是围绕着在并发过程中如何处理原子性.可见性以及有序性这三个特征来构建的.本篇文章就带大家了解一下相关概念.原则等内容. 原子性 原子性即一个操作或一系列是不可中断的.即使是在多个线程的情况下,操作一旦开始,就不会被其他线程干扰. 比如,对于一个静态变量int x两条线程同时对其赋值,线程A赋值为1,而线程B赋值为2,不管线程如何运行,最终x的值要么是1,要么是2,线程A和线

Rhythmk 学习 Hibernate 04 - Hibernate 辅助工具 之 JBoos Tool

1.安装JBoos Tool Help -> Install new Software 然后添加: http://download.jboss.org/jbosstools/updates/development http://download.jboss.org/jbosstools/updates/stable/ 稍等一刻,选择 Hibernate tool 下一步 ,完成后重启Eclipse即可. 2.项目配置文件生成: 2.1 新建一项目,项目右键生成相关配置 然后如图: 2.2 此处需

c++文件读写相关

在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fstream的内容: [java] view plaincopyprint? #include <fstream> ofstream         //文件写操作 内存写入存储设备 ifstream         //文件读操作,存储设备读区到内存中 fstream          //读写操作,对打开的文件可进

三个有用的SQL辅助工具

编写人:CC阿爸 2015-1-23 工欲善其事必先利其器,今天在这里,我想与大家一起分享三个有用的SQL辅助工具.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 相信大家在平时的开发项目中,肯定遇到过,对表或表的字段记录清的问题,如果SQL有智能提示功能岂不妙哉,不用担心,早有人帮我们开发出了此类工具,在这个互联网的时代,只有想不到的,没有做不到的.这不在SQL 2008就引进了智能提示功能,但微软做的又不够好,提示速度超慢不说,还不能进行格式操作,在VS中都有代码的格式化功能,不知为何