クリップボードの保存プログラム | vicのブログ

vicのブログ

ツール系やソフト開発について書こうと思っています。
書き込み大歓迎です。
間違いとかもっといい方法とかあったらご指摘いただけるとありがたいです。
質問をいただいたら、記事をもっとわかりやすく変更します。

古いUSBメモリーを確認していたら、

昔に作ったソースが出てきた。

懐かしいのでとりあえず、ここに貼り付け。


単純なテストプログラムで、コンソールアプリケーション!



#include <stdio.h>
#include <string.h>
#include <Windows.h>

char* DispClipText(void);
void Cut_0D0D(char *pR );


void main( int argc, char *argv[], char *envp[] )
{
FILE* fp;
char* ptr;
errno_t err;

printf("テキストのクリップボードの保存 %s\n",argv[0]);

ptr = DispClipText();

if(ptr!=NULL){
int size = strlen(ptr)+1 ; // null分追加
char* strBuf;
strBuf = new char[size]; // new

err=fopen_s(&fp,"ClpBdSave.txt","wb+");
if(err){
printf( "The file was not opened\n" );

printf("\nリターンキーを押してください。\n");
getchar();// 画面が閉じられないように
return;
}
//sprintf_s(strBuf,"%s",ptr); //err
memcpy_s(strBuf,size,ptr,size);
Cut_0D0D( strBuf );

//fprintf_s(fp,"%s\0",ptr);
fwrite(ptr,size,1,fp);
fclose(fp);

delete [] strBuf; // delete


printf("%s\n", ptr);
}else{
printf("クリップボードにテキストデータはない。\n");
}

printf("\nリターンキーを押してください。\n");
getchar();// 画面が閉じられないように

return;
}
// テキストのクリップボード内容の先頭アドレスを取得する //
/// 戻り値: 先頭アドレス または NULL=テキストデータは存在しない
char* DispClipText(void)
{
HANDLE hText;
char *pText;

OpenClipboard(NULL);

hText = GetClipboardData(CF_TEXT);
if(hText == NULL) {
pText = NULL;
// printf("クリップボードにテキストデータはない。\n");
} else {
pText = (char *)GlobalLock(hText);
// printf("%s\n", pText);
GlobalUnlock(hText);
}

CloseClipboard();

return pText;
}
///

// 0D 0D >> 0D に変換する (自己書き換えなので注意)
// 引数 文字列の先頭アドレス
void Cut_0D0D(char *pR )
{
char *pW = pR;
while( *pR ){
printf("%02x;",*pR);
if(*pR==0x0d && *(pR-1)==0x0d )
--pW;
*pW++ = *pR++;
}


}