鱼C论坛

 找回密码
 立即注册
查看: 5163|回复: 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^
话不多说,直接上代码,注释给你写好了,如有不明白可在评论区交流。 <&`
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <math.h>
#include <time.h>

// 原理:乱码两侧加上  ...

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

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

return _Dest;
}

char * add_text(int random,char * _Dest,const char * line_str)
{
time_t t;
srand(random);
int length=abs(rand())%10+5;  //  乱码长度(5~14字符) 
char random_str[15]={'\0'};
strcpy(_Dest,line_str);
strcat(_Dest,"");
strcat(_Dest,make_str(random,random_str,length));
strcat(_Dest,"");

return _Dest;
}

int CopyToClipboard(const char* pszData, const int nDataLen)
{
    if(OpenClipboard(NULL))
    {
        EmptyClipboard();
        HGLOBAL clipbuffer;
        char *buffer;
        clipbuffer = GlobalAlloc(GMEM_DDESHARE, nDataLen+1);
        buffer = (char *)GlobalLock(clipbuffer);
        strcpy(buffer, pszData);
        GlobalUnlock(clipbuffer);
        SetClipboardData(CF_TEXT, clipbuffer);
        CloseClipboard();
        return 0;
    }
    return 1;
}

void _clear(char * str,int len)
{
for(int i=0;i<len;i++)
{
str[i]='\0';  //  重新初始化数组 
}
}

int main(void)
{
char one_line[1000]={'\0'},temp[1000]={'\0'},whole_text[100000]={'\0'},ch;   //数组长度:代表每行长度不超过1000字节,全文长度不超过100000字节
int Lcount=0,Tcount=0,random;
time_t t;
srand((unsigned)time(&t));
random=rand();
while((ch=getchar())!=EOF)  //  ctrl+Z
{
if(ch=='\n')  //  将一行的内容加上换行符连接到全文字符串 
{
strcat(whole_text,add_text(random,temp,one_line));
strcat(whole_text,"\n");
Lcount=0;
_clear(one_line,1000);
srand(random);  
random+=rand();  //重置 random 数值 
}
else
{
one_line[Lcount]=ch;
Lcount++;
}
Tcount++;  //  统计全文字符数 
}

CopyToClipboard(whole_text,100000);

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

return 0;
}
&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 快点升级

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-2-3 23:38:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-2-4 00:39:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +1 鱼币

可以丫!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


但是就不能用背景了

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-4 15:39:27 | 显示全部楼层
我试试
评分KA3[g[0T/
a@c!+N!!;H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main()
{
    printf("hello?");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-5 14:45:34 | 显示全部楼层
注意事项第3、4条可修改的参数能注释一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

第70行已注释

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对,我就是受到这个启发做的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-6 14:38:03 | 显示全部楼层
测试
#include <windows.h>
[/code]
[code]#include <stdlib.h>
#pragma comment(lib,"....lib")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

为什么
我觉得可以啊...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-22 12:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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