ACC: How to Retrieve Information from the Clipboard (1.x/2.0)

Last reviewed: June 8, 1997
Article ID: Q94162
The information in this article applies to:
  • Microsoft Access versions 1.0, 1.1, 2.0

SUMMARY

Advanced: Requires expert coding, interoperability, and multiuser skills.

There is no command in Microsoft Access to retrieve information from the Clipboard. To retrieve information from the Clipboard, you need to define an Access Basic function that calls several Windows API functions. This article defines a function that retrieves text from the Clipboard.

MORE INFORMATION

Add the code defined below to an Access Basic module. Make sure that the declare functions are all listed on one line and that the MsgBox procedure is also defined on one line. Because you may have some of the Windows API functions defined in an underlying library, some of them might not be needed. If this is the case, remove or comment the declarations from your code.

To call the function, you can make a string assignment to the returned value, such as:

   ReturnString$ = ClipBoard_GetData ()

Sample Code

NOTE: In the following sample code, an underscore (_) is used as a line- continuation character. Remove the underscore when re-creating this code in Access Basic.

   Option Explicit

   Declare Function OpenClipBoard% Lib "User" (ByVal hwnd%)
   Declare Function GetClipboardData% Lib "User" (ByVal wFormat%)
   Declare Function GlobalAlloc% Lib "Kernel" (_
      ByVal wFlags%, ByVal dwBytes&)
   Declare Function GlobalLock& Lib "Kernel" (ByVal hMem%)
   Declare Function lstrcpy& Lib "Kernel" (_
      ByVal lpString1 As Any, ByVal lpString2 As Any)
   Declare Function GlobalUnlock% Lib "Kernel" (ByVal hMem%)
   Declare Function CloseClipBoard% Lib "User" ()
   Declare Function GlobalSize& Lib "Kernel" (ByVal hMem%)

   Global Const GHND = &H42
   Global Const CF_TEXT = 1
   Global Const MAXSIZE = 4096

   Function ClipBoard_GetData()
      Dim hClipMemory%
      Dim lpClipMemory&
      Dim MyString$
      Dim Junk&
      Dim X%

      If OpenClipBoard(0&) = 0 Then
         MsgBox "Could not open the Clipboard. Another _
            application could have it open"
         Exit Function
      End If

      '-------------------------------------------
      ' Obtain the handle to the global memory
      ' block that is referencing the text.
      '-------------------------------------------
      hClipMemory% = GetClipboardData(CF_TEXT)
      If IsNull(hClipMemory%) Then
         MsgBox "Could not allocate memory"
         GoTo OutOfHere
      End If

      '-------------------------------------------
      ' Lock Clipboard memory so you can reference
      ' the actual data string.
      '-------------------------------------------
      lpClipMemory& = GlobalLock(hClipMemory)

      If Not IsNull(lpClipMemory&) Then
         MyString$ = Space$(MAXSIZE)
         Junk& = lstrcpy(MyString$, lpClipMemory)
         X% = GlobalUnlock(hClipMemory)

         'peel off the null terminating character
         MyString$ = Mid(MyString$, 1, InStr(1, MyString$, Chr$(0), 0) - 1)
      Else
         MsgBox "Could not lock memory to copy string from."
      End If

   OutOfHere:

      X% = CloseClipBoard()
      ClipBoard_GetData = MyString$

   End Function

REFERENCES

For an example of how to retrieve information from the Clipboard in Microsoft Access 95 and 97, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q138910
   TITLE:      How to Retrieve Information from the Clipboard (95/97)
 

	
	


Keywords : kbprg PgmApi
Version : 1.0 1.1 2.0
Platform : WINDOWS
Hardware : X86
Issue type : kbhowto


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: June 8, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.