Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Узнать язык раскладки клавиатуры (http://forum.oszone.net/showthread.php?t=212012)

m0nkrus 26-07-2011 23:38 1720594

Узнать язык раскладки клавиатуры
 
Необходимо получить информацию о текущем языке ввода данных с клавиатуры. Можно это как-нибудь организовать?

amel27 27-07-2011 09:17 1720695

Цитата:

Цитата m0nkrus
получить информацию о текущем языке ввода данных с клавиатуры »

- у каждого окна/приложения может быть свой язык ввода;
- AFAIK CMD (без сторонних инструментов на API32/.NET) не имеет доступа к такой инфе

P.S. язык ввода Windows по умолчанию (нового окна) можно взять с реестра (HKCU\Keyboard Layout\Preload\1)

m0nkrus 27-07-2011 09:25 1720700

amel27, тогда уточню: язык ввода для активного окна.

amel27 27-07-2011 12:11 1720788

Цитата:

Цитата m0nkrus
язык ввода для активного окна »

код батника, который компилирует требуемый EXE (требуется .NET):
Код:

@if not exist "%~n0.exe" (
 for /f "delims=" %%a in ('dir/s/a-d/b/od "%windir%\Microsoft.NET\Framework\vbc.exe"') do @set "vbc=%%a"
(echo Imports System.Runtime.InteropServices
 echo Module Test
 echo ^<DllImport^("user32.dll",SetLastError:=True^)^> Public Function GetForegroundWindow^(^) As IntPtr
 echo End Function
 echo ^<DllImport^("user32.dll",SetLastError:=True^)^> Public Function GetWindowThreadProcessId^(ByVal hwnd As IntPtr,ByRef lpdwProcessId As Integer^) As Integer
 echo End Function
 echo Public Declare Function GetKeyboardLayout Lib "user32" ^(ByVal idThread As UInteger^) As IntPtr
 echo Sub Main^(^)
 echo Console.WriteLine^(GetKeyboardLayout^(GetWindowThreadProcessId^(GetForegroundWindow^(^),0^)^).ToString^("X"^)^)
 echo End Sub
 echo End Module)>"%~n0.tmp"
call "%%vbc%%" "%~n0.tmp" /out:"%~n0.exe">nul
del "%~n0.tmp")

P.S. проверено на XP/2003

ferget 27-07-2011 12:51 1720808

а что этот exe должен делать?
выдает всегда 4190419
W7U

amel27 27-07-2011 12:55 1720809

Цитата:

Цитата ferget
а что этот exe должен делать? »

выдавать кодировку активного в данный момент окна (4190419/4090409)
Код:

@echo off
:loop
test.exe
ping -n 3 127.0.0.1>Nul
goto:loop


ferget 27-07-2011 13:01 1720817

а выловить alt+shift не выйдет?

amel27 27-07-2011 16:16 1720933

Цитата:

Цитата ferget
выловить alt+shift не выйдет? »

- потребуется отловить ВСЕ нажатия;
- может быть ctrl+shift;
- AFAIK для установки хука (на чужое окно) потребуются админские права + отключение UAC

m0nkrus 27-07-2011 16:17 1720934

amel27, слишком сложно на мой взгляд. Ну да ладно...
Ставлю отметку о решении проблемы.

amel27 27-07-2011 16:22 1720939

Цитата:

Цитата m0nkrus
слишком сложно на мой взгляд. »

проще только использовать сторонние CMD-утилиты, сходу не нашел
вероятно, проще написать... но это уже в другую ветку (программирование), либо AutoIT/AHK


Время: 02:11.

Время: 02:11.
© OSzone.net 2001-