Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

узнать keyboard layout консоли другого процесса.   Найти похожие ветки 

 
Ketmar ©   (2006-08-23 00:49) [0]

да-да, именно для написания замены стандартному переключателю раскладок.
как это сделать из процесса, владеющего консолью, я знаю.
хуки не предлагать -- весь переключатель должен жить в одном .EXE и не мусорить догружаемыми DLL.
в принципе, у меня есть идеи, но озвучивать не буду, чтобы не засорять мозги отвечающим. %-)

tnx.


 
Ketmar ©   (2006-08-23 11:45) [1]

up?


 
PSPF2003 ©   (2006-08-23 11:54) [2]

Ревич Нестандартные приемы программирования на Delphi Смотри там авось подойдет.


 
Ketmar ©   (2006-08-23 11:58) [3]

э... а можно это где-то скачать? гугль меня накормил кучей ссылок на "купить". я бы, может, и купил, если б знал, что оно именно то, а так... %-)


 
PSPF2003 ©   (2006-08-23 12:05) [4]

Секунду


 
Ketmar ©   (2006-08-23 12:06) [5]

> [4] PSPF2003 ©   (23.08.06 12:05)
всё, нашёл. 30-40 метров -- это перебор. %-)


 
Calm ©   (2006-08-23 13:55) [6]


> угль меня накормил кучей ссылок на "купить". я бы, может,
>  и купил, если б знал, что оно именно то, а так...

Книга-то хорошая, еще пригодится. Не пожалей 30-40 метров. Или 400(?) рублей.


 
Ketmar ©   (2006-08-23 14:08) [7]

> [6] Calm ©   (23.08.06 13:55)
да я сильно подозреваю, что там pdf в виде тупого скана (в картинках), а не текста. это не дело. %-)

а купить... так я в Украине живу. пока довезут, пока геморрой %-)


 
Ketmar ©   (2006-08-23 14:10) [8]

> [7] Ketmar ©   (23.08.06 14:08)
да и не привык котов в мешках покупать.


 
PSPF2003 ©   (2006-08-23 14:13) [9]


> Calm ©


> Книга-то хорошая

Тут уже озвучивали несколько комментариев в адрес этой книги, далеко не лестных…


 
Calm ©   (2006-08-23 14:15) [10]


> да я сильно подозреваю, что там pdf в виде тупого скана
> (в картинках)

Я вас уверяю, ценность книги от этого никак не падает. разве что на КПК неудобно читать.
А насчет котов - пошарьте по инету, мнения о книге сходятся сильно.


 
Calm ©   (2006-08-23 14:20) [11]


> Тут уже озвучивали несколько комментариев в адрес этой книги,
>  далеко не лестных…

Что-то не припоминаю.
Напомните. Я, как читавший эту книгу, для себя сравню со своим мнением.


 
Rouse_ ©   (2006-08-23 14:21) [12]


> Ketmar ©   (23.08.06 00:49)  

Вот тут погляди: http://rouse.front.ru/windowtree.zip


 
Rouse_ ©   (2006-08-23 14:22) [13]

Хотя нафиг тебе все то?

   AttachThreadInput(GetCurrentThreadId, TID, True);
   VerLanguageName(GetKeyboardLayout(TID) and $FFFF, szLayoutName, MAX);
   AttachThreadInput(GetCurrentThreadId, TID, False);


 
PSPF2003 ©   (2006-08-23 14:32) [14]


> http://rouse.front.ru/windowtree.zip

Пасибо пригодится.


 
Джо ©   (2006-08-23 15:54) [15]

> [7] Ketmar ©   (23.08.06 14:08)
> так я в Украине живу. пока довезут, пока геморрой
> %-)

Не верю! (c) ;)


 
Lamer@fools.ua ©   (2006-08-23 15:54) [16]

>>Calm ©   (23.08.06 14:15) [10]

> > да я сильно подозреваю, что там pdf в виде тупого скана
>
> > (в картинках)
>
> Я вас уверяю, ценность книги от этого никак не падает.


Да? И поиск по тексту работает?


 
Lamer@fools.ua ©   (2006-08-23 15:55) [17]

>>Джо ©   (23.08.06 15:54) [15]

Чему? Тому, что в Украине живёт?  ;o)


 
Ketmar ©   (2006-08-23 15:57) [18]

> [13] Rouse_ ©   (23.08.06 14:22)
если бы это работало с консолями -- было бы очень здорово. но консоль -- это очень уж странный предмет. раскладку в консоли можно узнать только при помощи недокументированного (ранее, сейчас не смотрел %-) GetConsoleKeyboardLayoutName(). иначе -- фигу. и никакие переключения потоков ввода GetConsoleKeyboardLayoutName() не волнуют.


 
Джо ©   (2006-08-23 15:59) [19]

> [17] Lamer@fools.ua ©   (23.08.06 15:55)
> Чему? Тому, что в Украине живёт?  ;o)

