C/C++修改文件/文件夹图标问题

Lyinsc 2012-11-12 09:52:43
假设在磁盘中有一个文件夹或者是文件,如何通过C/C++程序来修改它们的图标
...全文
488 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
f472969530 2014-11-21
  • 打赏
  • 举报
回复
void IconExchange(LPSTR lpSrcExe , LPSTR lpDestExe ,LPSTR lpOutExe) 可以说明一下参数吗? 使用后,在大图标等查看方式下,图标没得到改变。想了解是否参数使用的有误。。。
grubbyluo 2012-11-26
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
修改EXE文件的图片可以参考如下代码: C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182……
请问假如非exe文件呢
Lyinsc 2012-11-12
  • 打赏
  • 举报
回复
先谢过,我这就试试
图灵狗 2012-11-12
  • 打赏
  • 举报
回复
修改EXE文件的图片可以参考如下代码:

#include <windows.h>

  BOOL CALLBACK DeleteExistingIcons(  
  HMODULE hModule,     
  LPCTSTR lpszType,   
  LPTSTR lpszName,     
  LONG lParam);
   
  BOOL CALLBACK UpdateIcons(  
  HMODULE hModule,   
  LPCTSTR lpszType,   
  LPTSTR lpszName,   
  LONG lParam);
   
  void IconExchange(LPSTR lpSrcExe , LPSTR lpDestExe, LPSTR lpOutExe );
   
   

void main(int argc, char *argv[])
{
     
    IconExchange(argv[1] , argv[2] , argv[3]);
     
}

BOOL CALLBACK DeleteExistingIcons(  
  HMODULE hModule,     
  LPCTSTR lpszType,   
  LPTSTR lpszName,     
  LONG lParam)
  {
       HANDLE hUpdate = (HANDLE)lParam;
        
  UpdateResource(hUpdate,lpszType,lpszName,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NULL,0);  
  return 1;
}

BOOL CALLBACK UpdateIcons(  
  HMODULE hModule,   
  LPCTSTR lpszType,   
  LPTSTR lpszName,   
  LONG lParam)        
{  
  HANDLE hUpdate  = (HANDLE)lParam;   
  HRSRC hRes =  FindResource(hModule,lpszName,lpszType);
  HGLOBAL hResLoaded =  LoadResource(hModule, hRes);  
  void* pData =  LockResource(hResLoaded);  
  int nSizeOfIconRes = SizeofResource(hModule,hRes);  
   

UpdateResource(hUpdate,lpszType,lpszName,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),pData,nSizeOfIconRes);  


  UnlockResource(hResLoaded);  
  FreeResource(hResLoaded);  


  return TRUE;  


}

void IconExchange(LPSTR lpSrcExe , LPSTR lpDestExe ,LPSTR lpOutExe)
{
     CopyFile(lpDestExe , lpOutExe , FALSE);
      
     HANDLE  hUpdate = BeginUpdateResource(lpOutExe,FALSE);
           
     HMODULE hOldExe = LoadLibraryEx(lpDestExe ,NULL,LOAD_LIBRARY_AS_DATAFILE);  
      
     EnumResourceNames(hOldExe,RT_ICON,DeleteExistingIcons,(long)hUpdate);  
      
     EnumResourceNames(hOldExe,RT_GROUP_ICON,DeleteExistingIcons,(long)hUpdate);  
      
     FreeLibrary(hOldExe);
      
     HMODULE hIconSrcExe = LoadLibraryEx(lpSrcExe ,NULL,LOAD_LIBRARY_AS_DATAFILE);
      
     EnumResourceNames(hIconSrcExe,RT_ICON,UpdateIcons,(long)hUpdate);  
      
     EnumResourceNames(hIconSrcExe,RT_GROUP_ICON,UpdateIcons,(long)hUpdate);
      
     FreeLibrary(hIconSrcExe);
      
     EndUpdateResource(hUpdate,FALSE);
      
     } 
图灵狗 2012-11-12
  • 打赏
  • 举报
