鱼C论坛

 找回密码
 立即注册
查看: 6027|回复: 28

[技术交流] 文章防复制功能

[复制链接]
发表于 2023-2-3 23:20:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 额外减小 于 2023-2-6 15:34 编辑

大家好,我今天分享的是"通过在行末添加乱码使得他人无法私自复制转载文章"的程序(自创)(仅在本论坛有效)SXv!sMW*
qD^3:rP;w|
实测:'{td

1

1
bR_K!

2

2
5vA\cJ~)
fT^
话不多说,直接上代码,注释给你写好了,如有不明白可在评论区交流。 <&`
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4. #include <math.h>
  5. #include <time.h>

  6. // 原理:乱码两侧加上  [color=White]...[/color]

  7. char * make_str(int random,char * _Dest,int length);  //  创建乱码字符串
  8. char * add_text(int random,char * _Dest,const char * line_str);  //  在行末添加乱码字符串
  9. int CopyToClipboard(const char* pszData, const int nDataLen);  //  将修改后的全文复制到剪贴板
  10. void _clear(char * str,int len);  //  将数组归零(防止先前的内容影响后面的内容)

  11. char * make_str(int random,char * _Dest,int length)
  12. {
  13. time_t t;
  14. time(&t);
  15. srand(random);
  16. for(int i=0;i<length-1;i++)  //  在ASCII字符表的可显示字符部分(32~126)寻找组成乱码的字符
  17. {
  18. srand((unsigned)(t+(i+3154)*(i+314)+rand()*(i+2)));  //  重置种子
  19. _Dest[i]=abs(rand())%95+32;
  20. }

  21. return _Dest;
  22. }

  23. char * add_text(int random,char * _Dest,const char * line_str)
  24. {
  25. time_t t;
  26. srand(random);
  27. int length=abs(rand())%10+5;  //  乱码长度(5~14字符)
  28. char random_str[15]={'\0'};
  29. strcpy(_Dest,line_str);
  30. strcat(_Dest,"[color=White]");
  31. strcat(_Dest,make_str(random,random_str,length));
  32. strcat(_Dest,"[/color]");

  33. return _Dest;
  34. }

  35. int CopyToClipboard(const char* pszData, const int nDataLen)
  36. {
  37.     if(OpenClipboard(NULL))
  38.     {
  39.         EmptyClipboard();
  40.         HGLOBAL clipbuffer;
  41.         char *buffer;
  42.         clipbuffer = GlobalAlloc(GMEM_DDESHARE, nDataLen+1);
  43.         buffer = (char *)GlobalLock(clipbuffer);
  44.         strcpy(buffer, pszData);
  45.         GlobalUnlock(clipbuffer);
  46.         SetClipboardData(CF_TEXT, clipbuffer);
  47.         CloseClipboard();
  48.         return 0;
  49.     }
  50.     return 1;
  51. }

  52. void _clear(char * str,int len)
  53. {
  54. for(int i=0;i<len;i++)
  55. {
  56. str[i]='\0';  //  重新初始化数组
  57. }
  58. }

  59. int main(void)
  60. {
  61. char one_line[1000]={'\0'},temp[1000]={'\0'},whole_text[100000]={'\0'},ch;   //数组长度:代表每行长度不超过1000字节,全文长度不超过100000字节
  62. int Lcount=0,Tcount=0,random;
  63. time_t t;
  64. srand((unsigned)time(&t));
  65. random=rand();
  66. while((ch=getchar())!=EOF)  //  ctrl+Z
  67. {
  68. if(ch=='\n')  //  将一行的内容加上换行符连接到全文字符串
  69. {
  70. strcat(whole_text,add_text(random,temp,one_line));
  71. strcat(whole_text,"\n");
  72. Lcount=0;
  73. _clear(one_line,1000);
  74. srand(random);  
  75. random+=rand();  //重置 random 数值
  76. }
  77. else
  78. {
  79. one_line[Lcount]=ch;
  80. Lcount++;
  81. }
  82. Tcount++;  //  统计全文字符数
  83. }

  84. CopyToClipboard(whole_text,100000);

  85. system("cls");
  86. printf("处理后的内容已经复制到剪贴板!\n\n感谢您的使用,再见!\n");
  87. MessageBoxA(NULL,"处理后的内容已经复制到剪贴板!\n感谢您的使用,再见!","提示",MB_ICONINFORMATION);

  88. return 0;
  89. }
复制代码
&nyrwVId05
]Vkl>O#Bx>kP1
注意事项%0(MBqve0
l;]G]pSb
游客,如果您要查看本帖隐藏内容请回复
B1H&<;7G}y'#B


更新:按小甲鱼老板的要求,我已改好了代码,主要增加了避开【code】标签的功能,从而更加方便。
不过改进后的程序如果接收到的"【code】标签与【/code】标签数目不同,则无法正常地将每一行都填上乱码。
所以奉劝一些不正经的用户好自为之(不是)
话不多说,上代码
对不起:因为代码中涉及到“code”标签的字符串,会被系统识别成代码段,所以我只好发文件模式了
防复制.zip (1.63 KB, 下载次数: 1)

刚好150行,挺整的。
删去了一些不重要的代码。
Linux,Mac用户只需要把代码中的"CopyToClipboard"函数改为stdout或输出到文件即可正常编译运行。(不知道system函数要不要改,你看着办吧)

评分

参与人数 5荣誉 +15 鱼币 +12 贡献 +8 收起 理由
hziyan + 1 + 1 鱼C有你更精彩^_^
嘉岳呀 + 5 + 5 + 3
zsy0226 + 1 + 1 鱼C有你更精彩^_^
sfqxx + 3 + 2 没鱼币可领了
liuhongrun2022 + 5 + 5 + 3 快点升级

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-2-3 23:38:05 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 00:37:48 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-2-4 00:39:49 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 01:40:08 | 显示全部楼层

回帖奖励 +1 鱼币

可以丫!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 01:42:48 | 显示全部楼层
代码段是使用 code 标签包裹,可以添加代码让其避开 code 即可。

评分

参与人数 1荣誉 +2 鱼币 +1 收起 理由
额外减小 + 2 + 1 谢谢老师点评。这就改~

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 08:04:11 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-4 08:33:34 | 显示全部楼层
本帖最后由 liuhongrun2022 于 2023-2-4 08:36 编辑


但是就不能用背景了

评分

参与人数 1鱼币 +2 收起 理由
额外减小 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 08:55:48 | 显示全部楼层
牛逼

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-4 09:37:10 | 显示全部楼层

评分

参与人数 1荣誉 +1 收起 理由
额外减小 + 1 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-4 15:39:27 | 显示全部楼层
我试试
评分KA3[g[0T/
a@c!+N!!;H
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-4 18:50:53 | 显示全部楼层
测试
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     printf("hello?");
  5.     return 0;
  6. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-5 09:39:53 | 显示全部楼层
学习,学习。

评分

参与人数 1鱼币 +1 收起 理由
额外减小 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-5 14:45:34 | 显示全部楼层
注意事项第3、4条可修改的参数能注释一下吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 15:51:13 | 显示全部楼层
嘉岳呀 发表于 2023-2-5 14:45
注意事项第3、4条可修改的参数能注释一下吗?

可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 15:54:26 | 显示全部楼层
嘉岳呀 发表于 2023-2-5 14:45
注意事项第3、4条可修改的参数能注释一下吗?

第70行已注释

评分

参与人数 1荣誉 +2 贡献 +2 收起 理由
sfqxx + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2023-2-5 20:25:52 | 显示全部楼层
太强了,想起甲鱼的课后作业啥的都是有乱码的

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 23:40:57 | 显示全部楼层
hziyan 发表于 2023-2-5 20:25
太强了,想起甲鱼的课后作业啥的都是有乱码的

对,我就是受到这个启发做的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-6 14:38:03 | 显示全部楼层
测试
  1. #include <windows.h>
复制代码
[/code]
[code]#include <stdlib.h>
#pragma comment(lib,"....lib")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-6 14:50:50 | 显示全部楼层
liuhongrun2022 发表于 2023-2-4 08:33
但是就不能用背景了

为什么
我觉得可以啊...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表