直接利用剪切板处理B站网页视频链接

程序源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

//将内容写入剪切板
int write_clipboard(char *strText);

//从剪切板中读取内容
int get_clipboard(char *str);

int main(void){

	//定义从剪切板传入的字符串
	char import[195] = {0};

	//从剪切板中截取视频识别相关代码
	char middle[42] = {0};

	//定义一个总长为三段相加的空字符串
	char full[302] = {0};  

	//字符串的头部,即处理之后的链接的前部分,写死在程序中
	char *start = (char *)"<iframe src=\"//player.bilibili.com/player.html?aid=";

	//字符串的结尾,即处理之后的链接的后部分,写死在程序中
	char *end = (char *)"&page=1&high_quality=1&danmaku=0\" allowfullscreen=\"allowfullscreen\" width=\"100%\" height=\"500\" scrolling=\"no\" frameborder=\"0\" sandbox=\"allow-top-navigation allow-same-origin allow-forms allow-scripts\"></iframe>";
	
	//从剪切板读取字符传入import
	get_clipboard(import);

	//字符串的中间部分,作测试用
	//char *middle = (char *)"375588815&bvid=BV1so4y1m7U5&cid=339262048";

	//获取字符串的中间部分,放入middle中
	for(int i = 0; i<41; i++){
		middle[i] = import[51+i];
	}

	//将字符串的各部分连接起来放到full中
	strcat(full,start);
	strcat(full,middle);
	strcat(full,end);

	//将字符串输出测试
	printf("%s",full);
	
	//将处理完成的字符串写入到剪切板
	write_clipboard(full);

	//系统暂停,浏览输出结果
	system("pause");
	return 0;

}

int write_clipboard(char *strText)
{

    // 打开剪贴板   
    if (!OpenClipboard(NULL)|| !EmptyClipboard())    
    {   
        printf("打开或清空剪切板出错!\n");   
        return -1;   
    }   
    HGLOBAL hMen;   

    // 分配全局内存    
    hMen = GlobalAlloc(GMEM_MOVEABLE, ((strlen(strText)+1)*sizeof(TCHAR)));    
    if (!hMen)   
    {   
        printf("分配全局内存出错!\n");

        // 关闭剪切板    
        CloseClipboard();   
        return -1;         
    }   

    // 把数据拷贝考全局内存中   
    // 锁住内存区    
    LPSTR lpStr = (LPSTR)GlobalLock(hMen); 

    // 内存复制   
    memcpy(lpStr, strText, ((strlen(strText))*sizeof(TCHAR)));   

    // 字符结束符    
    lpStr[strlen(strText)] = (TCHAR)0;   

    // 释放锁    
    GlobalUnlock(hMen);   

    // 把内存中的数据放到剪切板上   
    SetClipboardData(CF_TEXT, hMen);   
    CloseClipboard();   
    return 0; 

}

int get_clipboard(char *str){

	//局部变量
	char *pbuf = NULL;

	//剪切板句柄
	HANDLE hclip;
 
	//打开剪切板,获取里面的数据
	if(OpenClipboard(NULL) == 0){
		printf("打开剪切板失败!\n");
		return -1;
	}

	//判断剪切板当中的数据是不是文本类型的
	if(!IsClipboardFormatAvailable(CF_TEXT)){
		printf("剪切板当中的数据类型不匹配!\n");

		//关闭剪切板,不然其他程序无法正常使用剪切板
		CloseClipboard();
		return -1;
	}

	//获取剪切板里面的数据
    hclip = GetClipboardData(CF_TEXT);

	//加锁,返回一个VOID类型的指针
	pbuf = (char *)GlobalLock(hclip);

	//解锁
	GlobalUnlock(hclip);
	
	//将剪切板里面所有字符传入给参数
	while(1){
		
		//如果到了字符串末尾就退出循环
		if(*pbuf == 0){
			break;
		}
		
		//定义一个用于循环的局部变量
		int i = 0;

		do{

			//将读取到的字母或数字字符赋给word
			str[i] = *pbuf;

			//将指针指向下一个字符处
			++pbuf;
			++i;
		}while(*pbuf);

		//添加字符串结束
		str[i] = '\0';
	}

	//关闭剪切板,不然其他程序无法正常0使用剪切板
	CloseClipboard();
	return 0;

}

 

程序运行结果示例

不打印输出内容,黑框直接一闪而过版本

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