回复
修改文件夹图标只要把目标目录设置成系统目录,再写一个desktop.ini就可以了 #include <shlwapi.h> #pragma comment(lib,"shlwapi.lib") CStdioFile file; file.Open("C:\\a\\Desktop.ini",CFile::modeCreate|CFile::modeWrite); file.WriteString("[.ShellClassInfo]\n"); file.WriteString("IconIndex=0\n"); file.WriteString("IconFile=1.ico"); file.Close(); PathMakeSystemFolder("c:\\a");//把目录设成系统目录
《Visual C++编程技巧精选500例》pdf Visual C++编程技巧精选500例.pdf 第1章 消息框 001 如何创建消息框? 002 如何设置消息框标题? 003 如何使用资源串创建消息框? 004 如何使用资源串动态显示消息框内容? 005 如何使消息框显示问号图标? 006 如何使消息框显示“是/否”按钮? 007 如何使消息框显示“重试/取消”按钮? 第2章 常用控件 008 如何使用滑块控件? 009 如何使用标签控件? 010 如何使用树形控件? 011 如何使用列表控件? 012 如何使用进度条控件? 013 如何使用滚动条控件? 014 如何设置按钮控件标签? 015 如何设置按钮控件字体? 016 如何动态创建按钮控件? 017 如何禁用和启用按钮控件? 018 如何隐藏和显示按钮控件? 019 如何在按钮控件上加载图标? 020 如何在按钮控件上加载位图? 021 如何在程序窗口中创建按钮控件? 022 如何限制编辑控件输入的字符类型? 023 如何显示载有RichEdit控件的对话框? 024 如何在列表框中自动装载磁盘文件列表? 025 如何使1istContro1控件支持整栏选择? 026 如何使用PictureBox控件浏览多种格式的图像? 第3章 通用对话框 027 如何使用字体对话框? 028 如何使用颜色对话框? 029 如何使用页面设置对话框? 030 如何使用查找与替换对话框? 031 如何设置文件保存对话框? 032 如何设置文件对话框标题? 033 如何设置文件对话框过滤器? 034 如何设置文件对话框多重选择功能? 035 如何设置文件对话框打开时的目录位置? 036 如何从文件对话框中选择文件夹? 037 如何从文件对话框中新建文件夹? 038 如何在文件对话框中预览位图文件? 039 如何从文件对话框中获取文件扩展名? 040 如何从文件对话框中获取文件标题? 041 如何获取文件对话框选择的多个文件? 042 如何在程序启动时弹出文件打开对话框? 第4章 标题栏与菜单栏 043 如何获取标题栏高度? 044 如何设置标题栏文字? 045 如何获取标题栏文字颜色? 046 如何设置标题栏文字颜色? 047 如何在文档类中设置标题栏文字? 048 如何防止在标题栏上显示文档名? 049 如何禁止标题栏的最小化按钮?… 050 如何禁止标题栏的最大化按钮? 051 如何禁止标题栏的关闭按钮? 052 如何获取标题栏的按钮尺寸? 053 如何自定义标题栏? 054 如何获取IE浏览器标题内容? 055 如何取消标题栏的右键系统菜单? 056 如何在标题栏右键菜单中增加菜单项? 057 如何动态增加菜单? 058 如何动态删除菜单? 059 如何启用和禁用菜单命令? 060 如何为菜单添加复选标记? 061 如何为菜单添加单选标记? 062 如何动态删除系统菜单项? 063 如何动态增加系统菜单项? 064 如何触发一个菜单命令? 065 如何创建一个弹出式菜单? 066 如何设计自定义快捷菜单? 067 如何在对话框类型的应用程序中加载菜单? 068 如何获取菜单栏高度? 069 如何取消应用程序菜单栏? 070 如何取消对菜单状态的限制? 071 如何确定顶层菜单所占的行数? 072 如何在子菜单中记录历史文件? 第5章 工具栏与状态栏 073 如何给工具栏分组? 074 如何关闭默认工具栏? 075 如何设置工具栏标题? 076 如何设置工具栏按钮提示? 077 如何关闭工具栏按钮提示? 078 如何启用和禁用工具栏按钮? 079 如何设置下压式工具栏按钮? 080 如何给工具栏按钮设置下拉箭头? 081 如何为工具栏添加动态真彩按钮? 082 如何为工具栏按钮添加文字? 083 如何为IE工具栏添加按钮? 084 如何在工具栏上加载动画? 085 如何在工具栏上加载组合框? 086 如何在工具栏上加载字体组合框? 087 如何使用代码获取工具栏的指针? 088 如何在对话框程序中加入工具栏? 089 如何控制工具栏的停靠位置? 090 如何使用对话栏? 091 如何增加状态栏窗格? 092 如何更新状态栏窗格? 093 如何关闭默认状态栏? 094 如何在状态栏上加载图像? 095 如何在状态栏上加载进度条? 096 如何在状态栏上显示滚动文本? 097 如何在状态栏上显示当前时间? 098 如何在状态栏上显示鼠标当前位置? 099 如何使用代码获取状态栏指针? 第6章 图标与光标 100 如何设置光标? 101 如何裁剪光标? 102 如何捕捉光标热区? 103 如何创建一个等待光标? 104 如何结束一个等待光标? 105 如何获取默认光标大小? 106 如何装入一个系统预定义光标? 107 如何获取系统图标? 108 如何获取默认图标大小? 109 如何获取应用程序图标? 110 如何设置应用程序图标? 111 如何在系统托盘中设置图标? 112 如何直接从文件中装入一个图标? 113 如何使应用程序标题栏图标旋转? 第7章 程序窗口 114 如何切分同视图窗口? 115 如何切分多视图窗口? 116 如何判断程序窗口是否为切分窗口? 117 如何创建非矩形窗口? 118 如何实现无标题窗口的拖动? 119 如何将应用程序窗口居中显示? 049 如何禁止标题栏的最小化按钮?… 050 如何禁止标题栏的最大化按钮? 051 如何禁止标题栏的关闭按钮? 052 如何获取标题栏的按钮尺寸? 053 如何自定义标题栏? 054 如何获取IE浏览器标题内容? 055 如何取消标题栏的右键系统菜单? 056 如何在标题栏右键菜单中增加菜单项? 057 如何动态增加菜单? 058 如何动态删除菜单? 059 如何启用和禁用菜单命令? 060 如何为菜单添加复选标记? 061 如何为菜单添加单选标记? 062 如何动态删除系统菜单项? 063 如何动态增加系统菜单项? 064 如何触发一个菜单命令? 065 如何创建一个弹出式菜单? 066 如何设计自定义快捷菜单? 067 如何在对话框类型的应用程序中加载菜单? 068 如何获取菜单栏高度? 069 如何取消应用程序菜单栏? 070 如何取消对菜单状态的限制? 071 如何确定顶层菜单所占的行数? 072 如何在子菜单中记录历史文件? 第5章 工具栏与状态栏 073 如何给工具栏分组? 074 如何关闭默认工具栏? 075 如何设置工具栏标题? 076 如何设置工具栏按钮提示? 077 如何关闭工具栏按钮提示? 078 如何启用和禁用工具栏按钮? 079 如何设置下压式工具栏按钮? 080 如何给工具栏按钮设置下拉箭头? 081 如何为工具栏添加动态真彩按钮? 082 如何为工具栏按钮添加文字? 083 如何为IE工具栏添加按钮? 084 如何在工具栏上加载动画? 085 如何在工具栏上加载组合框? 086 如何在工具栏上加载字体组合框? 087 如何使用代码获取工具栏的指针? 088 如何在对话框程序中加入工具栏? 089 如何控制工具栏的停靠位置? 090 如何使用对话栏? 091 如何增加状态栏窗格? 092 如何更新状态栏窗格? 093 如何关闭默认状态栏? 094 如何在状态栏上加载图像? 095 如何在状态栏上加载进度条? 096 如何在状态栏上显示滚动文本? 097 如何在状态栏上显示当前时间? 098 如何在状态栏上显示鼠标当前位置? 099 如何使用代码获取状态栏指针? 第6章 图标与光标 100 如何设置光标? 101 如何裁剪光标? 102 如何捕捉光标热区? 103 如何创建一个等待光标? 104 如何结束一个等待光标? 105 如何获取默认光标大小? 106 如何装入一个系统预定义光标? 107 如何获取系统图标? 108 如何获取默认图标大小? 109 如何获取应用程序图标? 110 如何设置应用程序图标? 111 如何在系统托盘中设置图标? 112 如何直接从文件中装入一个图标? 113 如何使应用程序标题栏图标旋转? 第7章 程序窗口 114 如何切分同视图窗口? 115 如何切分多视图窗口? 116 如何判断程序窗口是否为切分窗口? 117 如何创建非矩形窗口? 118 如何实现无标题窗口的拖动? 119 如何将应用程序窗口居中显示? 176 如何终止当前进程? 177 如何获取系统进程? 178 如何终止指定进程? 179 如何在程序中启动程序? 180 如何使用事件对象同步进程? 181 如何在两个执行程序间进行数据通信? 182 如何使用工作线程? 183 如何正常终止线程? 184 如何异常终止线程? 185 如何获取线程退出码? 186 如何使用线程优先级? 187 如何使用用户界面线程? 188 如何实现多线程多任务? 189 如何使用临界区同步线程? 190 如何调用帮助文件(.chm)? 第10章 字符串 191 如何对字符串进行连接? 192 如何对字符串进行比较? 193 如何从字符串中存取字符? 194 如何计算一个字符串的大小? 195 如何快速格式化一个字符串? 196 如何将CString类型转换成int类型? l97 如何将CString类型转换成loat类型? 198 如何将CString中的字符串赋值给字符指针? 199 如何折行显示字符串? 200 如何旋转显示字符串? 20l 如何显示星期月份字符串? 202 如何显示包括制表符的字符串? 203 如何使用BIG5显示一个字符串? 204 如何使字符串输出具有立体效果? 205 如何用省略号显示字符串的其余部分? 第11章 文件读写操作 206 如何打开文件? 207 如何关闭文件? 208 如何读文件? 209 如何写文件? 210 如何定位文件? 2ll 如何判断文件大小? 212 如何获取文件错误类型? 213 如何检测文件是否已经发生更改? 214 如何判断文件在磁盘上是否存在? 215 如何读写INI文件? 216 如何创建一个临时文件? 217 如何创建一个特大型文件? 218 如何创建一个文本文件? 219 如何删除一个文本文件? 220 如何更名一个文本文件? 221 如何对文本文件进行查找与替换? 222 如何从文本文件中读取一个字符串? 第12章 文件文件夹属-操作 223 如何判断文件只读属性? 224 如何设置文件只读属性? 225 如何判断文件隐藏属性? 226 如何设置文件隐藏属性? 227 如何判断文件归档属性? 228 如何设置文件归档属性? 229 如何取消文件所有属性? 230 如何获取文件大小? 231 如何获取文件类型? 232 如何获取系统所有文件类型? 233 如何获取文件创建时间? 234 如何获取文件修改时间? 235 如何获取文件访问时间? 236 如何设置文件创建时间? 237 如何设置文件修改时间? 238 如何设置文件访问时间? 239 如何获取文件夹创建时间? 240 如何获取文件修改时间? 241 如何获取文件夹访问时间? 242 如何设置文件夹创建时间? 243 如何设置文件修改时间? 244 如何设置文件夹访问时间? 245 如何判断文件夹真假? 第13章 文件文件夹系统操作 246 如何复制文件? 247 如何删除文件? 248 如何移动文件? 249 如何更名文件? 250 如何显示文件复制过程对话框? 251 如何复制文件夹? 252 如何创建文件夹? 253 如何删除文件夹? 254 如何更名文件夹? 255 如何创建多层文件夹? 256 如何删除多层文件夹? 第14章 系统控制操作 257 如何隐藏操作系统任务栏? 258 如何取消隐藏操作系统任务栏? 259 如何检索系统任务栏各窗口标题? 260 如何关闭计算机? 261 如何注销当前用户? 262 如何重新启动计算机? 263 如何关闭计算机并关闭电源? 264 如何设置系统启动自运行程序? 265 如何在程序中将其他窗口程序调至前台? 266 如何获取当前系统时间? 267 如何设置当前系统时间? 268 如何计算时间差? 269 如何获取系统显示元素的颜色? 270 如何获取系统当前的显示模式? 271 如何获取系统支持的显示模式? 272 如何设置系统当前的显示模式? 273 如何设置桌面墙纸? 274 如何删除桌面快捷方式? 275 如何清空回收站? 276 如何清空IE历史记录? 277 如何清除IE地址栏历史记录? 278 如何添加IE浏览器收藏夹内容? 279 如何使用默认浏览器打开指定网页? 280 如何清除上次登录用户历史记录? 281 如何强制操作系统只执行规定的程序? 282 如何在系统“控制面板/添加删除程序”中添加程序? 283 如何注册COM服务组件? 284 如何取消COM服务组件注册? 285 如何隐式链接DLL? 286 如何显式链接DLL? 287 如何使用AFX EXT CLASS导出类? 288 如何使用declspec(dllexport)导出DLL函数? 第15章 程序版权信息 289 如何查询程序说明? 290 如何查询程序开发商? 291 如何查询程序内部名称? 292 如何查询程序产品名称? 293 如何查询程序关联注释? 294 如何查询程序注册商标? 295 如何查询程序版权声明? 296 如何查询程序使用语言? 297 如何查询程序原始文件名? 298 如何查询程序私有版本信息? 299 如何查询程序特殊内部版本信息? 300 如何查询程序版本号? 301 如何查询程序产品版本号? 302 如何查询程序内部版本号? 303 如何查询程序产品专用部件号? 304 如何查询程序版本号的主版本号? 305 如何查询程序版本号的次版本号? 306 如何查询程序产品的内部版本号? 307 如何查询程序产品版本号的主版本号? 308 如何查询程序产品版本号的次版本号? 第16章 系统软件信息 309 如何获取用户名称? 310 如何获取计算机名称? 311 如何设置计算机名称? 312 如何获取计算机所有者名称? 313 如何获取计算机所有者单位名称? 314 如何获取操作系统安装序列号? 315 如何获取操作系统的产品名称? 316 如何获取IE浏览器的版本号? 317 如何获取Windows的版本号? 318 如何获取Windows的内建号? 319 如何获取Windows的版本名称? 320 如何获取当前文件夹的位置? 321 如何获取文件夹的根目录位置? 322 如何获取文件夹的上层目录位置? 323 如何获取文件夹中的所有文件? 324 如何获取文件夹中的所有子文件夹? 325 如何获取启动文件夹位置? 326 如何获取临时文件夹位置? 327 如何获取桌面文件夹位置? 328 如何获取字体文件夹位置? 329 如何获取网上邻居文件夹位置? 330 如何获取我的文档文件夹位置? 331 如何获取System文件夹位置? 332 如何获取Windows文件夹位置? 第17章 系统硬件信息 333 如何获取CPU名称? 334 如何获取CPU标识? 335 如何获取CPU制造商名称? 336 如何获取CPU主频? 337 如何获取CPU个数? 338 如何判断CPU是否支持3DNow? 339 如何判断CPU是否支持MMX? 340 如何判断是否提供安全特性? 341 如何判断低档处理器? 342 如何获取显卡BIOS版本号? 343 如何获取显卡BIOS更新日期? 344 如何获取系统BIOS版本号? 345 如何获取系统BIOS更新日期? 第18章 存储设备管理 346 如何获取磁盘序列号? 347 如何获取磁盘卷标名称? 348 如何设置磁盘卷标名称? 349 如何获取磁盘容量大小? 350 如何获取磁盘文件系统名称? 351 如何获取系统所有磁盘驱动器? 352 如何设置磁盘图标? 353 如何隐藏磁盘驱动器? 354 如何判断磁盘驱动器类型? 355 如何启用光驱的自动播放功能? 356 如何指定使用什么程序播放CD? 357 如何在程序中打开/关闭光驱? 358 如何获取系统内存的使用情况? 359 如何映射网络驱动器? 360 如何取消网络驱动器映射? 第19章 鼠标及键盘 361 如何禁止交换鼠标左右键? 362 如何判断鼠标左右键是否交换? 363 如何判断系统是否安装鼠标? 364 如何判断鼠标是否有滚轮? 365 如何禁止使用鼠标滚轮? 366 如何获取鼠标按键个数? 367 如何模仿鼠标操作? 368 如何跟踪鼠标当前位置? 369 如何获取鼠标活动范围? 370 如何获取鼠标双击范围大小? 371 如何获取鼠标双击响应速度? 372 如何设置鼠标双击响应速度? 373 如何判断鼠标单击标题栏操作? 374 如何判断鼠标是否与Ctrl键共同操作? 375 如何捕获键盘Home等虚键?. 376 如何设置键盘输入响应速度? 377 如何使用回车键切换输入焦点? 378 如何为应用程序自定义快捷键? 379 如何捕获AR和Shift+Alt组合键? 380 如何捕获Ctrl和Ctrl+Shift组合键? 381 如何捕获Ctrl、Ctrl+Alt和Ctrl+Alt+Shifl组合键? 第20章 声音和视频 382 如何调节系统音量? 383 如何设置背景音乐? 384 如何播放AVI动画文件? 385 如何播放VCD视频文件? 386 如何播放WAV简单声音文件? 387 如何播放系统默认声音文件? 388 如何使用MCI播放WAV声音文件? 389 如何使用MCI播放MIDI声音文件? 第21章 图形和图像 390 如何通过读取位图资源显示位图? 391 如何通过读取位图文件显示位图? 392 如何通过装入位图文件显示位图? 393 如何缩放显示位图? 394 如何截取当前屏幕? 395 如何任意裁剪图片? 396 如何利用掩码位图制作透明图片? 397 如何实现图形的拉伸显示效果? 398 如何通过位图文件直接得到位图大小? 399 如何获取屏幕上某点的颜色? 400 如何设置屏幕上某点的颜色? 401 如何读取与显示JPG等格式图像文件? 402 如何转换图像文件大小? 403 如何转换图像文件格式? 404 如何将彩色图像转换成黑白图像? 405 如何实现图像的底片化效果? 406 如何实现图像的雾化效果? 407 如何实现图像的锐化效果? 408 如何实现图像的柔化效果? 409 如何实现图像的马赛克效果? 410 如何实现图像的百叶窗效果? 411 如何复制图像? 412 如何剪切图像? 413 如何粘贴图像? 414 如何实现画线拉伸效果? 415 如何绘制渐变色图形? 416 如何绘制渐变色文字? 第22章 网络 417 如何初始化Socket? 418 如何创建Socket? 419 如何处理网络监听Socket? 420 如何处理C/S互连? 421 如何处理C/S数据发送? 422 如何处理C/S数据接收? 423 如何实现无连接的通信? 424 如何实现有连接的通信? 425 如何用有连接方式实现网络会议? 426 如何获取网卡地址? 427 如何扫描端口状态? 428 如何进行连续的Ping? 429 如何获取主机名和IP地址? 430 如何搜索局域网内的计算机? 431 如何创建拨号网络? 432 如何检查电子邮件数量? 433 如何发送和接收电子邮件? 434 如何连接FTP服务器? 435 如何获取FTP服务器的文件列表? 436 如何向FTP服务器上传文件? 437 如何从FTP服务器下载文件? 438 如何查询HTTP站点? 439 如何查询FTP站点? 440 如何查询Gopher站点? 第23章 数据库 441 如何使用ODBC连接数据源? 442 如何使用ODBC实现应用程序与数据库记录的交换? 443 如何使用ODBC浏览数据库记录? 444 如何使用ODBC增加数据库记录? 445 如何使用ODBC删除数据库记录? 446 如何使用ODBC修改数据库记录? 447 如何使用ODBC排序数据库记录? 448 如何使用ODBC查询数据库记录? 449 如何使用SQL语句查询排序数据厍记录? 450 如何使用ODBC创建EXCEL文件? 451 如何使用ODBC读取EXCEL文件信息? 452 如何获取系统已经安装的ODBC驱动程序? 453 如何安装Visual C++.NET中的MS Server服务管理器桌面引擎? 454 如何在Visual C++.NET中创建 MS SQL Server数据库? 455 如何使用.NET类库访问数据库? 456 如何使用DAO新建数据库? 457 如何使用DAO打开数据库? 458 如何使用DAO关闭数据库? 459 如何使用DAO新建数据库表? 460 如何使用DAO打开数据库表? 461 如何使用DAO删除数据库表? 462 如何使用DAO浏览数据库表字段? 463 如何使用DAO增加数据库表字段? 464 如何使用DAO删除数据库表字段? 465 如何使用DAO新建数据库表查询? 466 如何使用DAO浏览数据库表查询? 467 如何使用DAO删除数据库表查询? 468 如何使用DAO自定义记录集类? 469 如何使用DAO浏览数据库记录? 470 如何使用DAO增加数据库记录? 471 如何使用DAO删除数据库记录? 472 如何使用DAO修改数据库记录? 473 如何使用DAO查询数据库记录? 474 如何使用DAO排序数据库记录? 475 如何使用DAO处理数据库异常? 476 如何判断数据集是否允许更新? 477 如何实现ADO对象与数据源的连接? 478 如何导入ADO动态链接库? 479 如何使用ADO对象浏览数据库记录? 480 如何使用ADO对象增加数据库记录? 481 如何使用ADO对象删除数据库记录? 482 如何使用ADO对象修改数据库记录? 483 如何使用ADO对象排序数据库记录? 484 如何使用ADO对象查询数据库记录? 485 如何使用ADO处理数据库异常? 486 如何存取数据库图像字段? 487 如何创建数据库操作事务? 488 如何在程序中注册数据源? 489 如何创建ODBC数据源? 490 如何使用SQL模糊查询语句? 491 如何使用SQL语句检索时间段? 第24章 开发工具 492 如何设置条件断点? 493 如何设置堆栈大小? 494 如何产生全局惟一标识符? 495 如何删除项目文件中的类? 496 如何打开和编辑二进制文件? 497 如何检测代码括号是否匹配? 498 如何查看一个宏的原始定义? 499 如何添加.1ib文件到当前项目? 500 如何调整对话框模板上的控件的Tab键顺序?
注:第一卷的描述写错了,总共是三卷压缩包 Visual C++通用范例开发金典(附光盘)/开发专家 【作者】: 韦朴 陈泰生 【出版日期】:2008-06 【出版社】:电子工业出版社 【所属分类】: 图书 > 工业技术 【所属分类】: 图书 > 计算机与网络 > 程序语言与软件开发 【附属物】:光盘1张 【总 页 数】:631 【产品条码】:9787121065675 【语 种】:汉 【装  帧】:平装 【开  本】:259mmX184mm 【丛书名】:开发专家 【适合年龄群】:青年(14-20岁),研究人员,普通成人 【关键字】:C语言//程序设计 【首印年月】:2008-06 【本版年月】:2008-06 【本次出版年月】:2008-06 【版次印次】:第1版第1次 【简介】    Visual C++是Microsoft公司开发的可视化软件开发工具,具有简单、高效、功能强大等特点,是Windows环境下优秀的程序设计工具之一。本书系统全面地介绍了Visual C++软件——Microsoft Visual C++6.0的具体使用方法和操作技巧。全书按照Visual C++的实际应用共分为11章,主要内容包括:用户界面设计、文档应用程序设计、图形程序设计、文件I/O与串行化程序设计、多媒体程序设计、系统控制与注册表、数据库技术程序设计、网络、通信技术程序设计、打印程序设计、线程和进程程序设计、动态链接库和ActiveX控件等。    本书是各级程序开发人员的必备参考书,同时也非常适合大中专院校师生阅读。此外,本书也非常适于作为各类培训班的培训教程。 【目录】   第1章 用户界面设计    1.1 常用控件程序设计    1.1.1 静态控件和按钮范例    1.1.2 编辑框和旋转按钮控件范例    1.1.3 列表框控件范例    1.1.4 进展条、滚动条和滑动条控件范例    1.1.5 Tab控件、时间控件、列表控件和树控件范例    1.2 对话框程序设计    1.3 本章小结   第2章 文档应用程序设计    2.1 菜单程序设计    2.1.1 静态菜单设计    2.1.2 动态菜单设计    2.2 工具栏和状态栏程序设计    2.2.1 窗口外观修改    2.2.2 工具栏和状态栏    2.3 文档与视图程序设计    2.3.1 基于文本的编程    2.3.2 框架窗体的编程    2.4 本章小结   第3章 图形程序设计    3.1 基本图形绘制    3.1.1 简单直线的绘制    3.1.2 画刷    3.1.3 复杂图形的绘制    3.1.4 文本绘制    3.2 图像操作    3.2.1 图像显示    3.2.2 图像效果变化    3.2.3 图像基本操作    3.3 3D图形的绘制    3.4 本章小结   第4章 文件I/O与串行化程序设计    4.1 文件基本操作    4.1.1 文件的读、写操作    4.1.2 文档与串行化    4.2 高级文件操作    4.2.1 文件的删除与搜索    4.2.2 文件夹和文件目录    4.3 本章小结   第5章 多媒体程序设计    5.1 多媒体音频操作    5.2 多媒体视频操作    5.3 本章小结   第6章 系统控制与注册表    6.1 注册表相关操作    6.1.1 注册表的读取与写入    6.1.2 注册表的备份    6.1.3 注册表的恢复    6.1.4 设置注册表键值    6.1.5 删除子键    6.1.6 注册表枚举函数    6.2 系统控制    6.2.1 隐藏、显示文件    6.2.2 隐藏、显示文件夹    6.2.3 隐藏“我的电脑”    6.2.4 隐藏驱动器    6.2.5 隐藏“回收站”    6.2.6 隐藏“我的文档”    6.2.7 隐藏桌面上的所有图标    6.2.8 隐藏任务栏    6.2.9 禁用注册表    6.2.10 关闭计算机    6.2.11 注销当前用户    6.2.12 设置启动自动运行程序    6.2.13 设置、显示系统当前时间    6.2.14 获取当前显示模式    6.2.15 获取操作系统版本号    6.2.16 设置桌面墙纸
注:分卷一的说明写错了,总共三卷压缩包 Visual C++通用范例开发金典(附光盘)/开发专家 (分卷二/共三卷) 【作者】: 韦朴 陈泰生 【出版日期】:2008-06 【出版社】:电子工业出版社 【所属分类】: 图书 > 工业技术 【所属分类】: 图书 > 计算机与网络 > 程序语言与软件开发 【附属物】:光盘1张 【总 页 数】:631 【产品条码】:9787121065675 【语 种】:汉 【装  帧】:平装 【开  本】:259mmX184mm 【丛书名】:开发专家 【适合年龄群】:青年(14-20岁),研究人员,普通成人 【关键字】:C语言//程序设计 【首印年月】:2008-06 【本版年月】:2008-06 【本次出版年月】:2008-06 【版次印次】:第1版第1次 【简介】    Visual C++是Microsoft公司开发的可视化软件开发工具,具有简单、高效、功能强大等特点,是Windows环境下优秀的程序设计工具之一。本书系统全面地介绍了Visual C++软件——Microsoft Visual C++6.0的具体使用方法和操作技巧。全书按照Visual C++的实际应用共分为11章,主要内容包括:用户界面设计、文档应用程序设计、图形程序设计、文件I/O与串行化程序设计、多媒体程序设计、系统控制与注册表、数据库技术程序设计、网络、通信技术程序设计、打印程序设计、线程和进程程序设计、动态链接库和ActiveX控件等。    本书是各级程序开发人员的必备参考书,同时也非常适合大中专院校师生阅读。此外,本书也非常适于作为各类培训班的培训教程。 【目录】   第1章 用户界面设计    1.1 常用控件程序设计    1.1.1 静态控件和按钮范例    1.1.2 编辑框和旋转按钮控件范例    1.1.3 列表框控件范例    1.1.4 进展条、滚动条和滑动条控件范例    1.1.5 Tab控件、时间控件、列表控件和树控件范例    1.2 对话框程序设计    1.3 本章小结   第2章 文档应用程序设计    2.1 菜单程序设计    2.1.1 静态菜单设计    2.1.2 动态菜单设计    2.2 工具栏和状态栏程序设计    2.2.1 窗口外观修改    2.2.2 工具栏和状态栏    2.3 文档与视图程序设计    2.3.1 基于文本的编程    2.3.2 框架窗体的编程    2.4 本章小结   第3章 图形程序设计    3.1 基本图形绘制    3.1.1 简单直线的绘制    3.1.2 画刷    3.1.3 复杂图形的绘制    3.1.4 文本绘制    3.2 图像操作    3.2.1 图像显示    3.2.2 图像效果变化    3.2.3 图像基本操作    3.3 3D图形的绘制    3.4 本章小结   第4章 文件I/O与串行化程序设计    4.1 文件基本操作    4.1.1 文件的读、写操作    4.1.2 文档与串行化    4.2 高级文件操作    4.2.1 文件的删除与搜索    4.2.2 文件夹和文件目录    4.3 本章小结   第5章 多媒体程序设计    5.1 多媒体音频操作    5.2 多媒体视频操作    5.3 本章小结   第6章 系统控制与注册表    6.1 注册表相关操作    6.1.1 注册表的读取与写入    6.1.2 注册表的备份    6.1.3 注册表的恢复    6.1.4 设置注册表键值    6.1.5 删除子键    6.1.6 注册表枚举函数    6.2 系统控制    6.2.1 隐藏、显示文件    6.2.2 隐藏、显示文件夹    6.2.3 隐藏“我的电脑”    6.2.4 隐藏驱动器    6.2.5 隐藏“回收站”    6.2.6 隐藏“我的文档”    6.2.7 隐藏桌面上的所有图标    6.2.8 隐藏任务栏    6.2.9 禁用注册表    6.2.10 关闭计算机    6.2.11 注销当前用户    6.2.12 设置启动自动运行程序    6.2.13 设置、显示系统当前时间    6.2.14 获取当前显示模式    6.2.15 获取操作系统版本号    6.2.16 设置桌面墙纸    6.2.17 隐式链接DLL    6.2.18 显式链接DLL    6.3 IE设置    6.3.1 修改IE标题栏    6.3.2 修改IE默认主页    6.3.3 在IE中禁止显示工具栏    6.3.4 在IE中禁止显示状态栏    6.3.5 使打开的IE窗口最大化    6.3.6 清空地址栏历史记录    6.3.7 改变收藏夹的默认路径    6.3.8 显示IE工具栏中的【字体】按钮    6.3.9 删除网页链接中的下画线    6.3.10 设置IE的缓冲区路径    6.3.11 隐藏上次登录用户的记录    6.3.12 设置域名服务器超时    6.4 系统软件信息    6.4.1 获取系统注册用户名    6.4.2 获取系统注册单位名    6.4.3 获取当前用户名    6.4.4 获取计算机名    6.4.5 获取操作系统安装序列号    6.4.6 获取操作系统的产品名称    6.4.7 获取IE的版本号    6.4.8 获取Windows的版本号    6.4.9 获取Windows的内建号    6.4.10 获取Windows的版本名称    6.4.11 获取临时文件夹的位置    6.4.12 获取“桌面”文件夹的位置    6.4.13 获取字体文件夹的位置    6.4.14 获取“网上邻居”文件夹的位置    6.4.15 获取“我的文档”文件夹的位置    6.4.16 获取System文件夹的位置    6.4.17 获取Windows文件夹的位置    6.5 系统硬件信息    6.5.1 获取CPU名称    6.5.2 获取CPU标识    6.5.3 获取CPU制造商名称    6.5.4 获取CPU主频    6.5.5 获取CPU个数    6.5.6 获取显卡BIOS版本号    6.5.7 获取显卡BIOS的更新日期    6.5.8 获取系统BIOS版本号    6.5.9 获取系统BIOS的更新日期    6.6 存储设备管理    6.6.1 获取磁盘序列号    6.6.2 获取磁盘卷标名称    6.6.3 设置磁盘卷标名称    6.6.4 获取磁盘容量大小    6.6.5 获取磁盘剩余容量大小    6.6.6 获取磁盘“文件系统”名称    6.6.7 获取系统所有的磁盘驱动器    6.6.8 判断磁盘驱动器类型    6.7 本章小结   第7章 数据库技术程序设计    7.1 数据库的连接和遍历    7.1.1 数据库的连接    7.1.2 数据库的遍历    7.2 数据查询技术    7.2.1 基本查询    7.2.2 以时间为基础的查询    7.2.3 模糊查询    7.2.4 条件查询    7.2.5 统计汇总查询    7.2.6 分组查询    7.2.7 查询的排序    7.2.8 连接查询    7.2.9 子查询技术    7.2.10 合并查询    7.2.11 控件查询技术    7.3 数据的删除与更新    7.3.1 数据删除    7.3.2 数据更新    7.4 本章小结   第8章 网络、通信技术程序设计    8.1 基本网络操作    8.1.1 本地信息操作    8.1.2 获取网络信息    8.2 高级网络操作    8.3 基于串口的通信    8.4 本章小结   第9章 打印程序设计    9.1 基本打印操作    9.1.1 打印的基本框架    9.1.2 单文档打印    9.1.3 对话框打印    9.2 打印控制    9.2.1 打印参数获取    9.2.2 打印参数设置    9.3 本章小结   第10章 线程和进程程序设计    10.1 线程的创建和终止    10.2 线程同步    10.3 进程间通信    10.4 本章小结   第11章 动态链接库和ActiveX控件    11.1 动态链接库    11.2 ActiveX控件    11.3 本章小结   索引   参考文献
Visual C++通用范例开发金典(附光盘)/开发专家 Visual C++通用范例开发金典(第一卷、共两卷) 压缩包没有含光盘 【作者】: 韦朴 陈泰生 【出版日期】:2008-06 【出版社】:电子工业出版社 【所属分类】: 图书 > 工业技术 【所属分类】: 图书 > 计算机与网络 > 程序语言与软件开发 【附属物】:光盘1张 【总 页 数】:631 【产品条码】:9787121065675 【语 种】:汉 【装  帧】:平装 【开  本】:259mmX184mm 【丛书名】:开发专家 【适合年龄群】:青年(14-20岁),研究人员,普通成人 【关键字】:C语言//程序设计 【首印年月】:2008-06 【本版年月】:2008-06 【本次出版年月】:2008-06 【版次印次】:第1版第1次 【简介】    Visual C++是Microsoft公司开发的可视化软件开发工具,具有简单、高效、功能强大等特点,是Windows环境下优秀的程序设计工具之一。本书系统全面地介绍了Visual C++软件——Microsoft Visual C++6.0的具体使用方法和操作技巧。全书按照Visual C++的实际应用共分为11章,主要内容包括:用户界面设计、文档应用程序设计、图形程序设计、文件I/O与串行化程序设计、多媒体程序设计、系统控制与注册表、数据库技术程序设计、网络、通信技术程序设计、打印程序设计、线程和进程程序设计、动态链接库和ActiveX控件等。    本书是各级程序开发人员的必备参考书,同时也非常适合大中专院校师生阅读。此外,本书也非常适于作为各类培训班的培训教程。 【目录】   第1章 用户界面设计    1.1 常用控件程序设计    1.1.1 静态控件和按钮范例    1.1.2 编辑框和旋转按钮控件范例    1.1.3 列表框控件范例    1.1.4 进展条、滚动条和滑动条控件范例    1.1.5 Tab控件、时间控件、列表控件和树控件范例    1.2 对话框程序设计    1.3 本章小结   第2章 文档应用程序设计    2.1 菜单程序设计    2.1.1 静态菜单设计    2.1.2 动态菜单设计    2.2 工具栏和状态栏程序设计    2.2.1 窗口外观修改    2.2.2 工具栏和状态栏    2.3 文档与视图程序设计    2.3.1 基于文本的编程    2.3.2 框架窗体的编程    2.4 本章小结   第3章 图形程序设计    3.1 基本图形绘制    3.1.1 简单直线的绘制    3.1.2 画刷    3.1.3 复杂图形的绘制    3.1.4 文本绘制    3.2 图像操作    3.2.1 图像显示    3.2.2 图像效果变化    3.2.3 图像基本操作    3.3 3D图形的绘制    3.4 本章小结   第4章 文件I/O与串行化程序设计    4.1 文件基本操作    4.1.1 文件的读、写操作    4.1.2 文档与串行化    4.2 高级文件操作    4.2.1 文件的删除与搜索    4.2.2 文件夹和文件目录    4.3 本章小结   第5章 多媒体程序设计    5.1 多媒体音频操作    5.2 多媒体视频操作    5.3 本章小结   第6章 系统控制与注册表    6.1 注册表相关操作    6.1.1 注册表的读取与写入    6.1.2 注册表的备份    6.1.3 注册表的恢复    6.1.4 设置注册表键值    6.1.5 删除子键    6.1.6 注册表枚举函数    6.2 系统控制    6.2.1 隐藏、显示文件    6.2.2 隐藏、显示文件夹    6.2.3 隐藏“我的电脑”    6.2.4 隐藏驱动器    6.2.5 隐藏“回收站”    6.2.6 隐藏“我的文档”    6.2.7 隐藏桌面上的所有图标    6.2.8 隐藏任务栏    6.2.9 禁用注册表    6.2.10 关闭计算机    6.2.11 注销当前用户    6.2.12 设置启动自动运行程序    6.2.13 设置、显示系统当前时间    6.2.14 获取当前显示模式    6.2.15 获取操作系统版本号    6.2.16 设置桌面墙纸    6.2.17 隐式链接DLL    6.2.18 显式链接DLL    6.3 IE设置    6.3.1 修改IE标题栏    6.3.2 修改IE默认主页    6.3.3 在IE中禁止显示工具栏    6.3.4 在IE中禁止显示状态栏    6.3.5 使打开的IE窗口最大化    6.3.6 清空地址栏历史记录    6.3.7 改变收藏夹的默认路径    6.3.8 显示IE工具栏中的【字体】按钮    6.3.9 删除网页链接中的下画线    6.3.10 设置IE的缓冲区路径    6.3.11 隐藏上次登录用户的记录    6.3.12 设置域名服务器超时    6.4 系统软件信息    6.4.1 获取系统注册用户名    6.4.2 获取系统注册单位名    6.4.3 获取当前用户名    6.4.4 获取计算机名    6.4.5 获取操作系统安装序列号    6.4.6 获取操作系统的产品名称    6.4.7 获取IE的版本号    6.4.8 获取Windows的版本号    6.4.9 获取Windows的内建号    6.4.10 获取Windows的版本名称    6.4.11 获取临时文件夹的位置    6.4.12 获取“桌面”文件夹的位置    6.4.13 获取字体文件夹的位置    6.4.14 获取“网上邻居”文件夹的位置    6.4.15 获取“我的文档”文件夹的位置    6.4.16 获取System文件夹的位置    6.4.17 获取Windows文件夹的位置    6.5 系统硬件信息    6.5.1 获取CPU名称    6.5.2 获取CPU标识    6.5.3 获取CPU制造商名称    6.5.4 获取CPU主频    6.5.5 获取CPU个数    6.5.6 获取显卡BIOS版本号    6.5.7 获取显卡BIOS的更新日期    6.5.8 获取系统BIOS版本号    6.5.9 获取系统BIOS的更新日期    6.6 存储设备管理    6.6.1 获取磁盘序列号    6.6.2 获取磁盘卷标名称    6.6.3 设置磁盘卷标名称    6.6.4 获取磁盘容量大小    6.6.5 获取磁盘剩余容量大小    6.6.6 获取磁盘“文件系统”名称    6.6.7 获取系统所有的磁盘驱动器    6.6.8 判断磁盘驱动器类型    6.7 本章小结   第7章 数据库技术程序设计    7.1 数据库的连接和遍历    7.1.1 数据库的连接    7.1.2 数据库的遍历    7.2 数据查询技术    7.2.1 基本查询    7.2.2 以时间为基础的查询    7.2.3 模糊查询    7.2.4 条件查询    7.2.5 统计汇总查询    7.2.6 分组查询    7.2.7 查询的排序    7.2.8 连接查询    7.2.9 子查询技术    7.2.10 合并查询    7.2.11 控件查询技术    7.3 数据的删除与更新    7.3.1 数据删除    7.3.2 数据更新    7.4 本章小结   第8章 网络、通信技术程序设计    8.1 基本网络操作    8.1.1 本地信息操作    8.1.2 获取网络信息    8.2 高级网络操作    8.3 基于串口的通信    8.4 本章小结   第9章 打印程序设计    9.1 基本打印操作    9.1.1 打印的基本框架    9.1.2 单文档打印    9.1.3 对话框打印    9.2 打印控制    9.2.1 打印参数获取    9.2.2 打印参数设置    9.3 本章小结   第10章 线程和进程程序设计    10.1 线程的创建和终止    10.2 线程同步    10.3 进程间通信    10.4 本章小结   第11章 动态链接库和ActiveX控件    11.1 动态链接库    11.2 ActiveX控件    11.3 本章小结   索引   参考文献
软件简介   飞鸽传书(IP Messenger),是由日本人Shirouzu Hiroaki (白水 启章)所发明的免费软件, 是一款局域网内即时通信软件,基于 TCP/IP(UDP)。可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。不需要服务器支持, 支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等, 并且公开源代码. 系统要求   Microsoft Windows 95/98/Me/NT4.0/2000/XP/2003   95/98/NT4.0 ... 要求 comctl32.dll(公共控件) 的版本为 5.x 或更高.   (如果你安装的 IE 是 5.x 或更高版本, 那么就不必担心这个问题了)   注意: Windows 3.1(和 NT3.5x), 请使用 IP Messenger for Win16. 使用说明   < 安装/卸载 >   执行 setup.exe 你可以将 IPMsg 安装到指定目录, 或者重新注册到启动组.   如果需要删除 IPMsg, 请先从控制面板中卸载, 再手动删除 IPMsg 目录.   < 系统托盘区图标 >   左键双击图标, 即可打开发送消息窗口.   右键点击图标, 可进入 [服务设置], [离开] 等.   < 发送消息窗口 >   - 发送消息时, 若勾选了 [封装], 则接收者要先打开信封才能看到消息,   如果你还勾选了 [上锁], 则接收者在打开信封时还需要输入密码.   (密码是由接收者自己在 [服务设置] 中设置的)   - 若要发送文件/文件夹, 可直接将文件/文件夹拖入发送消息窗口   或在发送消息窗口上点击右键, 再选择发送文件或发送文件夹   - 传送文件/文件夹时, 当接收者还没有保存(下载)文件/文件夹时,   若发送者关闭或重启了 IPMsg, 则附带的文件信息将被清除,   接收者将不能继续接收(下载)到此文件.   - 用户列表前缀符号说明   ":" 表示用户处于离开模式.   "|" 表示用户使用的不是 2.0 以上版本的 IPMsg,   将不支持文件/文件夹的传送, 并且不支持通信数据加密.   "|"(短线) 表示只支持文件/文件夹的传送.   - 拖动列表表头标题项可改变其顺序, 并可点击右键选择"保存列表顺序"   - 在消息输入窗口中, 可使用 Ctrl+Tab 输入制表符 Tab.   - 在发送消息窗口上点击右键, 可以进入设置显示优先级, 选择工作组,   搜索用户(Ctrl+F), 传送文件, 传送文件夹, 保存列表顺序, 字体设置,   窗口大小设置, 固定窗口位置, 列表显示设置.   - 在用户名上点击右键, 可设置其显示优先级   优先级按由小到大的顺序排序   - 通过设置显示优先级, 可将经常联系的用户至于列表顶端,   或者隐藏不需要联系的用户   < 接收消息窗口 >   - 在接收消息窗口上点击右键, 可以进入字体设置,   窗口大小设置, 固定窗口位置.   - 接收消息窗口标题栏中的 "+" 或 "-" 表示通信数据使用了加密算法   "+" 表示 RSA/1024 位, blowfish/128 位加密   "-" 表示 RSA/512 位, RC2/40 位加密   - 如果你收到的消息附带了文件, 将会显示出附件按钮.   点击按钮即可保存文件.   < 其他 >   - 如果需要(通过路由器)连接到广域网, 则需要设置广播地址.   详见广域网设置(广播设置)   - 其它功能都很容易理解, 你试一试就明白了 操作技巧   1、隐藏/显示窗口Ctrl+D   2、按住Ctrl键再点[刷新]可保持现有用户,搜索新上线的用户   3、打开发送/接收消息窗口Ctrl+Alt+S/R(需要进行详细设置)   4、打开搜索窗口Ctrl+F   5、接收到多个文件,保存时可勾选[全部] 软件原理   局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。 因为 FreeEIM 的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。   开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就FreeEIM(飞鸽传书)中的文件文件夹的传输做详细的说明。   在FreeEIM(飞鸽传书)中,如果要进行文件或者文件夹的传输,首先需要做的就是消息的应答,通过UDP发送文件传输报文,另外的FreeEIM(飞鸽传书)客户端收到报文后,使用TCP协议发送应答报文,这样就开始进行文件的传输了。   这里开启两个线程,线程1负责文件的传送,线程2负责文件的接受,下边做一一说明。   首先,我们知道,可以发送多个文件,这些文件需要建立链表保存信息。   typedef struct file_info   {   struct file_info *next; //双向链表   struct file_info *forward;   char *file; //文件名   int type; //文件类型:文件或者文件夹   int size; //文件大小   struct sockaddr_in addr; //目标网络信息   } FILE_INFO;   [1]文件传送链表由专门的线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输的文件,表头非空,就开始发送报文,获得正确的应答后,就可以开始文件的传输了,文件传输结束,将相应的链表节点删除。这里借鉴了很多程序中使用非常广泛的“命名池”相关的概念,只不过这里我们使用的是“文件池”,可以这么认为,如果有文件要传输,可以不用考虑是否有文件正在传输,只要把要传输的文件放入 “文件池”就可以了 , 同时,不用考虑“文件池”的大小,线程1是文件池的服务线程,它检测文件池的大小,如果非空,就会逐次传输文件。   这里需要特别注意的就是关于文件夹的传输,这个FreeEIM(飞鸽传书)一个难点,应为对与文件夹的内容是没有显示的,需要我们逐次的判断,在飞鸽传书中是这么处理的,如果是一个文件夹,就发送文件属性为IPMSG_FILE_DIR的信息包,FreeEIM(飞鸽传书)客户端收到这个信息包后,就创建这个文件夹,然后发起发送的FreeEIM(飞鸽传书)客户端,进入文件夹,传送文件夹内的文件,如果该文件夹下,还有文件夹,使用相同的方法,在文件夹内的文件传送结束后,就发送FREEEIM_FILE_RETPARENT信息包,接受的FREEEI_FILE_RETP报文的FreeEIM(飞鸽传书)客户端,执行返回上一级目录,FreeEIM(飞鸽传书)发送端,就需发送目录下的文件。这样循环操作,最终完成文件的传输,这个过程比较难以理解。   有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空时。文件传输会遇到文件读写问题,有的文件发送是被打开了,这样会造成访问违规,所以要有相应的处理,才能让程序更加稳健。   程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信息读取出来,当然,这个包里有用户的IP,用户名,性别等等。这样,在用户列表里就多了一个用户了。他的用户检查方式就如此简单而已。至于跨网段的实现,只需简单地修改一下广播地址就行了,如果不考虑速度,你可以给整个internet发广播消息。 消息发送,文件传输这些功能,都比较简单,如果你会网络编程,给你对方IP地址,这些功能实现起来再简单不过了。语音、视屏等,只需编写一些语音视频采集代码,传书的话,就像传文件一样。这里给段广播消息的实现代码吧:   // 发送广播登陆消息   void EM_UserLogin::SendLogin_BC(LPEM_DATA msg)   {   SOCKET m_socket;   m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);   if (INVALID_SOCKET == m_socket)   {   MessageBox(0, "socket failed.", NULL, MB_OK);   }   SOCKADDR_IN sin;sin.sin_addr.s_addr = htonl(INADDR_BROADCAST);   sin.sin_family = AF_INET;   sin.sin_port = htons(BROADCAST_SEND_PORT);BOOL bOpt = TRUE;   if (SOCKET_ERROR == setsockopt(m_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt)))   {   // Error occurred   ::MessageBox(0,"BC setsockopt error.",0,0);   return;   }   char *tmpBuf = msg->GetBuffer();   if (SOCKET_ERROR == sendto(m_socket, tmpBuf, msg->GetLength(), 0, (PSOCKADDR)&sin, sizeof(sin)))   {   // Error occurred   ::MessageBox(0,"BC sendto error.",0,0);   return;   }closesocket(m_socket);    相关信息   - 所有的设置信息都保存在注册表的以下位置:   \\HKEY_CURRENT_USER\Software\HSTools\   用户密码以不可逆加密方式存储.   *******************************************************************   * 如果你忘记了密码, 可以在注册表中将此键值删除 *   * \\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr *   *******************************************************************   - 本软件使用的默认端口为 2425   若仅使用 UDP 协议的端口, 将不能传送文件/文件夹   (如果安装了防火墙, 则必须打开相应的 TCP 和 UDP 端口)   - 本软件为自由软件, 你可以随意传播, 但源码使用请参见许可协议.   - 只有在启动或退出程序, 使用离开模式, 刷新在线用户时 IPMsg 才会进行消息广播.   - 本软件由 Microsoft Visual C++ 6.0 编译 广域网设置(广播设置)   - 主机号全部为 1 的 IP 地址, 即广播地址   例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为   aaa.bbb.ccc.ddd, 其广播地址即为: aaa.bbb.ccc.255   若对方处于另一个私有子网中, 广播可能无效.   - 更多问题, 请参阅相关资料或咨询你的网络管理员.   - 若两台主机的连接经过了多个路由器, 请直接指定对方IP地址   - 拨号上网用户请勾选 [拨号连接]   当刷新在线用户列表时, 列表不会被清空 补充   - 启动飞鸽传书前, 你可以指定其运行时使用的端口,   且可以使用不同的端口打开多个窗口. 用法如下:   ipmsg.exe 2426 (你可在快捷方式上设置)   但是你只能与同时也使用该端口的用户通信.   - 所以你尽可选用你喜欢的端口运行本软件.   介于 10000 至 60000 可能更安全些.   你也可以咨询你的网络管理员.   - 如果有多个网卡(IP), 你可以将飞鸽传书与指定的网卡(IP)进行绑定.   命令格式如下(你可以在快捷方式上设置):   ipmsg.exe [端口] /NIC IP地址   例如:   C:\>ipmsg.exe /NIC 192.168.10.100   - 支持命令方式发送消息   命令格式如下:   ipmsg.exe [端口] /MSG [/LOG][/SEAL] <主机名或IP地址> <消息>   例如:   C:\>ipmsg.exe /MSG /SEAL localhost Hello.    支持   - IPMsg 的技术讨论区是开放的.   如果你想订阅相关邮件, 请联系 ipmsg-subscribe@ring.gr.jp   - 欢迎报告 bug, 以及提出建议   - 如果你有任何疑问, 请 E-mail 联系.   shirouzu@h.email.ne.jp   中文版可联系阿志: hiwyz@163.net   - 发送错误报告, 请勿必记录以下信息:   软件版本, 操作系统, 故障描述, 以及故障重现方法等. 更新历史   ver 1.00 ... 日文版 (1996/08/19)   ver 1.31 ... 英文版/日文版 (1997/09/01)   ver 2.00 ... 英文版/日文版 (2002/11/19)   支持文件/文件夹传送   支持通信数据加密   ver 2.03 ... Bug 修正 (文件传送引起缓冲溢出)   广播设置支持主机地址(FQDN)解析   ver 2.04 ... 增加绑定网卡(IP)功能   ver 2.05 ... Bug 修正 (2.04版当激活发送/接收消息窗口时,无法注销/关闭系统)   ver 2.06 ... 很小的调整   ver 2007 ... 全面调整软件的界面可用性、性能稳定性 注意:本版本为 IPMSG 2.06版 编译环境: WINXP & VS2005, 可正确编译。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