Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2009, 19:15   #1
Uncertainty
 
Регистрация: 10.02.2009
Сообщений: 5
Вопрос Эмуляция набора фразы на клавиатуре в независимом окне

Доброго времени суток, гостопода-коллеги.

Не смейтесь, но вот короткая пред-история.
Шеф "обозначил" меня главным по инвентаризации. По требованию компании требуется создать приличное количество документации, всякие бумаги по приёмке оборудования (при покупке), передачи его ответственному лицу в какой-либо отдел, также бумажки при передаче в ремонт и возврат и т.д. Ранее всё вели в Excel, всё бумажки делали ручками методом "копипаста". Я решил пойти другим путём, дабы упростить работу. Сделал на фре сервер, поднял apache+php+mysql. Подходящего многоуровнего портала с авторизацией не нашёл, поэтому написал его сам, включая админку и т.д. С помощью Dojo, мозгов (PHP+JavaScript+Perl) и какой-то матери создал все необходимые формы, поля, обработчики и т.д. По-требованию компании в базе обязательно должен быть (если есть) серийный номер. Достаточно нудное занятие вбивать его вручную (побежал, записал на бумажку, прибежал, вбил), поэтому я купил bar-code сканнер с памятью - Motorola Symbol CS1504. Штучка конечно супер, но моё самое огромное разочарование - с ним НЕТ никакого софта. Этого я не знал. Посему вытащить отсканированный серийник нет никакой возможности. Стал ковыряться, выкачал SDK, в котором (о счастье!) есть пример для Visual Basic. Причём работающий. Но вот есть проблемка - серийник выводится только в окне запущенной программы.

Внимание, вопрос.
Господа, своим "упрощением" жизни я уже порядком себя измотал и посему большая просьба к тому, кто понимает и может помочь. Программа-считыватель-кода-из-устройства работает спрятанной в трее, но как я уже сказал, серийник она автоматически показывает в своём окошке, а мне надо, что бы он "как-буд-то" набирался на клавиатуре. Укажите пример (а ещё лучше готовую функцию), который бы "конвертировал" серийный номер из "слова" в "нажатия на клавиатуре".

За ранее всем спасибо.
P.S. Извините за много текста.
Uncertainty вне форума Ответить с цитированием
Старый 10.02.2009, 19:18   #2
Uncertainty
 
Регистрация: 10.02.2009
Сообщений: 5
По умолчанию

P.S.2
"Как буд-то набирался на клавиатуре" - это для того, что бы код я мог вставить в ЛЮБОЕ активное поле ЛЮБОГО открытого документа. Например, в поле ввода на веб-странице, или в эксель и т.п. Я думаю это не важно КУДА, если эмулироваться будет именно набор на клавиатуре.
Спасибо.
Uncertainty вне форума Ответить с цитированием
Старый 10.02.2009, 20:34   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

насколько я понял вывод серийника происхордит в каком-то окне и оно сразу становится активным, и узнать какое окно было до этого активным уже проблематично.
в общем, случае: ставишь хук и отлавливаешь сообщение в установки текста в окне, которое выводит серийник, после того как текст в целевом окне установился посылаем сообщение в нужное окно.
rpy3uH вне форума Ответить с цитированием
Старый 10.02.2009, 20:46   #4
Uncertainty
 
Регистрация: 10.02.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
насколько я понял вывод серийника происхордит в каком-то окне и оно сразу становится активным, и узнать какое окно было до этого активным уже проблематично.
в общем, случае: ставишь хук и отлавливаешь сообщение в установки текста в окне, которое выводит серийник, после того как текст в целевом окне установился посылаем сообщение в нужное окно.
Спасибо за ответ.
Вероятно я не совсем корректно объяснил что я бы хотел видеть. Бывает
Так вот, в чём сама суть идеи. Есть программа, которая по таймеру каждую секунду соединяется с устройством, проверяет его состояние и в textbox-е выводит информацию (в данном случае серийный номер).
Мне НЕ нужен серийный номер в "теле" самой программы. Я хочу, что бы серийный номер при получении выводился как бы нажатие клавишь на клавиатуре.
Объясню для чего.
Я бы хотел, что бы программа работала как обычная.. мм.. клавиатура. Т.е. я сканирую штрих-код, программа висит в трее и сама (по таймеру) опрашивает устройство. Как только в памяти девайся появляется код (номер это номер, а серийный номер лучше кодом назвать, ибо там кроме цифр могут быть дефисы и буквы), она его не ТОЛЬКО выводит в своём окне как сейчас, но и эмулировала бы ввод данного кода с клавиатуры.
Т.е. я просто (пусть в Excel) "становлюсь" на нужную ячейку, сканирую устройством штрих-код и программа должна сэмулировать его ввод с клавиатуры.

Извините за каламбур, надеюсь смог объяснить что к чему
Uncertainty вне форума Ответить с цитированием
Старый 10.02.2009, 21:07   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

ну тогда, ставишь хук и отлавливаешь сообщение в установки текста в окне, которое выводит серийник, после того как текст в целевом окне установился эмулируем нажатие клавиш.
если нужны функции: по хукам "хуки в Windows" в гугль, эмуляция нажатия клавиш функция keybd_event
rpy3uH вне форума Ответить с цитированием
Старый 10.02.2009, 23:24   #6
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

http://programmersforum.ru/showthread.php?t=38418
В моей теме есть кусочек нужного Вам кода , если имеете опыт то "Как буд-то набирался на клавиатуре" Иимеет некоторые элементы в роде
Код:
//Ctrl+C, Strg+C: 
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
Думаю дальше будет понятно , а на счёт получения самого серийного номера rpy3uH Вам подсказал
Lime
Lime вне форума Ответить с цитированием
Старый 11.02.2009, 11:32   #7
Uncertainty
 
Регистрация: 10.02.2009
Сообщений: 5
По умолчанию

И понял и нет одновременно.
Я правильно понимаю, что "эмулируя" нажатия клавиш клавиатуры совершенно всё равно где будет находиться курсор в данный момент? Я имею ввиду не важно в какой программе, главное что бы было поле ввода?

И второе. Простите за наглость, VB не моя стихия.
Можете дать (показать) функцию, которая принимает строку и "эмулирует" набор этой строки на клаве?
Uncertainty вне форума Ответить с цитированием
Старый 11.02.2009, 11:33   #8
Uncertainty
 
Регистрация: 10.02.2009
Сообщений: 5
По умолчанию

ЗЫ. В принципе мне главное что бы появилась строка в "независимом" окне. Можно и через буфер обмена
Uncertainty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
звук на клавиатуре Михаил Юрьевич Общие вопросы Delphi 27 02.03.2008 17:34
Помогите (фразы анаграммы) Leopold666 Помощь студентам 5 09.08.2007 18:22
Всё о клавиатуре Freek Win Api 5 25.06.2007 08:48