powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа API функции GetClipboardData под Win98 и WinNT(2000)???
10 сообщений из 10, страница 1 из 1
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519829
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что API функция GetClipboardData под работает WIN98, а в WINNT(2000) работает не корректно. Может был у кого такой баг???

Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Boolean
Private Declare Function GetClipboardData Lib "user32.dll" (ByVal uFormat As Long) As String
Private Declare Function CloseClipboard Lib "user32.dll" () As Boolean

DoCmd.RunCommand acCmdCopy
'DoCmd.DoMenuItem acFormBar, 1, 3, acMenuVer70

OpenClipboard (0)
FromClipboard = Trim(GetClipboardData(1)) 'В WIN98 возвращает данные нормально, а в WINNT не корректно!!!
CloseClipboard
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519841
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что такая за ошибка: "не корректно" ?

==
Если же с телепячить - то у тебя в NTскорей-всего возращается UNICODe формат. Попробуй по-юзать StrConv.
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519883
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет функция StrConv не помогает.
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519895
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторюсь: а что такая за ошибка: "не корректно" ?

===
Попробуй установить русский язык перед копированием, если поможет, то надо подправить чуть-чуть реестр.
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519908
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор, спасибо, действительно причина Я думаю в раскладке клавиатуре, но функция StrConv не помогает.

Вот тему нашел может будет интересна и для других, сейчас поюзаю и сообщу результат:
Проблема копирования русского текста через буфер
http://am.rusimport.ru/MSAccess/topic.aspx?ID=229&find=GetClipboardData
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519914
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты юзаешь CF_TEXT может поможет CF_OEMTEXT?

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519937
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы сразу написал, что занчит "не корректно", то было все гораздо проще и быстрей.
֏!
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519981
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот результат все заработало:

Private Const MAXSIZE = 4096
Private Const CF_TEXT = 1

Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Boolean
Private Declare Function GetClipboardData Lib "user32.dll" (ByVal uFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Boolean
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hmem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hmem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hmem As Long) As Long

'Взял из примера вот эту функцию
Function ClipBoard_GetData() As String

Dim hClipMemory As Long
Dim lpClipMemory As Long
Dim MyString As String
Dim RetVal As Long

If OpenClipboard(0&) = 0 Then
MsgBox "Cannot open Clipboard. Another app. may 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 we can reference
' the actual data string.
lpClipMemory = GlobalLock(hClipMemory)

If Not IsNull(lpClipMemory) Then
MyString = Space$(MAXSIZE)
RetVal = lstrcpy(MyString, lpClipMemory)
RetVal = GlobalUnlock(hClipMemory)

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

OutOfHere:

RetVal = CloseClipboard()
ClipBoard_GetData = MyString

End Function


И т.д.

DoCmd.DoMenuItem acFormBar, 1, 3, acMenuVer70
FromClipboard = Trim(ClipBoard_GetData)

Заработало!!!

Но засада:
Есть еще вопрос, почему при копировании из Access из табл. в буфер из буфера возвращается строка (RetVal = lstrcpy(MyString, lpClipMemory)) -> MyString с округленными данными??? (т.е. 30,456->30,47) А мне нужны данные полные 30,456
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32519985
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
30,456->30,47 - это даже не округление...
...
Рейтинг: 0 / 0
Работа API функции GetClipboardData под Win98 и WinNT(2000)???
    #32520010
amel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините вот так: 30,456->30,46 - это даже не округление... Возможно, но фигня в том и состоит, что из буфера возвращаются обрубленные (округленные) значаения!!! Причем, если из буфера вставить в Excel, то всталяется то же двумя знаками, но можно отформатировать, чтобы увидеть все цифры после запятой.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа API функции GetClipboardData под Win98 и WinNT(2000)???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]