クリップボードがおかしい
Posted: 2013年2月28日(木) 09:49
プログラミングの問題というより、パソコンの問題のようです。
Windows Vista SP2 32ビット
Dev-C++5.4.0 gcc4.7.0
クリップボードにコピーされたテキストを取得して処理をするプログラムを作ろうとしています。
このコードを書いたのですが、クリップボードのテキストデータが取得できなくて困っています。
GetClipboardDataが失敗しているようなので、GetLastErrorで調べてみたところ、
「この操作を正しく終了しました。」と出て、原因がわかりません。
また、以前作成したこちらのプログラムで試したところ、
CF_TEXTとCF_UNICODETEXTの取得に失敗し、CF_OEMTEXTは取得できるようです。
他人のプログラムで試したところ、INASOFTの『コピペテキスト修飾除去』は正常に動作するのですが、
『マウスのお供』のクリップボード機能は動作しませんでした。
また、他のテキスト(サクラエディタ/FIrefox/MS Word)からDev-C++に貼り付けできない現象が発生しています。
何か解決する方法は考えられるでしょうか?
よろしくお願いします。
Windows Vista SP2 32ビット
Dev-C++5.4.0 gcc4.7.0
クリップボードにコピーされたテキストを取得して処理をするプログラムを作ろうとしています。
int primeJudge(HWND hWnd,char* prime) {
HGLOBAL hMem;
WCHAR* str;
int error=0;
if(IsClipboardFormatAvailable(CF_UNICODETEXT)) {
if(OpenClipboard(hWnd)) {
if(hMem=(HGLOBAL)GetClipboardData(CF_UNICODETEXT)) {
WCHAR* strtemp;
if(strtemp=(WCHAR*)GlobalLock(hMem)) {
int length=lstrlenW(strtemp)+1;
str=HeapAlloc(GetProcessHeap(),0,(length+1)*sizeof(WCHAR));
if(str)lstrcpyW(str,strtemp); else error=1;
GlobalUnlock(hMem);
} else error=1;
} else error=1;
CloseClipboard();
} else error=1;
} else error=1;
if(error)return 0;
lstrcpy(prime,"65537");
HeapFree(GetProcessHeap(),0,str);
return 1;
}GetClipboardDataが失敗しているようなので、GetLastErrorで調べてみたところ、
「この操作を正しく終了しました。」と出て、原因がわかりません。
また、以前作成したこちらのプログラムで試したところ、
CF_TEXTとCF_UNICODETEXTの取得に失敗し、CF_OEMTEXTは取得できるようです。
#include <stdio.h>
#include <windows.h>
int main(void) {
UINT format;
CHAR formatName[1000];
char filename[1000];
FILE* fp;
HGLOBAL hMem;
void* pMem;
if(!OpenClipboard(0)) {
puts("OpenClipboard Failed.");
return 1;
}
puts("EnumClipboardFormats");
format=0;
while(format=EnumClipboardFormats(format)) {
printf("0x%08X",(unsigned int)format);
if(GetClipboardFormatName(format,formatName,sizeof(formatName))) {
printf(" %s",formatName);
} else {
formatName[0]=0;
}
puts("");
hMem=GetClipboardData(format);
if(hMem==NULL) {
puts("GetClipboardData Failed.");
} else {
pMem=GlobalLock(hMem);
if(pMem==NULL) {
puts("GlobalLock Failed.");
} else {
sprintf(filename,"dump\\0x%08X_%s",
(unsigned int)format,formatName);
fp=fopen(filename,"wb");
if(fp==NULL) {
puts("fopen Failed.");
} else {
fwrite(pMem,1,GlobalSize(hMem),fp);
fclose(fp);
}
GlobalUnlock(hMem);
}
}
}
CloseClipboard();
return 0;
}
『マウスのお供』のクリップボード機能は動作しませんでした。
また、他のテキスト(サクラエディタ/FIrefox/MS Word)からDev-C++に貼り付けできない現象が発生しています。
何か解決する方法は考えられるでしょうか?
よろしくお願いします。