クリップボードがおかしい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

クリップボードがおかしい

#1

投稿記事 by みけCAT » 13年前

プログラミングの問題というより、パソコンの問題のようです。
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;
}
他人のプログラムで試したところ、INASOFTの『コピペテキスト修飾除去』は正常に動作するのですが、
『マウスのお供』のクリップボード機能は動作しませんでした。

また、他のテキスト(サクラエディタ/FIrefox/MS Word)からDev-C++に貼り付けできない現象が発生しています。

何か解決する方法は考えられるでしょうか?
よろしくお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: クリップボードがおかしい

#2

投稿記事 by softya(ソフト屋) » 13年前

何らかのフリーソフトとか、ウィルス対策ソフトとか外的要因が邪魔してませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: クリップボードがおかしい

#3

投稿記事 by みけCAT » 13年前

確かにウイルス対策ソフトのWebroot SecureAnywhereを切ってみたところ、
提示した2件のプログラムおよびDev-C++の動作が改善しました。

これからどうしましょうか…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: クリップボードがおかしい

#4

投稿記事 by softya(ソフト屋) » 13年前

パスワード盗用やキーロガー対策みたいなので、ソフト個別に設定するかWebroot SecureAnywhereの設定でクリップボード監視を完全に無効にするかでしょうね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: クリップボードがおかしい

#5

投稿記事 by みけCAT » 13年前

とりあえずサポートに連絡してみました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: クリップボードがおかしい

#6

投稿記事 by みけCAT » 13年前

IDとプライバシー > 保護されたアプリケーションの表示と編集
で、問題を起こしているプログラムを拒否から保護に変えたところ、
自作プログラム、Dev-C++、マウスのお供が全て正常動作になりました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る