win 7の下のファイルのドラッグ&ドロップが無効な問題を解決します

1336 ワード

最近、テスト側はこのようなバグを提出しました:ファイル転送モジュールをテストする時、プログラムがwin 7の下でファイルのドラッグ&ドロップが失効する問題を発見しました.このような問題を見たばかりで、win 7のセキュリティレベルと関係があると推定されていますが、具体的にどのように処理するかはあまり分かりません.そこで、関連する疑問を持ってネットで調べて、関連する処理方法を見つけて、ここでみんなと分かち合います.
具体的には、現在のオペレータが管理者か一般ユーザーかによって異なり、管理者であればドラッグ&ドロップできます.通常のユーザーの場合、ドラッグアンドドロップは無効になります.では、具体的な深層の原因は何なのでしょうか.Win 7は従来のXPやWin 2003に比べて安全制御が厳しい.
セキュリティ権限の問題を解決するには、ChangeWindowMessageFilterを呼び出して0 x 0049とWM_をそれぞれ許可する必要があります.DROPFILESメッセージが入ってきて応答し、関連コードは以下の通りである.
BOOL CPcmtwndApp::ChangeWndMessageFilter( UINT uMessage, BOOL bAllow )
{
	typedef BOOL (WINAPI* ChangeWindowMessageFilterFn)( UINT, DWORD );
	HMODULE hUserMod = NULL;
	BOOL bResult = FALSE;
	hUserMod = LoadLibrary( "user32.dll" );
	if ( hUserMod == NULL )
	{
		return FALSE;
	}

	ChangeWindowMessageFilterFn pfnChangeWindowMessageFilter = (ChangeWindowMessageFilterFn)GetProcAddress( hUserMod, "ChangeWindowMessageFilter" );
	if ( pfnChangeWindowMessageFilter == NULL )
	{
		FreeLibrary( hUserMod );
		return FALSE;
	}

	bResult = pfnChangeWindowMessageFilter( uMessage, bAllow?1:2 ); // 1-MSGFLT_ADD, 2-MSGFLT_REMOVE
	FreeLibrary( hUserMod );
	return bResult;
}

......
	//  , win7 
    ChangeWndMessageFilter( WM_DROPFILES, TRUE );
	ChangeWndMessageFilter( 0x0049, TRUE ); // 0x0049 - WM_COPYGLOBALDATA
......