登录
首页 » C# » Hpsoctk例子(int2e-HPSocket.Net-develop.zip)

Hpsoctk例子(int2e-HPSocket.Net-develop.zip)

于 2020-04-30 发布
0 186
下载积分: 1 下载次数: 1

代码说明:

Hpsoctk例子(int2e-HPSocket.Net-develop.zip)

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • c# 通过int长度判断当前系统是64位还是32位
    c# 通过int长度判断当前系统是64位还是32位
    2014-01-27下载
    积分:1
  • jsonp服务端例子代码
    jsonp服务端例子代码
    2015-05-27下载
    积分:1
  • combobox 绑定多列 例子
    combobox 绑定多列 例子
    2015-06-12下载
    积分:1
  • C#简单音乐播放器
    播放器填加了很多更好用的功能,播放列表的功能更充足(查看歌曲详情、歌曲搜索、歌曲删除等),同时也加上了Windows7任务栏的控制按钮,加入了播放模式的选择,专辑封面的显示等
    2019-11-08下载
    积分:1
  • C# 文本编辑器 例子(richTextBox富文本)
    可以打开文本,并且不会出现乱码
    2015-04-20下载
    积分:1
  • 企业招聘信息管理系统(C# winform源码)
    企业招聘信息管理系统 C# winform,新手级示例下载
    2017-11-22下载
    积分:1
  • <赞>C#程序开发范例宝典(随书完整源码下载),非常经典
    第1章 窗体与界面设计 1.1 菜单应用实例 实例001 带历史信息的菜单 实例002 菜单动态合并 实例003 像开始菜单一样漂亮的菜单 实例004 任务栏托盘菜单 实例005 可以拉伸的菜单界面 实例006 级联菜单 1.2 工具栏设计 实例007 带背景的工具栏 实例008 浮动工具栏 实例009 带下拉菜单的工具栏 实例010 具有提示功能的工具栏 1.3 状态栏设计 实例011 在状态栏中显示检查框 实例012 带进度条的状态栏 实例013 状态栏中加入图标 1.4 导航菜单界面 实例014 OutLook界面 实例015 带导航菜单的主界面 实例016 图形化的导航界面 1.5 特色程序界面 实例017 隐藏式窗体 实例018 类似Windows XP的程序界面 实例019 软件启动界面 实例020 以树形显示的程序界面 实例021 动态按钮的窗体界面 1.6 特殊形状的窗体 实例022 非矩形窗体 实例023 建立字体形状窗体 实例024 使控件大小随窗体自动调整 实例025 带分隔栏的窗体 实例026 随机更换主界面背景 1.7 多媒体光盘 实例027 自动启动的多媒体光盘程序 实例028 为触摸屏程序添加虚拟键盘 1.8 窗体效果 实例029 制作鼠标穿透窗体 实例030 窗体换肤程序 1.9 窗体动画 实例031 窗体中的滚动字幕 实例032 动画显示窗体 实例033 制作闪烁的窗体 实例034 实现任务栏通知窗口 实例035 动画形式的程序界面 1.10 标题栏窗体 实例036 使窗体标题栏文字右对齐 实例037 没有标题栏但可以改变大小的窗口 1.11 设置窗体位置 实例038 设置窗体在屏幕中的位置 实例039 始终在最上面的窗体 实例040 从桌面右下角显示的窗体 1.12 设置窗体大小 实例041 获取桌面大小 实例042 在窗口间移动按钮 实例043 实现Office助手 1.13 窗体控制技术 实例044 在关闭窗口前加入确认对话框 实例045 通过子窗体刷新父窗体 实例046 拖动无边框窗体 1.14 其他技术 实例047 禁用窗口上的关闭按钮 实例048 实现动态系统托盘图标 实例049 实现气泡提示窗口 第2章 控件应用 2.1 TextBox控件应用 实例050 只允许输入数字的TextBox控件 实例051 在TextBox控件底端显示下划线 实例052 屏蔽TextBox控件上的粘贴功能 实例053 屏蔽TextBox控件上默认的右键菜单 2.2 ComboBox控件应用 实例054 美化ComboBox控件下拉列表 实例055 实现带查询功能的ComboBox控件 2.3 RichTextBox控件应用 实例056 在RichTextBox控件中添加超链接文字 实例057 在RichTextBox控件中显示RTF格式的文件 实例058 为RichTextBox控件添加自定义滚动条 实例059 在RichTextBox控件中实现关键字描红 实例060 在RichTextBox控件中实现项目编号功能 实例061 设置RichTextBox控件中文本对齐方式 2.4 ListBox控件应用 实例062 在ListBox控件间交换数据 实例063 将数据库数据添加到ListBox中 实例064 借助绑定控件实现数据选择录入 实例065 在ListBox控件中查找指定项 2.5 选择类控件应用 实例066 利用选择控件实现权限设置 实例067 利用选择控件实现复杂查询 2.6 ListView控件应用 实例068 ListView控件间的数据移动 实例069 将数据库数据添加到ListView控件 实例070 在ListView控件中实现修改功能 实例071 在ListView控件中对数据排序或统计 实例072 在ListView控件中绘制底纹 实例073 在列表视图中拖动视图项 实例074 使ListView控件中的选择项高亮显示 实例075 带复选框的ListView控件 2.7 TreeView控件应用 实例076 将数据库数据显示到树视图中 实例077 用树型列表动态显示菜单 实例078 用TreeView控件遍历磁盘目录 实例079 修改TreeView控件中的节点 实例080 将XML文件节点绑定到TreeView控件中 2.8 DataGridView控件应用 实例081 DataGridView控件的分页功能 实例082 从DataGridView控件拖放数据至TreeView控件 实例083 在DataGridView控件中实现合并单元格 实例084 在DataGridView控件中显示图片 实例085 为DataGridView控件实现复选功能 实例086 像Excel一样复制DataGridView中数据 2.9 其他控件典型应用 实例087 TrackBar控件的简单应用 实例088 自制平滑进度条控件 实例089 使用MaskedTextBox控件实现输入验证 实例090 制作日历计划任务 实例091 在ProgressBar控件中显示进度百分比 实例092 在NumericUpDown控件中显示当前系统日期 2.10 控件技术 实例093 程序运行时智能增减控件 实例094 多控件的焦点循环移动 实例095 动态创建控件 实例096 在Button按钮上绘图 2.11 焦点变换与输入控制 实例097 按回车键焦点在控件中移动的录入窗口 实例098 程序运行时拖动控件 实例099 控件得到焦点时变色 实例100 使用控件的Tag属性传递信息 2.12 特殊控件 实例101 为控件制作立体效果 实例102 获取控件名称和内容 第3章 组件应用 3.1 BackgroundWorker组件 实例103 BackgroundWorker组件执行异步操作 3.2 ErrorProvider组件 实例104 使用ErrorProvider组件验证文本框输入 3.3 EventLog组件 实例105 使用EventLog组件读写Windows系统事件日志 实例106 使用EventLog组件保存Windows系统日志 实例107 使用EventLog组件向本机现有日志中添加条目 3.4 FileSystemWatcher组件 实例108 使用FileSystemWatcher组件监视系统日志文件是否被更改 3.5 HelpProvider组件 实例109 使用HelpProvider组件调用帮助文件 3.6 Process组件 实例110 使用Process组件访问本地进程 3.7 Timer组件 实例111 使用Timer组件制作计时器 实例112 使用Timer组件实现人物动画效果 实例113 使用Timer组件制作左右飘动的窗体 实例114 使用Timer组件实现世界杯倒计时 3.8 ServiceController组件 实例115 使用ServiceController组件控制计算机的服务 3.9 ImageList组件 实例116 使用ImageList组件制作动画图片 3.10 DirectoryEntry组件 实例117 使用DirectoryEntry组件建立虚拟目录 第4章 图形技术 4.1 绘制图形 实例118 绘制公章 实例119 在图片中写入文字 实例120 局部图片的复制 实例121 波形图的绘制 4.2 图形转换 实例122 BMP转换成JPG格式 实例123 JPG转换成BMP格式 实例124 位图转化为WMF格式 实例125 ICO文件转化为位图 实例126 图片批量转换工具 4.3 图像预览 实例127 局部图像放大 实例128 浏览大图片 实例129 剪切图片 实例130 图像旋转 实例131 以椭圆形显示图像 4.4 图形缩放与变换 实例132 如何放大和缩小图像 实例133 生成图片缩略图 实例134 如何实现图形翻转 4.5 图像效果 实例135 百叶窗效果显示图像 实例136 推拉效果显示图像 实例137 水平交错效果显示图像 实例138 垂直交错效果显示图像 实例139 图像纹理效果 实例140 图像浮雕效果 实例141 积木效果 实例142 马赛克效果显示图像 实例143 雾化效果显示图像 实例144 锐化效果显示图像 实例145 黑白效果显示图像 实例146 光晕效果显示图像 4.6 图像字体 实例147 倒影效果的文字 实例148 投影效果的文字 实例149 印版效果的文字 实例150 阴影效果的文字 实例151 倾斜效果的文字 实例152 渐变效果的文字 实例153 缩放效果的文字 实例154 辉光效果文字 实例155 如何在图片中移动文字 4.7 图像动画 实例156 动画背景窗体 实例157 随鼠标移动的图像 实例158 十字光标定位 实例159 抓取鼠标指针的形状 实例160 图像的上下对接显示 实例161 任意角度旋转图像 实例162 以四周扩散形式显示图像 4.8 图像识别 实例163 查看图片的像素 实例164 设置图像中指定位置的像素值 实例165 在图像文件中实现自定义标记 实例166 获取指定点的RGB值 4.9 图像工具 实例167 获取图片类型 实例168 简单画图程序 实例169 看图工具 实例170 不失真压缩图片 实例171 屏幕抓图 4.10 图像应用 实例172 随机更换壁纸程序 实例173 屏幕保护 实例174 模拟石英钟 实例175 制作画桃花小游戏 第5章 多媒体技术 5.1 CD、VCD播放 实例176 播放指定的avi-mid-wav文件 实例177 获取多媒体详细信息列表 5.2 MP3、WAV播放 实例178 带记忆功能的MP3播放器 实例179 自动播放的MP3播放器 实例180 学校体操定时音乐播放 实例181 播放系统自带的事件声音 实例182 获取MP3文件的歌词 实例183 M3U文件的创建及删除 实例184 获取MP3文件的播放时间 实例185 异步加载并播放声音文件 5.3 动画播放 实例186 播放Flash动画 实例187 制作AVI播放器 实例188 播放GIF动画 实例189 利用Image制作小动画 5.4 媒体控制 实例190 检测是否安装声卡 实例191 打开和关闭CDROM 实例192 控制PC喇叭发声 实例193 获取显示设备的名称及PNPDeviceID 实例194 如何收听网络电台 实例195 获取显示设备的最大、最小及当前刷新率 实例196 隐藏控制面板中的声音设备 实例197 获取显示设备的当前显示模式 实例198 获取声音设备的名称及PNPDeviceID 实例199 语音计算器 5.5 多媒体应用 实例200 开机祝福程序 实例201 制作家庭影集 实例202 产品电子报价 实例203 产品滚动展示程序 实例204 将图片资源添加到EXE里 5.6 屏幕保护相关程序 实例205 电子相册屏幕保护程序 实例206 歌曲播放屏幕保护程序 第6章 文件系统 6.1 创建、删除文件和文件夹 实例207 生成随机文件名或文件夹名 实例208 建立临时文件 实例209 根据日期动态建立文件 实例210 清空回收站 6.2 查找文件 实例211 搜索文件 实例212 检查文件是否存在 实例213 提取指定文件夹目录 6.3 修改文件 实例214 更改文件名称 实例215 修改文件属性 实例216 修改文件及目录的名字 6.4 文件目录 实例217 获得临时文件目录 实例218 获取应用程序所在目录 实例219 获得系统当前目录 实例220 在程序中改变当前路径 6.5 复制文件 实例221 使用FileStream复制大文件 实例222 复制文件时显示复制进度 实例223 批量复制文件 6.6 指定类型的文件操作 实例224 文本文件的操作 实例225 使用ROT13加密解密文件 6.7 其他 实例226 获取窗口文本 实例227 判断文件是否正在被使用 实例228 创建PDF文档 实例229 C#中实现文件拖放 实例230 文件比较 实例231 获取文件夹中的图标资源 实例232 获取文件夹下的所有文件夹及文件的名称 第7章 操作系统与Windows相关程序 7.1 启动相关 实例233 定时关闭计算机 实例234 远程关闭与重启计算机 7.2 获得磁盘属性 实例235 获得硬盘序列号 实例236 获取映射驱动器路径 实例237 判断驱动器类型 实例238 获取所有逻辑分区 7.3 磁盘相关设置 实例239 取消磁盘共享 实例240 检查驱动器容量 实例241 检测磁盘是否准备好 实例242 图表显示磁盘容量 实例243 格式化磁盘 7.4 系统控制 实例244 将计算机设置为休眠状态 实例245 切换输入法 实例246 创建应用程序快捷方式 7.5 系统设置 实例247 屏幕放大镜 实例248 设置系统时间 实例249 设置屏幕分辨率 7.6 系统监控 实例250 检测系统启动模式 实例251 内存使用状态监控 实例252 键盘钩子屏蔽热键 实例253 CPU使用率 7.7 系统软件信息 实例254 获取计算机中已安装的字体 实例255 获取计算机的显示设备信息 实例256 获取系统启动后经过的时间 实例257 系统已经安装的打印机信息 7.8 鼠标操作 实例258 切换鼠标左右键 实例259 限制鼠标活动区域 实例260 获取鼠标在任意点的颜色值 实例261 设置鼠标样式 7.9 程序控制 实例262 打开控制面板中的程序 实例263 添加程序托盘 实例264 不出现在任务栏上的程序 实例265 怎样调用外部的Exe文件 实例266 关闭外部已开启的程序 7.10 程序运行 实例267 防止程序多次运行 实例268 程序运行时禁止关机 实例269 获取任务栏尺寸大小 实例270 改变系统提示信息 实例271 获取系统环境变量 实例272 启动屏幕保护 7.11 系统隐藏 实例273 隐藏、显示任务栏 实例274 隐藏、显示开始按钮 实例275 查看当前系统版本 实例276 使桌面图标文字透明 实例277 检索系统中正在运行的任务 实例278 隐藏、显示桌面图标 7.12 其他 实例279 两种信息发送方式 实例280 判断计算机中是否安装了SQL软件 第8章 注册表 8.1 个性桌面 实例281 禁用桌面选项卡 实例282 禁用外观选项卡 实例283 禁用屏幕保护选项卡 实例284 设置任务栏时间样式 8.2 系统设置 实例285 隐藏桌面快捷方式图标的小箭头 实例286 禁用Windows任务管理器 实例287 禁用任务栏的右键菜单 8.3 IE浏览器设置 实例288 修改IE浏览器标题栏内容 实例289 获取IE浏览器版本信息 实例290 设置IE浏览器的默认主页 实例291 禁止修改IE浏览器主页 8.4 应用软件设置 实例292 建立数据文件与程序的关联 实例293 使应用程序开机自动运行 第9章 数据库技术 9.1 连接Access数据库 实例294 连接Access数据库 实例295 连接加密的Access数据库 实例296 自动识别Access 2000数据库路径 实例297 连接网络上共享的Access 2000数据库 实例298 将Access数据库导入Excel文件中 9.2 连接SQL Server数据库 实例299 使用ODBC DSN连接SQL Server数据库 实例300 使用ODBC非DSN连接SQL Server数据库 实例301 使用OLE DB连接SQL Server数据库 实例302 建立SQL Server数据库连接 9.3 连接其他数据库 实例303 连接Excel文件 实例304 连接Oracle数据库 9.4 数据库结构的读取与修改 实例305 读取SQL Server数据库结构 实例306 修改SQL Server数据库结构 9.5 数据录入 实例307 利用数据绑定控件录入数据 实例308 使用ADO.NET对象录入数据 实例309 向SQL Server数据库中批量写入海量数据 实例310 利用存储过程录入数据 9.6 图片存取技术 实例311 使用存取文件名的方法存取图片 实例312 使用二进制存取用户头像 9.7 数据修改 实例313 利用数据绑定控件修改数据 实例314 利用数据对象修改数据 实例315 利用SQL语句修改数据 实例316 利用存储过程修改数据 9.8 数据保存前判断 实例317 判断输入数据是否符合要求 实例318 判断是否重复输入数据 9.9 数据删除 实例319 删除表格中指定的记录 实例320 利用SQL语句删除数据 9.10 数据记录 实例321 分页显示信息 实例322 移动记录 9.11 数据维护 实例323 在C#中分离SQL Server数据库 实例324 在C#中附加SQL Server数据库 实例325 在C#中附加单文件SQL Server数据库 9.12 数据备份恢复 实例326 备份SQL Server数据库 实例327 还原SQL Server数据库 9.13 管理系统开发相关 实例328 开启SQL Server数据库 实例329 断开SQL Server数据库与其他应用程序的连接 实例330 带图像列表的系统登录程序 实例331 利用SQL语句执行外围命令 实例332 系统初始化 第10章 SQL查询相关技术 10.1 SELECT子句 实例333 查询特定列数据 实例334 使用列别名 实例335 在列上加入计算 实例336 使用函数设置条件 10.2 查询常量 实例337 查询数字 实例338 查询字符串 实例339 查询日期数据 实例340 查询逻辑型数据 实例341 查询空(“”或Null)数据 10.3 查询变量 实例342 利用变量查询字符串数据 实例343 利用变量查询数值型数据 实例344 利用变量查询日期型数据 10.4 模式查询 实例345 利用“_”通配符进行查询 实例346 利用“%”通配符进行查询 实例347 利用“[]”通配符进行查询 实例348 利用“[^]”通配符进行查询 实例349 复杂的模式查询 10.5 TOP和PERCENT限制查询结果 实例350 查询前10名数据 实例351 取出数据统计结果的后10名数据 实例352 查询销售量占前50%的图书信息 实例353 查询库存数量占后20%的图书信息 10.6 周期、日期查询 实例354 查询指定日期的数据 实例355 查询指定时间段的数据 实例356 按年、月或日查询数据 10.7 比较、逻辑、重复查询 实例357 利用运算符查询指定条件的数据 实例358 NOT与谓词进行组合条件的查询 实例359 查询时不显示重复记录 实例360 列出数据表中的重复记录和记录条数 10.8 在查询中使用OR和AND运算符 实例361 利用OR运算符进行查询 实例362 利用AND运算符进行查询 实例363 同时利用OR、AND运算符进行查询 10.9 排序、分组统计 实例364 数据分组统计(单列) 实例365 在分组查询中使用ALL关键字 实例366 在分组查询中使用CUBE运算符 实例367 在分组查询中使用ROLLUP运算符 实例368 对数据进行降序查询 实例369 对数据进行多条件排序 实例370 对统计结果进行排序 实例371 按仓库分组统计图书库存(多列) 实例372 多表分组统计 实例373 使用COMPUTE 实例374 使用COMPUTE BY 10.10 聚合函数 实例375 利用聚合函数SUM对销售额进行汇总 实例376 利用聚合函数AVG求某班学生的平均年龄 实例377 利用聚合函数MIN求销售额、利润最少的商品 实例378 利用聚合函数MAX求月销售额完成最多的员工 实例379 利用聚合函数COUNT求日销售额大于某值的商品数 实例380 利用聚合函数First或Last求数据表中第一条或最后一条记录 10.11 多表查询(连接查询) 实例381 利用FROM子句进行多表查询 实例382 使用表别名 实例383 合并多个结果集 10.12 嵌套查询 实例384 简单嵌套查询 实例385 复杂嵌套查询 实例386 嵌套查询在查询统计中的应用 10.13 子查询 实例387 用子查询作派生的表 实例388 用子查询作表达式 实例389 在Update语句中应用子查询 10.14 联合语句Union 实例390 使用联合查询 实例391 多表联合查询 实例392 对联合查询后的结果进行排序 10.15 内联接查询 实例393 简单内联接查询 实例394 复杂内联接查询 实例395 使用内联接选择一个表与另一个表中行相关的所有行 10.16 外联接查询 实例396 左外联接查询 实例397 右外联接查询 实例398 使用外联接进行多表联合查询 10.17 利用IN进行查询 实例399 用IN查询表中的记录信息 实例400 使用IN引入子查询限定查询范围 10.18 交叉表查询 实例401 利用Trasform分析数据 实例402 利用Trasform动态分析数据 实例403 静态交叉表(SQLServer 2000) 实例404 动态交叉表(SQLServer 2000) 10.19 函数查询 实例405 在查询语句中使用格式化函数 实例406 在查询语句中使用字符串函数 实例407 在查询中使用日期函数 10.20 having语句应用 实例408 利用having语句过滤分组数据 实例409 having语句应用在多表查询中 10.21 视图的应用 实例410 在C#中应用视图 实例411 获取数据库中的全部用户视图 实例412 通过视图修改数据 10.22 存储过程的应用 实例413 C#应用存储过程 实例414 应用存储过程添加数据 实例415 应用存储过程修改数据 实例416 应用存储过程删除数据 实例417 C#应用查询存储过程 实例418 获取数据库中的全部存储过程 实例419 加密存储过程 10.23 触发器的应用 实例420 Insert触发器的应用 实例421 Update触发器在系统日志中的应用 实例422 触发器的嵌套使用 实例423 获取数据库中的触发器 第11章 LINQ查询技术 11.1 使用LINQ技术操作SQL数据库 实例424 使用LINQ技术查询SQL数据库中的数据 实例425 使用LINQ技术向SQL数据库中添加数据 实例426 使用LINQ技术在SQL数据库中修改数据 实例427 使用LINQ技术在SQL数据库中删除数据 实例428 使用LINQ技术查询前5名数据 实例429 使用LINQ技术对数据进行排序 实例430 使用LINQ技术关联查询多表数据 11.2 LINQ技术其他应用 实例431 读取XML文件并更新到数据库 实例432 使用LINQ技术对XML文件进行操作 第12章 报表与打印技术 12.1 Windows打印组件 实例433 打印窗体中的数据 实例434 图形打印 12.2 利用报表生成器设计报表 实例435 利用报表专家设计并显示学生基本信息 实例436 分组统计报表 实例437 在水晶报表中添加图表 12.3 水晶报表基本操作 实例438 在水晶报表中使用Access数据库 实例439 在水晶报表中使用SQL Server数据库 实例440 订货总金额超过10万元显示“恭喜获奖”文字 实例441 薪资大于或等于1万元使用蓝色字体标记 实例442 筛选薪资大于2000元的男员工 实例443 按类别分组统计图书库存 实例444 按成绩总分降序排序 实例445 部门销售量占公司总销售量的业绩百分比 12.4 子报表的使用 实例446 插入子报表 实例447 编辑与重新导入子报表 实例448 根据需要显示子报表 12.5 调用Office进行打印 实例449 利用Word打印员工报表 实例450 利用Excel打印学生信息报表 第13章 图表技术 13.1 简单图表 实例451 绘制面形图 实例452 绘制椭圆 实例453 绘制矩形 实例454 绘制曲线 实例455 绘制柱形图 13.2 柱形图表 实例456 将汇总数据利用图表分析 实例457 柱形图表分析商品走势 实例458 对排序数据进行分析 实例459 利用控件实现柱形图分析 实例460 在柱形图的指定位置显示说明文字 13.3 折线图表 实例461 利用图表分析产品销售走势 实例462 利用图表分析彩票中奖情况 实例463 多曲线数据分析 实例464 网站人气指数曲线分析 13.4 饼形图表 实例465 利用饼形图分析公司男女比率 实例466 利用饼形图分析产品市场占有率 实例467 利用多饼形图分析企业人力资源情况 实例468 制作一个可以旋转的饼形图 13.5 图表技术的应用 实例469 绘制验证码 实例470 在饼形图的外围显示说明文字 第14章 硬件相关开发技术 14.1 串口控制 实例471 通过串口发送数据 实例472 通过串口关闭对方计算机 14.2 加密狗 实例473 密码写入与读出加密狗 实例474 使用加密狗进行身份验证 14.3 IC卡应用 实例475 向IC卡中写入数据 实例476 读取IC卡中的数据 实例477 利用IC卡制作考勤程序 14.4 指纹识别器应用 实例478 将指纹数据存入数据库中 实例479 使用指纹识别器进行员工考勤 14.5 监控 实例480 简易视频程序 实例481 摄像头监控录像 实例482 超市摄像头定时监控系统 14.6 语音卡控制 实例483 语音卡电话呼叫系统 实例484 客户来电查询系统 实例485 语音卡实现电话录音 14.7 手机程序开发 实例486 利用短信猫收发短信息 实例487 利用短信远程关闭计算机 实例488 短信息采集烟草销售数据 实例489 “春晚”节目评比短信息互动平台 14.8 其他程序 实例490 条形码扫描器销售商品 实例491 利用神龙卡制作练歌房程序 第15章 网络开发技术 15.1 计算机设置 实例492 通过计算机名获取IP地址 实例493 通过IP地址获取主机名称 实例494 修改本机IP地址 实例495 得到本机MAC地址 实例496 获得系统打开的端口和状态 实例497 更改DNS地址 15.2 远程控制 实例498 远程控制计算机 实例499 远程服务控制 15.3 网络复制文件 实例500 网络中的文件复制 15.4 局域网管理 实例501 在局域网内发送信息 实例502 获取网络中所有工作组名称 实例503 列出工作组中所有计算机 实例504 获取网络中某台计算机的磁盘信息 实例505 映射网络驱动器 15.5 网络连接与通信 实例506 编程实现Ping操作 15.6 网络聊天室 实例507 利用C#设计聊天程序 实例508 点对点聊天室 第16章 Web编程 16.1 浏览器应用 实例509 制作自己的网络浏览软件 实例510 XML数据库文档的浏览 16.2 上网控制 实例511 定时上Internet 实例512 监测当前网络连接状态 16.3 邮件管理 实例513 收取电子邮件 实例514 SMTP协议发送电子邮件 16.4 网上信息提取 实例515 提取并保存网页源码 实例516 提取网页标题 第17章 加密、安全与软件注册 17.1 数据加密与解密 实例517 数据加密技术 实例518 文本文件加密与解密 实例519 对数据报进行加密保障通信安全 17.2 Access数据库安全 实例520 如何编程修复Access数据库 实例521 访问带验证模式的SQLServer 2000数据库 17.3 软件注册与加密 实例522 限制软件的使用次数 实例523 利用注册表设计软件注册程序 实例524 利用网卡序列号设计软件注册程序 实例525 根据cpu序列号、磁盘序列号设计软件注册程序 第18章 数据结构与算法 18.1 链表的实现 实例526 单向链表的实现 18.2 双向链表 实例527 双向链表 18.3 堆栈 实例528 堆栈的实现 18.4 队列 实例529 队列的实现 18.5 树的实现 实例530 树的实现 18.6 排序 实例531 冒泡排序 实例532 选择排序 实例533 插入排序 实例534 希尔排序 18.7 常见算法的实际应用 实例535 判断素数的算法 实例536 加密和解密算法 实例537 判断身份证是否合法 实例538 判断IP地址是否合法的算法 实例539 按要求生成指定位数编号 实例540 身份证号从15位升到18位算法 实例541 百钱百鸡的算法 实例542 韩信点兵的算法 实例543 实现裴波那契数列求和 实例544 求水仙花数的算法 实例545 如何将B转换成GB、MB和KB 实例546 0~N位数的任意组合 实例547 在数组中快速查找近似值 第19章 C#高级开发 19.1 Windows服务开发 实例548 将局域网聊天程序开发成Windows服务 19.2 Remoting分布式开发 实例549 运用Remoting实现文件传送 实例550 大规模数据访问时缓解服务器压力 19.3 COM 服务开发 实例551 COM 服务实现银行转账系统 实例552 COM 服务解决同时访问大量数据并发性 第20章 实用工具 20.1 数据库工具 实例553 自动配置ODBC的程序 实例554 制作SQL Server提取器 20.2 个人工具 实例555 个人通讯录 实例556 电子名片盒 实例557 个人日记本 实例558 个人理财管理 20.3 实用工具 实例559 电话区号、邮编管理软件 实例560 IP地址及手机号码归属地查询 实例561 火车时刻查询软件 实例562 网站网址导航程序 20.4 其他工具 实例563 人民币金额转换 实例564 列举局域网SQL服务器 实例565 整点报时程序 实例566 红绿灯程序 实例567 万年历 实例568 彩票抽奖机 实例569 电子相册 第21章 程序打包 21.1 最简单的程序打包 实例570 最简单的程序打包 实例571 将特定文件安装到指定文件夹中 21.2 打包注册表信息 实例572 打包注册表信息 技术要点对应实例位置
    2018-02-01下载
    积分:1
  • C# EXCEL导入SQL
    C# EXCEL导入SQL
    2015-03-04下载
    积分:1
  • windows hook 技术
    对于HOOK函数的一点认识一、序言对大多数的Windows开发者来说,如何在Win32系统中对API函数的调用进行拦截一直是项极富挑战性的课题,因为这将是对你所掌握的计算机知识较为全面的考验,尤其是一些在如今使用RAD进行软件开发时并不常用的知识,这包括了操作系统原理、汇编语言甚至是关于机器指令代码的(听上去真是有点恐怖,不过这是事实)。当前广泛使用的Windows操作系统中,像Win 9x和WinNT/2K,都提供了一种比较稳健的机制来使得各个进程的内存地址空间之间是相互独立,也就是说一个进程中的某个有效的内存地址对另一个进程来说是无意义的,这种内存保护措施大大增加了系统的稳定性。不过,这也使得进行系统级的API拦截的工作的难度也大大加大了。                 当然,我这里所指的是比较文雅的拦截方式,通过修改可执行文件在内存中的映像中有关代码,实现对API调用的动态拦截;而不是采用比较暴力的方式,直接对可执行文件的磁盘存储中机器代码进行改写。                   二、API钩子系统一般框架通常,我们把拦截API的调用的这个过程称为是安装一个API钩子(API Hook)。一个API钩子至少有两个模块组成:一个是钩子服务器(Hook Server)模块,一般为EXE的形式;一个是钩子驱动器Hook Driver)模块,一般为DLL的形式。                                   服务器主要负责向目标进程注入驱动器,使得驱动器工作在目标进程的地址空间中,这是关键的第一步。驱动器则负责实际的API拦截工作,以便在我们所关心的API函数调用的前后能做一些我们需要的工作。                                   一个大家比较常见的API钩子的例子就是一些实时翻译软件(像金山词霸)中必备的的功能:屏幕抓词,它主要是对一些GDI函数进行了拦截,获取它们的输入参数中的字符串,然后在自己的窗口中显示出来。针对上述的两个部分,有以下两点需要我们重点考虑的:选用何种DLL注入技术采用何种API拦截机制                   三、注入技术的选用由于在Win32系统中各个进程的地址是互相独立的,因此我们无法在一个进程中对另一个进程的代码进行有效的修改。而你要完成API钩子的工作就必须进行这种操作。因此,我们必须采取某种独特的手段,使得API钩子(准确的说是钩子驱动器)能够成为目标进程中的一部分,才有较大的可能来对目标进程数据和代码进行有控制的修改。                  通常有以下几种注入方式:1.利用注册表如果我们准备拦截的进程连接了User32.dll,也就是使用了User32中的API(一般图形界面的应用程序都符合这个条件),那么就可以简单把你的钩子驱动器DLL的名字作为值添加在下面注册表的键下:                 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWindowsAppInit_DLLs                 值的形式可以为单个DLL的文件名,或者是一组DLL的文件名,相邻的名称之间用逗号或空格间隔。所有由该值标识的DLL将在符合条件的应用程序启动的时候装载。这是一个操作系统内建的机制,相对其他方式来说危险性较小,但它有一些比较明显的缺点:该方法仅适用于NT/2K操作系统。看看键的名称你就应该明白为了激活或停止钩子的注入,必须重新启动Windows。这个就似乎太不方便了不能用此方法向没有使用User32的应用程序注入DLL,例如控制台应用程序不管需要与否,钩子DLL将注入每一个GUI应用程序,这将导致整个系统性能的下降                                   2.建立系统范围的Windows钩子要向某个进程注入DLL,一个十分普遍也是比较简单的方法就是建立在标准的Windows钩子的基础上。Windows钩子一般是在DLL中实现的,这是一个全局性的Windows钩子的基本要求,这也符合我们的需要。当我们成功地调用SetWindowsHookEx函数之后,便在系统中安装了某种类型的消息钩子,这个钩子可以是针对某个进程,也可以是针对系统中的所有进程。一旦某个进程中产生了该类型的消息,操作系统会自动把该钩子所在的DLL映像到该进程的地址空间中,从而使得消息回调函数(在SetWindowsHookEx的参数中指定)能够对此消息进行适当的处理,在这里,我们所感兴趣的当然不是对消息进行什么处理,因此在消息回调函数中只需把消息钩子向后传递就可以了,但是我们所需的DLL已经成功地注入了目标进程的地址空间,从而可以完成后续工作。                                   我们知道,不同进程中使用的DLL之间是不能直接共享数据的,因为它们活动在不同的地址空间中。但在Windows钩子DLL中,有一些数据,例如Windows钩子句柄HHook,这是由SetWindowsHookEx函数返回值得到的,并且作为参数将在CallNextHookEx函数和UnhookWindoesHookEx函数中使用,显然使用SetWindowsHookEx函数的进程和使用CallNextHookEx函数的进程一般不会是同一个进程,因此我们必须能够使句柄在所有的地址空间中都是有效的有意义的,也就是说,它的值必须必须在这些钩子DLL所挂钩的进程之间是共享的。为了达到这个目的,我们就应该把它存储在一个共享的数据区域中。                  在VC 中我们可以采用预编译指令#pragma data_seg在DLL文件中创建一个新的段,并且在DEF文件中把该段的属性设置为“shared”,这样就建立了一个共享数据段。对于使用Delphi的人来说就没有这么幸运了:没有类似的比较简单的方法(或许是有的,但我没有找到)。不过我们还是可以利用内存映像技术来申请使用一块各进程可以共享的内存区域,主要是利用了CreateFileMapping和MapViewOfFile这两个函数。这倒是一个通用的方法,适合所有的开发语言,只要它能使用Windows的API。                  在Borland的BCB中有一个指令#pragma codeseg与VC 中的#pragma data_seg指令有点类似,应该也能起到一样的作用,但我试了一下,没有没有效果,而BCB的联机帮助中对此也提到的不多,不知怎样才能正确的使用。一旦钩子DLL加载进入目标进程的地址空间后,在我们调用UnHookWindowsHookEx函数之前是无法使它停止工作的,除非目标进程关闭。                  这种DLL注入方式有两个优点: 这种机制在Win 9x/Me和WinNT/2K中都是得到支持的,预计在以后的版本中也将得到支持.                 钩子DLL可以在不需要的时候,可由我们主动的调用UnHookWindowsHookEx来卸载,比起使用注册表的机制来说方便了许多 尽管这是一种相当简洁明了的方法,但它也有一些显而易见的缺点:                 首先值得我们注意的是,Windows钩子将会降低整个系统的性能,因为它额外增加了系统在消息处理方面的时间                 其次,只有当目标进程准备接受某种消息时,钩子所在的DLL才会被系统映射到该进程的地址空间中,钩子才能真正开始发挥作用。因此如果我们要对某些进程的整个生命周期内的API调用情况进行监控,用这种方法显然会遗漏某些API的调用                   3.使用CreateRemoteThread函数在我看来这是一个相当棒的方法,然而不幸的是,CreateRemoteThread这个函数只能在WinNT/2K系统中才得到支持,虽然在Win9x中这个API也能被安全的调用而不出错,但它除了返回一个空值之外什么也不做。整个DLL注入过程十分简单。我们知道,任何一个进程都可以使用LoadLibrary来动态地加载一个DLL。但问题是,我们如何让目标进程在我们的控制下来加载我们的钩子DLL(也就是钩子驱动器)呢?这里有一个API函数CreateRemoteThread,通过它可在一个进程中可建立并运行一个远程的线程。                  调用该API需要指定一个线程函数指针作为参数,该线程函数的原型如下:Function ThreadProc(lpParam: Pointer):DWORD;我们再来看一下LoadLibrary的函数原型:Function LoadLibrary(lpFileName: PChar):HModule;可以看出,这两个函数原型实质上是完全相同的(其实返回值是否相同关系不大,因为我们是无法得到远程线程函数的返回值的),只是叫法不同而已,这种相同使得我们可以把直接把LoadLibrary当做线程函数来使用,从而在目标进程中加载钩子DLL。                                   类似的,当我们需要卸载钩子DLL时,也可以FreeLibrary作为线程函数来使用,在目标进程中移去钩子DLL。一切看来是十分的简洁方便。通过调用GetProcAddress函数,我们可以得到LoadLibrary函数的地址。由于LoadLibrary是Kernel32中的函数,而这个系统DLL的映射地址对每一个进程来说都是相同的,因此LoadLibrary函数的地址也是如此。这点将确保我们能把该函数的地址作为一个有效的参数传递给CreateRemoteThread使用。 AddrOfLoadLibrary :=  GetProcAddress(GetModuleHandle(‘Kernel32.dll’),‘LoadLibrary’); HremoteThread := CreateRemoteThread(HTargetProcess,nil,0,AddrOfLoadLibrary,HookDllName,0,nil);                                   要使用CreateRemoteThread,我们需要目标进程的句柄作为参数。当我们用OpenProcess函数来得到进程的句柄时,通常是希望对此进程有全权的存取操作,也就是以PROCESS_ALL_ACCESS为标志打开进程。但对于一些系统级的进程,直接这样显然是不行的,只能返回一个的空句柄(值为零)。为此,我们必须把自己设置为拥有调试级的特权,这样将具有最大的存取权限,从而使得我们能对这些系统级的进程也可以进行一些必要的操作。                   4.通过BHO来注入DLL 有时,我们想要注入DLL的对象仅仅是Internet Explorer。幸运的是,Windows操作系统为我们提供了一个简单的归档的方法(这保证了它的可靠性)―― 利用Browser Helper Objects(BHO)。一个BHO是一个在DLL中实现的COM对象,它主要实现了一个IObjectWithSite接口,而每当IE运行时,它会自动加载所有实现了该接口的COM对象。                   四、拦截机制在钩子应用的系统级别方面,有两类API拦截的机制――内核级的拦截和用户级的拦截。内核级的钩子主要是通过一个内核模式的驱动程序来实现,显然它的功能应该最为强大,能捕捉到系统活动的任何细节,但难度也较大,不在我们探讨的范围之内(尤其对我这个使用Delphi的人来说,还没涉足这块领域,因此也无法探讨);                                   而用户级的钩子则通常是在普通的DLL中实现整个API的拦截工作,这才是我们现在所重点关注的。拦截API函数的调用,一般可有以下几种方法: 1.代理DLL(特洛伊木马)一个容易想到的可行的方法是用一个同名的DLL去替换原先那个输出我们准备拦截的API所在的DLL。当然代理DLL也要和原来的一样,输出所有函数。如果想到DLL中可能输出了上百个函数,我们就应该明白这种方法的效率是不高的。另外,我们还得考虑DLL的版本问题。                                   2.改写执行代码有许多拦截的方法是基于可执行代码的改写。其中一个就是改变在CALL指令中使用的函数地址,这种方法有些难度,也比较容易出错。它的基本思路是检索出在内存中所有你所要拦截的API的CALL指令,然后把原先的地址改成为你自己提供的函数的地址。                                   另外一种代码改写的方法的实现方法更为复杂,它的主要的实现步骤是先找到原先的API函数的地址,然后把该函数开始的几个字节用一个JMP指令代替(有时还不得不改用一个INT指令),使得对该API函数的调用能够转向我们自己的函数调用。实现这种方法要牵涉到一系列压栈和出栈这样的较底层的操作,显然对我们的汇编语言和操作系统底层方面的知识是一种考验。这个方法倒和很多病毒的感染机制相类似。                                   3.以调试器的身份进行拦截另一个可选的方法是在目标函数中安置一个调试断点,使得进程运行到此处就进入调试状态。然而这样一些问题也随之而来,其中较主要的是调试异常的产生将把进程中所有的线程都挂起。它也需要一个额外的调试模块来处理所有的异常,整个进程将一直在调试状态下运行,直至它运行结束。                 4.改写输入地址表这种方法主要得益于现如今Windows系统中所使用的可执行文件(包括EXE文件和DLL文件)的良好结构――PE文件格式(Portable Executable File Format),因此它相当稳健,又简单易行。要理解这种方法是如何运作的,首先你得对PE文件格式有所理解。                  一个PE文件的结构大致如下图所示:                 一般PE文件一开始是一段DOS程序,当你的程序在不支持Windows的环境中运行时,它就会显示“This Program cannot be run in DOS mode”这样的警告语句,接着这个DOS文件头,就开始真正的PE文件内容了。首先是一段称为“IMAG E_NT_HEADER”的数据,其中是许多关于整个PE文件的消息,在这段数据的尾端是一个称为Data Directory的数据表,通过它能快速定位一些PE文件中段(section)的地址。在这段数据之后,则是一个“IMAGE_SECTION_HEADER”的列表,其中的每一项都详细描述了后面一个段的相关信息。接着它就是PE文件中最主要的段数据了,执行代码、数据和资源等等信息就分别存放在这些段中。                                   在所有的这些段里,有一个被称为“.idata”的段(输入数据段)值得我们去注意,该段中包含着一些被称为输入地址表(IAT,Import Address Table)的数据列表。每个用隐式方式加载的API所在的DLL都有一个IAT与之对应,同时一个API的地址也与IAT中一项相对应。当一个应用程序加载到内存中后,针对每一个API函数调用,相应的产生如下的汇编指令:JMP DWORD PTR [XXXXXXXX]                  如果在VC 中使用了_delcspec(import),那么相应的指令就成为 CALL DWORD PTR [XXXXXXXX]。                                   不管怎样,上述方括号中的总是一个地址,指向了输入地址表中一个项,是一个DWORD,而正是这个DWORD才是API函数在内存中的真正地址。因此我们要想拦截一个API的调用,只要简单的把那个DWORD改为我们自己的函数的地址,那么所有关于这个API的调用将转到我们自己的函数中去,拦截工作也就宣告顺利的成功了。这里要注意的是,自定义的函数的调用形式应该是API的调用方式,也就是stdcall方式,而Delphi中默认的是pascal的调用方式,也就是register方式,它们在参数的传递方式等方面存在着较大的区别。                                   另外,自定义的函数的参数形式可以和原先的API函数相同的,不过这也不是必须的,而且这样的话在有些时候也会出现一些问题,我在后面将会提到。因此要拦截API的调用,首先我们就要得到相应的IAT的地址。系统把一个进程模块加载到内存中,其实就是把PE文件几乎是原封不动的映射到进程的地址空间中去,而模块句柄HModule实际上就是模块映像在内存中的地址,PE文件中一些数据项的地址,都是相对于这个地址的偏移量,因此被称为相对虚拟地址(RVA,Relative Virtual Address)。                                   于是我们就可以从HModule开始,经过一系列的地址偏移而得到IAT的地址。不过我这里有一个简单的方法,它使用了一个现有的API函数                 ImageDirectoryEntryToData,它帮助我们在定位IAT时能少走几步,省得把偏移地址弄错了,走上弯路。不过纯粹使用RVA从HModule开始来定位IAT的地址其实并不麻烦,而且这样还更有助于我们对PE文件的结构的了解。上面提到的API函数是在DbgHelp.dll中输出的(这是从Win2K才开始有的,在这之前是由ImageHlp.dll提供的),有关这个函数的详细介绍可参见MSDN。                                   在找到IAT之后,我们只需在其中遍历,找到我们需要的API地址,然后用我们自己的函数地址去覆盖它。下面给出一段对应的源码: procedure RedirectApiCall; var ImportDesc:PIMAGE_IMPORT_DESCRIPTOR; FirstThunk:PIMAGE_THUNK_DATA32; sz:DWORD; begin //得到一个输入描述结构列表的首地址,每个DLL都对应一个这样的结构 ImportDesc:=ImageDirectoryEntryToData(Pointer(HTargetModule),true,IMAGE_DIRECTORY_ENTRY_IMPORT,sz); while Pointer(ImportDesc.Name)nil do      begin //判断是否是所需的DLL输入描述        if StrIComp(PChar(DllName),PChar(HTargetModule ImportDesc.Name))=0            then begin            //得到IAT的首地址            FirstThunk:=PIMAGE_THUNK_DATA32(HTargetModule ImportDesc.FirstThunk);            while FirstThunk.Funcnil do                begin                if FirstThunk.Func=OldAddressOfAPI then 
    2020-12-06下载
    积分:1
  • 微信公众账号开发 实例源码下载(含SDK)
    基于.net的轻量级的微信SDK,使用.net Framework4.0的Dynamic特性,一个将xml字符串自动转换成Dynamic Object的DynamicXml.cs类,还有一个将json字符串自动转换成Dynamic Object的DynamicJson.cs类实现无Entity的SDK;代码结构完全符合官方平台的布局,一目了然
    2014-07-28下载
    积分:1
  • 696518资源总数
  • 105547会员总数
  • 4今日下载