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

来源:互联网 发布:中标数据查询网 编辑:程序博客网 时间:2024/05/22 05:12

最近做报表经常要根据日志文件统计数据,再把数据填入到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();}


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

1 0