Member 13569650 Ответов: 0

Я пытаюсь изменить язык с английского на иврит и наоборот


Привет В приложении 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
Конец, Если

когда появляется сообщение и я нажимаю кнопку ОК, язык меняется так, как я хотел.

Потому что я нахожусь в своей области приложений, а не в системной области.

Большое спасибо.

0 Ответов