powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с кодировкой в буфере обмена
11 сообщений из 11, страница 1 из 1
Проблема с кодировкой в буфере обмена
    #35954688
sadem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Возникла проблема следующего рода: при занесении некоторой текстовой строки в буфер обмена и попытки ее вставить в другое приложение (например, Notepad или в файлер Windows) строка (русские буквы в строке) при вставке превращается в иероглифы. Проблема, как я заметил, возникает только на ПК, где не стоит VB6. Как это исправить? Может нужен ей какой-то файл или можеть быть надо прописывать кодировку в теле программы?
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #35955091
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на при занесении в буфер обмена русских слов
включать русский язык
пример
это при выключенном русском
Код: plaintext
ïðèìåð ðóññêèõ ñëîâ
а это при включенном
Код: plaintext
пример русских слов

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #35955509
sadem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А тогда подскажите как программно это сделать, как раскладку переключить программно? А то сам пользователь программы это не всегда замечает...
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #35956009
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Google в руки.
Пример из API-Guide:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
'This example was created by A.E.Veltstra

'This fucntion changes the locale and as a result, the keyboardlayout gets adjusted

'parameters for api's
Const KL_NAMELENGTH As Long =  9                       'length of the keyboardbuffer
Const KLF_ACTIVATE  As Long = &H1                     'activate the layout

'the language constants
Const LANG_NL_STD As String = "00000413"
Const LANG_EN_US As String = "00000409"
Const LANG_DU_STD As String = "00000407"
Const LANG_FR_STD As String = "0000040C"

'api's to adjust the keyboardlayout
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Public Function SetKbLayout(strLocaleId As String) As Boolean
    'Changes the KeyboardLayout
    'Returns TRUE when the KeyboardLayout was adjusted properly, FALSE otherwise
    'If the KeyboardLayout isn't installed, this function will install it for you
    On Error Resume Next
    Dim strLocId As String 'used to retrieve current KeyboardLayout
    Dim strMsg As String   'used as buffer
    Dim lngErrNr As Long   'receives the API-error number

  'create a buffer
  strLocId = String(KL_NAMELENGTH,  0 )
  'retrieve the current KeyboardLayout
  GetKeyboardLayoutName strLocId
  'Check whether the current KeyboardLayout and the
  'new one are the same
  If strLocId = (strLocaleId & Chr( 0 )) Then
    'If they're the same, we return immediately
    SetKbLayout = True
  Else
    'create buffer
    strLocId = String(KL_NAMELENGTH,  0 )
    'load and activate the layout for the current thread
    strLocId = LoadKeyboardLayout((strLocaleId & Chr( 0 )), KLF_ACTIVATE)
    If IsNull(strLocId) Then  'returns NULL when it fails
      SetKbLayout = False
    Else 'check again
      'create buffer
      strLocId = String(KL_NAMELENGTH,  0 )
      'retrieve the current layout
      GetKeyboardLayoutName strLocId
      If strLocId = (strLocaleId & Chr( 0 )) Then
        SetKbLayout = True
      Else
        SetKbLayout = False
      End If
    End If
  End If
End Function
Private Sub Form_Load()
    'change the current keybour layout to 'English - US'
    SetKbLayout LANG_EN_US
End Sub
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #35956765
sadem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKot и orunbek, спасибо за помощь. Переключение сделал проще:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long

Dim lngReturn As Long
Dim lngCodeKeybord As Long

lngReturn = GetKeyboardLayout(lngCodeKeybord)
If lngReturn =  67699721  Then Call ActivateKeyboardLayout( 68748313 , &H8)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проблема с кодировкой в буфере обмена
    #36784853
thealexjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sadem,

а обратно как переключить?)
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #36784891
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня работа с буфером обмена отлично работает с любой раскладкой. Наверное дело в том, что у меня стоит фикс в реестре на:

XP Tweaker - справкаДанная опция решает проблемы с отображением русских шрифтов в некоторых программах. XP Tweaker меняет два параметра "1250" и "1252". В некоторых редких случаях можно исправить другие параметры.

HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage

STRING 1250, значение "c_1251.nls" - опция включена, "c_1250.nls" - выключена
STRING 1252, значение "c_1251.nls" - опция включена, "c_1252.nls" - выключена
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #36786474
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thealexjo,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Sub f()

Dim KeybLayoutName As String
KeybLayoutName = String( 9 ,  0 )
GetKeyboardLayoutName KeybLayoutName
If CStr(CLng(Left$(KeybLayoutName, InStr( 1 , KeybLayoutName, Chr( 0 )) -  1 ))) =  409  Then
Application.Keyboard ( 1049 ) 'условие, если текущая раскладка клавиатуры - Латинница, тогда меняем её на противоположную
ElseIf CStr(CLng(Left$(KeybLayoutName, InStr( 1 , KeybLayoutName, Chr( 0 )) -  1 ))) =  419  Then
Application.Keyboard ( 1033 ) 'условие, если текущая раскладка клавиатуры - Кириллица, тогда меняем её на противоположную
End If

End Sub
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #36786483
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрюthealexjo,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Sub f()

Dim KeybLayoutName As String
KeybLayoutName = String( 9 ,  0 )
GetKeyboardLayoutName KeybLayoutName
If CStr(CLng(Left$(KeybLayoutName, InStr( 1 , KeybLayoutName, Chr( 0 )) -  1 ))) =  409  Then
Application.Keyboard ( 1049 ) 'условие, если текущая раскладка клавиатуры - Латинница, тогда меняем её на противоположную
ElseIf CStr(CLng(Left$(KeybLayoutName, InStr( 1 , KeybLayoutName, Chr( 0 )) -  1 ))) =  419  Then
Application.Keyboard ( 1033 ) 'условие, если текущая раскладка клавиатуры - Кириллица, тогда меняем её на противоположную
End If

End Sub


это решение для офис vba
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #36786484
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эндрю, у тебя зачем найденное в строке преобразуется в цифири, потом цифири снова в строку и эта строка сравнивается с
цифирями???
Код: plaintext
CStr(CLng(Left$(...))) =  409 


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с кодировкой в буфере обмена
    #36786496
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос, честно сказать работает, почему именно так не знаю, не парюсь, не будет работать буду париться, опять же говорю не сам придумал
Если поправите буду признателен. В сам код не вникал!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с кодировкой в буфере обмена
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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