Угу, выдает желаемое за действительное :)


 
Ketmar ©   (2006-08-23 16:02) [20]

> [18] Ketmar ©   (23.08.06 15:57)
да, GetConsoleKeyboardLayoutName() функционирует только в самом консольном процессе. как это делать нормально, без внедрения кода -- я так и не нашёл.


 
Zeqfreed ©   (2006-08-23 16:08) [21]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/attachconsole.asp

AttachConsole не поможет? Написано вроде, что The calling application can call any of the console functions. Не знаю как насчет недокументированных ф-ций.


 
Ketmar ©   (2006-08-23 16:30) [22]

> [21] Zeqfreed ©   (23.08.06 16:08)
не поможет. во-первых, в 2k этого нет. во-вторых, нет DetachConsole(), что для переключателя нериемлемо. консоль не закроется, пока не свалят все, кто её использует. следовательно, любая открытая консольная программа, порождающая консольное окно, оставит за собой это окно, висящее до закрытия переключателя. думал уже над этим. %-)


 
BiN ©   (2006-08-23 16:40) [23]

Вариант "оно тебе надо?":
Если найдешь описание структуры win32thread (условно), кот. находится в нутре win32.sys, можно будет попробовать. Но только под админом.


 
Zeqfreed ©   (2006-08-23 16:41) [24]

> [22] Ketmar ©   (23.08.06 16:30)

Понятно :) Тогда не знаю, можно AttachConsole, потом ввести символ проанализировать его на предмет раскладки и стереть ;) Опять только скажешь, что нет DetachConsole…


 
Ketmar ©   (2006-08-23 16:53) [25]

> [23] BiN ©   (23.08.06 16:40)
угу. надо. потому что переключатель давно написан, но без этого работает криво. %-)

да видел я куски описаний. смотрел. в том же реакторе, кстати. %-)
но -- "под админом". и вообще, не дело это -- лазить в кишки за такой простой вещью. до сих пор не могу поверить, что микрософт не дал нормального способа. или хотя бы более нормального, нежели перетряска ливера.

> [24] Zeqfreed ©   (23.08.06 16:41)
да. все мои аргументы остаются в силе.

единственный вариант, который я пока нашёл, -- внедряемый код, который будет по просьбе переключателя вызывать GetConsoleLayoutName() и отдавать результат. %-(
но дело в том, что хук у меня сейчас делается низкоуровневый. и разбивать переключатель на .exe и .dll я не хочу. равно как не хочу гадить этой DLL во все процессы.
вариант ещё -- CreateRemoteThread(), но оно тоже требует привилегий. да и опять кривовато, как не крути. %-((


 
Ketmar ©   (2006-08-23 16:54) [26]

> [24] Zeqfreed ©   (23.08.06 16:41)
опять же, AttachConsole() отсутствует в Win2K. по крайней мере в Win2K SP2.


 
Ketmar ©   (2006-08-23 17:04) [27]

зыж internat.exe ведь делает это как-то...


 
Leonid Troyanovsky ©   (2006-08-23 18:23) [28]


> Ketmar ©   (23.08.06 17:04) [27]

> зыж internat.exe ведь делает это как-то...


Установкой хука WH_SHELL.
С парой WM_USER+x сообщений: одно на foreground window,
другое - на раскладку. Длл как зовут - не помню.

--
Regards, LVT.


 
Ketmar ©   (2006-08-23 18:30) [29]

> [28] Leonid Troyanovsky ©   (23.08.06 18:23)
сейчас попробую проверить. но, кстати, для shell-хука, афаир, DLL и не нужны.


 
Leonid Troyanovsky ©   (2006-08-23 18:41) [30]


> Ketmar ©   (23.08.06 18:30) [29]

> сейчас попробую проверить. но, кстати, для shell-хука, афаир,
>  DLL и не нужны.


Проверь, конечно. Только, конечно, нужны, бо системного уровня.
indicdll.dll, кажись. В \system32.

--
Regards, LVT.


 
Ketmar ©   (2006-08-23 18:47) [31]

как выяснилось, от консоли HSHELL_LANGUAGE ни разу не приходит. что не мешает интернату узнавать раскладку.


 
Ketmar ©   (2006-08-23 18:48) [32]

блин, щаз полезу дизассамблировать этот ангелов интернат! %-)


 
Leonid Troyanovsky ©   (2006-08-23 18:52) [33]


> Ketmar ©   (23.08.06 18:47) [31]

> как выяснилось, от консоли HSHELL_LANGUAGE ни разу не приходит.


Методику в студию, плиз.

--
Regards, LVT.


 
Ketmar ©   (2006-08-23 19:15) [34]

обычный хук с DLL, обычный хук без DLL. разницы нет.


 
Leonid Troyanovsky ©   (2006-08-23 19:23) [35]


> Ketmar ©   (23.08.06 19:15) [34]

> обычный хук с DLL, обычный хук без DLL. разницы нет.


Не научно.
Бо, должны быть описаны условия, достаточные
для воспроизведения эффекта.

Ну, хотя бы, для w2k ;)

--
Regards, LVT.


 
Ketmar ©   (2006-08-23 19:27) [36]

да понятно, что ненаучно. %-) условия забыл забэкапить. %-) в общих словах -- совершенно стандартно ставим хук (с DLL и MMF, или просто на процесс). приходит много интересного, кроме смены языка в консоли.
но это не столь важно, так как интернат без indicdll.dll таки не функционирует. не катит -- с хуком в DLL и я могу. %-)

