Я пытаюсь изменить язык с английского на иврит и наоборот
Привет В приложении in the What have you tried?
Я ожидаю этого, когда нажимаю другую кнопку
приложение язык будет взимать плату
с иврита на английский.
Но это не так.
Но когда я прихожу из другого приложения
для моего приложения язык меняется.
может ли кто-нибудь помочь в этом.
Спасибо.
Что я уже пробовал:
' 120420_2050 ' C:\WINDOWS\Microsoft.NET\Framework\v3.5\vbc /target:winexe my_form_120420_1840.vb >> out.txt ' Option Strict Off Imports System Imports System.IO Imports System.Text Imports System.Windows.Forms Imports System.Globalization Imports System.Collections.Generic Imports System.Text.RegularExpressions Imports System.Diagnostics Imports System.Drawing Imports System.Threading Imports System.Runtime.InteropServices Module gimatria Sub Main() Dim myForm1 As New my_Form1 myForm1.ShowDialog() myForm1.Dispose() End Sub End Module '<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _ Public Class my_Form1 Private nwl As MyNativeWindowListener Dim _englishInput As InputLanguage Dim _hebrewInput As InputLanguage Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call _englishInput = GetInputLanguageByName("english") _hebrewInput = GetInputLanguageByName("hebrew") nwl = New MyNativeWindowListener(Me) End Sub Public Shared Function GetInputLanguageByName(ByVal inputName As String) As InputLanguage Dim lang As InputLanguage For Each lang In InputLanguage.InstalledInputLanguages If lang.Culture.EnglishName.ToLower().StartsWith(inputName) Then Return lang End If Next Return Nothing End Function Friend Sub ApplicationActivated(ByVal ApplicationActivated As Boolean) ' The application has been activated or deactivated If ApplicationActivated = False Then InputLanguage.CurrentInputLanguage = _englishInput Me.Text = "Application Active = " + ApplicationActivated.ToString() ElseIf ApplicationActivated = True Then InputLanguage.CurrentInputLanguage = _hebrewInput Me.Text = "Application Active = " + ApplicationActivated.ToString() End If End Sub Private Sub my_Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing InputLanguage.CurrentInputLanguage = _englishInput End Sub Private Sub Form1_DoubleClick(sender As Object, e As EventArgs) Handles MyBase.DoubleClick InputLanguage.CurrentInputLanguage = _englishInput End Sub End Class '----------------------------------------------------------------------------- <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class my_Form1 Inherits System.Windows.Forms.Form 'Form overrides dispose to clean up the component list. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.SuspendLayout() ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(515, 253) Me.Name = "my_Form1" Me.Text = "my_Form1" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.ResumeLayout(False) End Sub End Class '---------------------------------------------------------------------------------------------- ' NativeWindow class to listen to operating system messages. Friend Class MyNativeWindowListener Inherits NativeWindow ' Constant value was found in the "windows.h" header file. Private Const WM_ACTIVATEAPP As Integer = &H1C Private parent As my_Form1 Public Sub New(ByVal parent As my_Form1) AddHandler parent.HandleCreated, AddressOf Me.OnHandleCreated AddHandler parent.HandleDestroyed, AddressOf Me.OnHandleDestroyed Me.parent = parent End Sub ' Listen for the control's window creation and hook into it. Private Sub OnHandleCreated(ByVal sender As Object, ByVal e As EventArgs) ' Window is now created, assign handle to NativeWindow. AssignHandle(CType(sender, Form).Handle) End Sub Private Sub OnHandleDestroyed(ByVal sender As Object, ByVal e As EventArgs) ' Window was destroyed, release hook. ReleaseHandle() End Sub <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _ Protected Overrides Sub WndProc(ByRef m As Message) ' Listen for operating system messages Select Case (m.Msg) Case WM_ACTIVATEAPP ' Notify the form that this message was received. ' Application is activated or deactivated, ' based upon the WParam parameter. parent.ApplicationActivated(m.WParam.ToInt32() <> 0) End Select MyBase.WndProc(m) End Sub End Class '----------------------------------------------------------------------------------------------
Dave Kreskowiak
Похоже, что у вас там нет никакого кода, который действительно вызовет службу, чтобы сделать перевод для вас.
Простое изменение "языка ввода" не переводит текст для вас. Он просто говорит системе, как обрабатывать вводимый текст. Перевод не сделан.
Member 13569650
Дэйв, спасибо.
Мне не нужен никакой перевод.
Только переключите язык
с английского на иврит и
с иврита на английский.
Когда мое приложение активировано переключатель в порядке но когда мое приложение
деактивированный выключатель не работает.
Спасибо еще раз.
Dave Kreskowiak
Это потому, что изменения, которые вы внесли, относятся только к вашему приложению, а не к системе. Изменение его для системы требует вызова функций Win32, чтобы сделать это. Здесь нет.Чистый класс для этого.
Видеть Функция SystemParametersInfoA (winuser.ч) - Win32-приложений, Майкрософт документы[^]. Найдите "SPI_SETDEFAULTINPUTLANG" на этой странице.
Member 13569650
Привет, Дэйв, и спасибо тебе за помощь.
Я чувствую, что ты прав.
Но я все еще в замешательстве, потому что во время выполнения я получил это:
строка 1 не работает и не выдает никаких ошибок !!!
линия 2. запустить и нормально работать, хотя строка 1 не удалось работать
и линия 3 работать нормально и это изменение параметров системы (на заметку)
а также линия 4 работает нормально.
Чтобы увидеть, как это работает. Вы можете скомпилировать мое приложение с помощью команды compile
строка в верхней части источника приложения.
Я чувствую, что ты можешь вытащить меня из моего замешательства.
код приложения:
Подруга Суб ApplicationActivated(ApplicationActivated Бывал Как Логическое)
- Приложение было активировано или деактивировано
Если ApplicationActivated = False, То
1. InputLanguage.CurrentInputLanguage = _englishInput
2. Me.Text = "Application Active =" + ApplicationActivated.Метод toString()
ElseIf ApplicationActivated = True Тогда
3. InputLanguage.CurrentInputLanguage = _hebrewInput
4. Me.Text = "Application Active =" + ApplicationActivated.Метод toString()
Конец, Если
Конец Подводной Лодки
Большое вам спасибо.
Dave Kreskowiak
Нет, я не вижу, чтобы что-то из этого работало, так как у меня нет ничего на иврите или любом другом неанглийском языке, и я понятия не имею, что вы подразумеваете под "не работает".
Member 13569650
Дэйв, спасибо тебе за твои усилия помочь мне.
В работе я имею в виду, что язык переключения действительно меняет язык.
и не работает смена языка, не заряжайте язык.
Во всяком случае, я благодарен.
Dave Kreskowiak
Это не очень хорошее объяснение. Я уже сказал, что код, который у вас есть, будет работать только для приложения, в которое вы его поместили. Он не будет работать в масштабах всей системы для всех приложений.
Member 13569650
Я попробую этот путь.
когда эта строка кода запускается l смотрите ее вывод в правом нижнем углу панели задач в моем случае
это может быть англ или
ЕВР
Язык ввода.CurrentInputLanguage = параметр одного из языков, установленных на компьютере.
Dave Kreskowiak
Это относится к текущему текстовому полю или полю ввода, а не к системе.
Member 13569650
Другими словами, вы говорите, что меняете язык, на котором пишете. не относится к системе.
Dave Kreskowiak
Что, черт возьми, я говорил с тех пор, как Пост № 1?
Вы, очевидно, читали то, что я написал. Вернитесь назад и перечитайте всю эту строку.
Member 13569650
Дэйв, большое тебе спасибо.
Извините за мое недоразумение.
Member 13569650
Привет, Дэйв.
Я вам очень благодарен.
Я нашел эту работу, которая заставляет меня понять ваш первый пост.
это обходной путь.
Если ApplicationActivated = False, То
Если InputLanguage.CurrentInputLanguage.Равно(_hebrewInput) Затем
msgbox("спасибо")
Язык ввода.CurrentInputLanguage = _englishInput
Конец, Если
когда появляется сообщение и я нажимаю кнопку ОК, язык меняется так, как я хотел.
Потому что я нахожусь в своей области приложений, а не в системной области.
Большое спасибо.