par Michael DELIQUE » 26 Avr 2013 à 13:20
tout est dans les 2 fonctions
- Code : Tout sélectionner
Public Function ClipboardGetText_API() As String
%REM
'Variables API pour la fonction ClipboardSetText_API
Declare Function CloseClipboard Lib "User32" () As Long
Declare Function OpenClipboard Lib "User32" (Byval hwnd As Long) As Long
Declare Function GetClipboardData Lib "User32" (Byval wFormat As Long) As Long
Declare Function GlobalLock Lib "kernel32" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" (Byval lpString1 As String, Byval lpString2 As Long) As Long
%END REM
Dim nbHOpenClipboard As Long
Dim nbHGetClipboardData As Long
Dim nbGlobalLock As Long
Dim nbReturnValue As Long
On Error Goto CatchError
nbHOpenClipboard = OpenClipboard(0&)
If nbHOpenClipboard = 0 Then
Error 9999,"Cannot open Clipboard. Another app. may have it open"
Exit Function
End If
nbHGetClipboardData = GetClipboardData(1)
rem Obtain the handle to the global memory block that is referencing the text.
If Isnull(nbHGetClipboardData) Then
Error 9999,"Could not allocate memory"
Exit Function
End If
nbGlobalLock = GlobalLock(nbHGetClipboardData)
rem Lock Clipboard memory so we can reference the actual data string
If Not Isnull(nbGlobalLock) Then
ClipboardGetText_API = Space$(256)
nbReturnValue = lstrcpy(ClipboardGetText_API , nbGlobalLock)
nbReturnValue = GlobalUnlock(nbHGetClipboardData)
ClipboardGetText_API = Mid(ClipboardGetText_API , 1, Instr( 1,ClipboardGetText_API, Chr$(0), 0) - 1) ' Peel off the null terminating character.
Else
Error 9999,"Could not lock memory to copy string from."
Exit Function
End If
nbReturnValue = CloseClipboard()
Exit Function
CatchError:
MsgBox "("+Structure_Log+" : "+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
If nbHOpenClipboard <> 0 Then
nbReturnValue = CloseClipboard()
End If
ClipboardGetText_API = ""
Exit Function
End Function
Public Sub ClipboardSetText_API(Source As String)
%REM
'Variables API pour la fonction ClipboardSetText_API
Declare Function GlobalAlloc Lib "kernel32" (Byval wFlags&, Byval dwBytes As Long) As Long
Declare Function CloseClipboard Lib "User32" () As Long
Declare Function SetClipboardData Lib "User32" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function OpenClipboard Lib "User32" (Byval hwnd As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" (Byval hMem As Long) As Long
Declare Function lstrcpy1 Lib "kernel32" Alias "lstrcpy" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function GlobalLock Lib "kernel32" (Byval hMem As Long) As Long
%END REM
Dim nbGlobalAlloc As Long
Dim nbGlobalLock As Long
Dim nbReturnValue As Long
Dim nbOpenClipboard As Long
Dim nbCloseClipboard As Long
On Error Goto CatchError
nbOpenClipboard = 0
nbCloseClipboard=0
nbGlobalAlloc = GlobalAlloc(&H42, Len(Source) + 1)
rem Allocate movable global memory.
nbGlobalLock = GlobalLock(nbGlobalAlloc)
rem Lock the block to get a far pointer to this memory.
nbGlobalLock = lstrcpy1(nbGlobalLock,Source)
rem Copy the string to this global memory
If GlobalUnlock(nbGlobalAlloc) <> 0 Then
rem Unlock the memory.
Error 9999,"Could not unlock memory location. Copy aborted."
Exit Sub
End If
nbOpenClipboard = OpenClipboard(0&)
If nbOpenClipboard = 0 Then
rem Open the Clipboard to copy data to.
Error 9999,"Could not open the Clipboard. Copy aborted."
Exit Sub
End If
nbReturnValue = EmptyClipboard()
rem Clear the Clipboard. .
nbReturnValue = SetClipboardData(1, nbGlobalAlloc)
rem Copy the data to the Clipboard
nbCloseClipboard = CloseClipboard()
If nbCloseClipboard = 0 Then
Error 9999,"Could not close Clipboard."
End If
Exit Sub
CatchError:
MsgBox "("+Structure_Log+" : "+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
If nbOpenClipboard<>0 Then
If nbCloseClipboard=0 Then
nbReturnValue = CloseClipboard()
End If
End If
Exit Sub
End Sub
Cordialement
Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN