Эмуляция клавиатуры

Обсуждение проблем, возникающих при разработке программ для мобильных устройств.
vlabar
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.12.2004 (Чт) 9:17

Эмуляция клавиатуры

Сообщение vlabar » 02.12.2004 (Чт) 10:20

Есть радиотерминал со встроенным считывателем штрихкодов. Операционка WindowsCE. Необходимо чтобы при чтении штрихкода данные из буфера попадали в поле ввода любого окна независимо от того какое приложение работает(активно). Т.е. как будто ввод идет с клавиатуры( где стоит курсор туда и данные и должны попасть). Подскажите спецы в каком направлении копать? Сам подозреваю что нужно использовать API фукции

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 02.12.2004 (Чт) 20:41

Думается, сначала стоит найти окно, с которым в данный момент работает
Код: Выделить всё
'/*Это для C++
'static CWnd* PASCAL GetForegroundWindow( );
'*/

'/*И для VB
Declare Function GetForegroundWindow Lib "user32" () As Long
'*/


Потом найти поле ввода и послать ему сообщение, НО есть одно но, в MSDN->Windows CE Documentation я не смог обнаружить описание FindWindowEx (есть ли эта ф-ция там?)
Опишу только посылку сообщения в активное поле ввода, а про FindWindowEx жди ответа (tyomich, Шаман, Экстремал :lol: АУ)

Код: Выделить всё
Const WM_PASTE = &H302
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Call SendMessage(TEXTBOX_HANDLE, WM_PASTE, 0&, 0&)

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 02.12.2004 (Чт) 23:08

Есть только FindWindow
Код: Выделить всё
Private Declare Function FindWindow Lib "Coredll.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
2 xolod: никаких user32.dll там нет :wink:
Код: Выделить всё
Private Declare Function SendMessage Lib "Coredll.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Long) As Long
WM_PASTE такой же, но вот что с текстбоксом делать, я не знаю... Может, лучше просто через WM_KEYDOWN вывести? :roll:

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 02.12.2004 (Чт) 23:14

2 vlabar: меня терзают смутные сомнения, что ты не в тот форум написал... eMbedded Visual Basic - VB для КПК! :roll:
ЗЫ просто нашел такую же тему в форуме "Visual Basic"

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 02.12.2004 (Чт) 23:31

Так написано в документации к Microsoft Windows Mobile 2003, так что спорить не беруюсь, есть user32 или нет, может просто компиллер сам переписывает все как надо :?

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 03.12.2004 (Пт) 16:48

Достаточно зайти в API-Viewer, открыть файл WinCE.api и удостовериться, что там есть только один-единственный coredll.dll :wink:

ЗЫ Как же они все-таки урезали возможности VB! :shock:

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 03.12.2004 (Пт) 17:02

Ну так операционка то мобильная :lol: , а если все оставить - никаких 400 MHz Intel XScale не хватит....

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 03.12.2004 (Пт) 17:03

Во-во :)

vlabar
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.12.2004 (Чт) 9:17

Сообщение vlabar » 06.12.2004 (Пн) 11:58

Чтобы послать SendMessage окну надо знать его handle, а функции FindWindowEx нет.
Определил handle окна с которым работает пользователь через GetForegroundWindow это опять же родитель :(
Хотел подключиться к потоку который обрабатывает ввод с клавы через AttachTreadInput, но опять клин.... такой функции в CE нет.
Должно же быть решение... сам же windows CE знает как и куда послать сообщение WM_CHAR :?


Вернуться в Visual Basic для мобильных устройств

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList