数据复制专用代码:监听剪切板并处理剪切板内容后放到剪切板

最近做报表经常要根据日志文件统计数据,再把数据填入到excel。

日志形如:

缴费总笔数                   12
缴费用户数                   123
缴费金额数                1234.1
缴费50元以上笔数              321
缴费50元以上用户数            342
缴费50元以上金额         11.75
缴费100元以上笔数              42


其中的文字和排列顺序都是excel中既定的,需要单独把数据复制进去。每次都单独一个数据复制非常麻烦,就考虑一次复制所有文本,然后剪切板里自动去掉文字剩下数字,粘贴到excel表中就正好合适。


例如复制日志数据,程序处理后,剪切板中就是如下数据,只需要打开程序开启监听就可以。

 12
 123
 1234.1
 321
 342
 11.75
 42                       


关键函数如下


void ChangeContent(char* str)
{
	char * line = (char*)malloc(50);
	char * newstr = (char*)malloc(sizeof(str));
	int i=0,len=0;
	int length = strlen(str);
	bool find=false;

	ZeroMemory(newstr,sizeof(newstr));
	if (str != NULL && strcmp(str,"")!=0)
	{
		while (len<length)
		{
			find = false;
			ZeroMemory(line,sizeof(line));
			for (;*str!='\n' && len<length;str++)
			{
				//提取一行数字 i代表数字的长度
				if (*str == ' ' && *(str+1)!=' ') 
				{
					line=str;
					i=-1;
					find = true;
				}
				if (find) i++;
				len++;
			}
			*(line+i+2)='\0';
			lstrcat(newstr,line);
			if (find) str+=i;
			if (i == 0) len++; else len+=i;
			//ZeroMemory(str,sizeof(str));
		}
	}

	OpenClipboard(NULL);
	EmptyClipboard();
	HGLOBAL hMen;
	 hMen = GlobalAlloc(GMEM_MOVEABLE, ((strlen(newstr)+1)*sizeof(TCHAR)));    
	 LPSTR lpStr = (LPSTR)GlobalLock(hMen);    
	strcpy(lpStr,newstr);
	 // 释放锁    
	 GlobalUnlock(hMen);  
	 // 把内存中的数据放到剪切板上   
	 SetClipboardData(CF_TEXT, hMen); 
	 change = true;
	 CloseClipboard();
}


可执行文件待会儿也传一个

猜你喜欢

转载自blog.csdn.net/xyydyyqf/article/details/38684615