зыж интересно, зачем интернат вешает CBT-хук? лениво по коду лазить... %-)


 
Leonid Troyanovsky ©   (2006-08-23 19:40) [37]


> Ketmar ©   (23.08.06 19:27) [36]

> но это не столь важно, так как интернат без indicdll.dll
> таки не функционирует. не катит -- с хуком в DLL и я могу.


Взгляни еще на http://rsdn.ru/Forum/?mid=666363

--
Regards, LVT.


 
Ketmar ©   (2006-08-23 19:50) [38]

> [37] Leonid Troyanovsky ©   (23.08.06 19:40)
благодарю за ссылку. однако это всё мне известно. %-) воспользоваться же внутренней структурой интерната невозможно в силу отсутствия оного (инча зачем тогда свой переключатель? %-).

итого -- остаётся только попробовать внедрять свой код во все консоли? ужос... жизнь опять повернулась задом.


 
Vendict ©   (2006-08-23 23:25) [39]

2Ketmar
А такой извращенный вариант. Не пинай только, если что. Попробывать буквы перехватывать набраные и смотреть в какой они раскладке.


 
Ketmar ©   (2006-08-23 23:31) [40]

> [40] Vendict ©   (23.08.06 23:25)
хм. задача-то -- написать замену интернату. так что ждать, пока юзер тыцнет в кнопочку -- это не выход. раз.
два: для перехвата всё равно надо или хук вешать, или код внедрять. так тогда проще уже сделать нормально -- через GetConsoleLayoutName(). %-)

зыж а не для того ли internat вкшает cbt хук, чтобы гарантированно захучить консоль? %-)


 
Ketmar ©   (2006-08-24 10:16) [41]

up? %-)


 
Ketmar ©   (2006-08-27 19:13) [42]

мда. копание в потыреных исходниках Win2K показало, что использовать csr-ы -- не выход, а других нормальных способов сделать необходимое без внедрения своего кода как-то и нет. плАчу. ну почему гланды надо доставать через анус соседа? %-(


 
Eraser ©   (2006-08-27 20:20) [43]

> [0] Ketmar ©   (23.08.06 00:49)


> хуки не предлагать -- весь переключатель должен жить в одном
> .EXE и не мусорить догружаемыми DLL.


> как это делать нормально, без внедрения кода -- я так и
> не нашёл.

а чем плохо внедрение? процессоры нынче мощные, памяти много, есть подозрения, что юзерам фиолетово что-куда там внедряется :)

ЗЫ опцией можно сделать выключатель хука, т.к. некоторые антвири имеют склонность ругаться, если хук будет менять память процесса, в котором исполняется, но в данном случае думаю ничего менять не надо будет.


 
Ketmar ©   (2006-08-27 20:31) [44]

> [43] Eraser ©   (27.08.06 20:20)
юзерам вообще фиолетово, потому что переключатель я для себя пишу. %-) просто вот есть навязчивое желание сделать его в одном .EXE. маньячу. потому и пишу на асме. %-)


 
Ketmar ©   (2006-08-27 21:07) [45]

если вдруг кому ещё интересно. %-)
анализ интерната показал, что хуки -- это наше всё. CBT хук ставится для перехвата смены фокуса. но так как консоли с ним не дружат, делаются ещё и ухищрения в шелл-хуке.
конечно, куча заморочек с Ime, в которых я даже не разбирался -- пусть с этим китайцы да корейцы возятся, если их угораздило выдумать себе такую письменность.
умилили комментарии в коде: "а давайте мы сделаем вот так, и посмотрим, что будет". %-) впрочем, всё равно код чистый и красивый.

вывод: глюки с определением консольной раскладки в моём Ырзорге излечены, скорее всего, не будут.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.041 c
2-1156785114
Crazy monkey
2006-08-28 21:11
2006.09.17
Перерисовка в ttreeview


15-1156707585
Loginov Dmitry
2006-08-27 23:39
2006.09.17
Вопреки ругани форумчан


3-1152698716
Ломброзо
2006-07-12 14:05
2006.09.17
Windows authentification в Oracle


6-1146238121
NORDmen
2006-04-28 19:28
2006.09.17
winsock - recv


5-1139504418
max1000
2006-02-09 20:00
2006.09.17
Не стандартная TPanel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский