我正在使用下面的代碼來獲取IntPtr剪貼板上的 EMF 檔案。該檔案的創建沒有錯誤,但是當我嘗試在我的應用程式仍在運行時在 Windows 資源管理器中洗掉該檔案時,我得到了這個例外:
System.IO.IOException:'該行程無法訪問檔案'xyz.emf',因為它正被另一個行程使用。'
我也嘗試使用New MetaFile(ptr, False)和手動呼叫DeleteEnhMetaFile(),但錯誤保持不變。
Dim ptr As IntPtr = NativeMethods.GetClipboardData(14)
If Not ptr.Equals(IntPtr.Zero) Then
Using mf As New Metafile(ptr, True)
NativeMethods.CopyEnhMetaFile(ptr, $"{somePath}\{fileName}.emf")
'NativeMethods.DeleteEnhMetaFile(ptr)
End Using
End If
我應該如何清理IntPtr到 EMF 檔案,以便在上述代碼運行后洗掉該檔案?
編輯:我什至無法在應用程式仍在運行時從應用程式中洗掉該檔案。
uj5u.com熱心網友回復:
您需要呼叫DeleteEnhMetaFile()(或將所有權分配給 a Metafile)回傳的復制句柄CopyEnhMetaFile(),而不是回傳的句柄GetClipboardData()。剪貼板擁有原始句柄。
Dim ptr As IntPtr = NativeMethods.GetClipboardData(14)
If Not ptr.Equals(IntPtr.Zero) Then
Dim ptrCopy as IntPtr = NativeMethods.CopyEnhMetaFile(ptr, $"{somePath}\{fileName}.emf")
...
NativeMethods.DeleteEnhMetaFile(ptrCopy)
End If
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/474445.html
標籤:温纳皮
上一篇:如何在Python中獲取SeDebugPrivilege?
下一篇:如何獲得焦點視窗處理程式
