PRB: ملفات التعريف على الحافظة غير مرئية في كافة تطبيقات

انتهاء دعم نظام التشغيل Windows XP

لقد أنهت شركة Microsoft دعم Windows XP في 8 أبريل، 2014. وقد أثر هذا التغيير على تحديثات البرامج لديك وخيارات الأمان الخاصة بك. تعرف على ما يعنيه ذلك فيما يتعلق بك وكيفية الحفاظ على حمايتك.

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية323530
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
يشير هذه المقالة التالية Microsoft .NET Framework مكتبة الفئات مساحات الأسماء:
  • System.Drawing.Imaging
  • System.Runtime.InteropServices
الأعراض
ملفات التعريف إضافة التطبيقات .NET إلى "الحافظة" غير مرئية بالنسبة إلى تطبيقات أخرى.
السبب
تحدث هذه المشكلة نظرًا لأن .NET Framework يستخدم تنسيق حافظة جديد عند إضافة ملفات التعريف إلى "الحافظة". التطبيقات الأخرى مثل Microsoft Word أو نظام التشغيل غير علم هذا التنسيق الجديد ، ولذلك، لا يمكن لصق أو عرض الصورة.
الحل
لإضافة ملف تعريف إلى "الحافظة" بحيث يظهر لتطبيقات أخرى يجب أن استخدم تنسيق CF_ENHMETAFILE. يتم توفير دعم هذا التنسيق من خلال الفئة DataObject مع أسلوب DataFormats.EnhancedMetafile. لسوء الحظ، قيود في التطبيق الحالي من برنامج .NET Framework منع هذا يتم حل viable. ولذلك، يجب الحصول إمكانية التشغيل المتداخل مع Win32 الحافظة واجهات برمجة التطبيقات (API) لحل هذه المشكلة.

نماذج التعليمات البرمجية التي تتبع توضح كيفية إضافة ملف تعريف "إلى" الحافظة "بحيث يظهر لتطبيقات أخرى.

Microsoft Visual Basic .NET نموذج

Imports System.Drawing.ImagingImports System.Runtime.InteropServicesPublic Class ClipboardMetafileHelper    <DllImport("user32.dll", EntryPoint:="OpenClipboard", _       SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function OpenClipboard(ByVal hWnd As IntPtr) As Boolean    End Function    <DllImport("user32.dll", EntryPoint:="EmptyClipboard", _       SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function EmptyClipboard() As Boolean    End Function    <DllImport("user32.dll", EntryPoint:="SetClipboardData", _       SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function SetClipboardData(ByVal uFormat As Integer, ByVal hWnd As IntPtr) As IntPtr    End Function    <DllImport("user32.dll", EntryPoint:="CloseClipboard", _       SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function CloseClipboard() As Boolean    End Function    <DllImport("gdi32.dll", EntryPoint:="CopyEnhMetaFileA", _       SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function CopyEnhMetaFile(ByVal hemfSrc As IntPtr, ByVal hNULL As IntPtr) As IntPtr    End Function    <DllImport("gdi32.dll", EntryPoint:="DeleteEnhMetaFile", _       SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function DeleteEnhMetaFile(ByVal hemfSrc As IntPtr) As Boolean    End Function    ' Metafile mf is set to a state that is not valid inside this function.    Public Shared Function PutEnhMetafileOnClipboard(ByVal hWnd As IntPtr, ByVal mf As Metafile) As Boolean        Dim bResult As New Boolean()        bResult = False        Dim hEMF, hEMF2 As IntPtr        hEMF = mf.GetHenhmetafile() ' invalidates mf        If Not hEMF.Equals(New IntPtr(0)) Then            hEMF2 = CopyEnhMetaFile(hEMF, New IntPtr(0))            If Not hEMF2.Equals(New IntPtr(0)) Then                If OpenClipboard(hWnd) Then                    If EmptyClipboard() Then                        Dim hRes As IntPtr                        hRes = SetClipboardData(14, hEMF2)    ' 14 == CF_ENHMETAFILE                        bResult = hRes.Equals(hEMF2)                        CloseClipboard()                    End If                End If            End If            DeleteEnhMetaFile(hEMF)        End If        Return bResult    End FunctionEnd Class'You can call this function with code that is similar to the following code:        Dim mf As New Metafile("filename.emf")        ClipboardMetafileHelper.PutEnhMetafileOnClipboard(me.Handle,mf)				

Microsoft Visual C# .NET نموذج

using System.Drawing.Imaging;using System.Runtime.InteropServices;public class ClipboardMetafileHelper{	[DllImport("user32.dll")]	static extern bool OpenClipboard(IntPtr hWndNewOwner);	[DllImport("user32.dll")]	static extern bool EmptyClipboard();	[DllImport("user32.dll")]	static extern IntPtr SetClipboardData(uint uFormat, IntPtr hMem);	[DllImport("user32.dll")]	static extern bool CloseClipboard();	[DllImport("gdi32.dll")]	static extern IntPtr CopyEnhMetaFile(IntPtr hemfSrc, IntPtr hNULL);	[DllImport("gdi32.dll")]	static extern bool DeleteEnhMetaFile(IntPtr hemf);		// Metafile mf is set to a state that is not valid inside this function.	static public bool PutEnhMetafileOnClipboard( IntPtr hWnd, Metafile mf )	{		bool bResult = false;		IntPtr hEMF, hEMF2;		hEMF = mf.GetHenhmetafile(); // invalidates mf		if( ! hEMF.Equals( new IntPtr(0) ) )		{			hEMF2 = CopyEnhMetaFile( hEMF, new IntPtr(0) );			if( ! hEMF2.Equals( new IntPtr(0) ) )			{				if( OpenClipboard( hWnd ) )				{					if( EmptyClipboard() )					{						IntPtr hRes = SetClipboardData( 14 /*CF_ENHMETAFILE*/, hEMF2 );						bResult = hRes.Equals( hEMF2 );						CloseClipboard();					}				}			}			DeleteEnhMetaFile( hEMF );		}		return bResult;	}}//You can call this function with code that is similar to the following code:Metafile mf = new Metafile( "filename.emf" );ClipboardMetafileHelper.PutEnhMetafileOnClipboard(this.Handle, mf );				
لا يمكن الوصول غير متوفر wmf emf راجع غير متوفرة المحسنة

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 323530 - آخر مراجعة: 12/07/2015 11:16:54 - المراجعة: 3.2

Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2, Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2, Microsoft Windows XP Professional, the operating system: Microsoft Windows XP 64-Bit Edition

  • kbnosurvey kbarchive kbmt kbdswgdi2003swept kbprb KB323530 KbMtar
تعليقات