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

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
27.04.2009, 11:37
    #35955509
sadem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в буфере обмена
А тогда подскажите как программно это сделать, как раскладку переключить программно? А то сам пользователь программы это не всегда замечает...
...
Рейтинг: 0 / 0
27.04.2009, 13:52
    #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
27.04.2009, 17:40
    #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
Период между сообщениями больше года.
10.08.2010, 19:48
    #36784853
thealexjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в буфере обмена
sadem,

а обратно как переключить?)
...
Рейтинг: 0 / 0
10.08.2010, 20:24
    #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
11.08.2010, 16:40
    #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
11.08.2010, 16:43
    #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
11.08.2010, 16:43
    #36786484
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой в буфере обмена
Эндрю, у тебя зачем найденное в строке преобразуется в цифири, потом цифири снова в строку и эта строка сравнивается с
цифирями???
Код: plaintext
CStr(CLng(Left$(...))) =  409 


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


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