//将内容写入剪切板
int write_clipboard(char *strText);

//从剪切板中读取内容
int get_clipboard(char *str);

int main(void){

	//定义从剪切板传入的字符串
	char import[195] = {0};

	//从剪切板中截取视频识别相关代码
	char middle[42] = {0};

	//定义一个总长为三段相加的空字符串
	char full[302] = {0};  

	//字符串的头部,即处理之后的链接的前部分,写死在程序中
	char *start = (char *)"<iframe src=\"//player.bilibili.com/player.html?aid=";

	//字符串的结尾,即处理之后的链接的后部分,写死在程序中
	char *end = (char *)"&page=1&high_quality=1&danmaku=0\" allowfullscreen=\"allowfullscreen\" width=\"100%\" height=\"500\" scrolling=\"no\" frameborder=\"0\" sandbox=\"allow-top-navigation allow-same-origin allow-forms allow-scripts\"></iframe>";
	
	//从剪切板读取字符传入import
	get_clipboard(import);

	//字符串的中间部分,作测试用
	//char *middle = (char *)"375588815&bvid=BV1so4y1m7U5&cid=339262048";

	//获取字符串的中间部分,放入middle中
	for(int i = 0; i<41; i++){
		middle[i] = import[51+i];
	}

	//将字符串的各部分连接起来放到full中
	strcat(full,start);
	strcat(full,middle);
	strcat(full,end);

	//将字符串输出测试
	//printf("%s",full);
	
	//将处理完成的字符串写入到剪切板
	write_clipboard(full);

	//系统暂停,浏览输出结果
	//system("pause");
	return 0;

}

int write_clipboard(char *strText)
{

    // 打开剪贴板   
    if (!OpenClipboard(NULL)|| !EmptyClipboard())    
    {   
        printf("打开或清空剪切板出错!\n");   
        return -1;   
    }   
    HGLOBAL hMen;   

    // 分配全局内存    
    hMen = GlobalAlloc(GMEM_MOVEABLE, ((strlen(strText)+1)*sizeof(TCHAR)));    
    if (!hMen)   
    {   
        printf("分配全局内存出错!\n");

        // 关闭剪切板    
        CloseClipboard();   
        return -1;         
    }   

    // 把数据拷贝考全局内存中   
    // 锁住内存区    
    LPSTR lpStr = (LPSTR)GlobalLock(hMen); 

    // 内存复制   
    memcpy(lpStr, strText, ((strlen(strText))*sizeof(TCHAR)));   

    // 字符结束符    
    lpStr[strlen(strText)] = (TCHAR)0;   

    // 释放锁    
    GlobalUnlock(hMen);   

    // 把内存中的数据放到剪切板上   
    SetClipboardData(CF_TEXT, hMen);   
    CloseClipboard();   
    return 0; 

}

int get_clipboard(char *str){

	//局部变量
	char *pbuf = NULL;

	//剪切板句柄
	HANDLE hclip;
 
	//打开剪切板,获取里面的数据
	if(OpenClipboard(NULL) == 0){
		printf("打开剪切板失败!\n");
		return -1;
	}

	//判断剪切板当中的数据是不是文本类型的
	if(!IsClipboardFormatAvailable(CF_TEXT)){
		printf("剪切板当中的数据类型不匹配!\n");

		//关闭剪切板,不然其他程序无法正常使用剪切板
		CloseClipboard();
		return -1;
	}

	//获取剪切板里面的数据
    hclip = GetClipboardData(CF_TEXT);

	//加锁,返回一个VOID类型的指针
	pbuf = (char *)GlobalLock(hclip);

	//解锁
	GlobalUnlock(hclip);
	
	//将剪切板里面所有字符传入给参数
	while(1){
		
		//如果到了字符串末尾就退出循环
		if(*pbuf == 0){
			break;
		}
		
		//定义一个用于循环的局部变量
		int i = 0;

		do{

			//将读取到的字母或数字字符赋给word
			str[i] = *pbuf;

			//将指针指向下一个字符处
			++pbuf;
			++i;
		}while(*pbuf);

		//添加字符串结束
		str[i] = '\0';
	}

	//关闭剪切板,不然其他程序无法正常0使用剪切板
	CloseClipboard();
	return 0;

}

 

THE END
分享
二维码
海报
直接利用剪切板处理B站网页视频链接
程序源码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> //将内容写入剪切板 int write……