Управление текстовым курсором и вводом символов в чужих приложения
Вопрос: как программно управлять текстовым курсором и вставкой символов в чужое приложение (например, в word)?
Знаю, что это делается через winAPI, но как?
P.s. Пробывал посылать сообщение WM_CHAR. С командной строкой total'а работает вставка символа, но с вордом нет. Чувствую, что коммандная строка тотала - это наследник TEdit поэтому вставка работала. Мне нужно чтобы символы всавлялись в любое приложение, позволяющее вводить текст.
Чувствую нужно посылать другое сообщение, а не WM_CHAR.
WM_SETTEXT тоже не катит?
Просто надо правильно определить HWND окна, содержащего курсор ввода.
Нет, конечно можно на хуках забацать, но такого изврата в простом приложении ввода текста (даже в сложном типа Ворд) я не встречал - да и зачем?
А это значит - и послать ему можно сообщеньице.. :)
Но как двигать курсор (текстовый, не мышь)?
Отправлять код backspace'а. :)
Но WORD и EXCEL игнорируют мои сообщения. Причём, если EXCEL просто игнорирует мои сообщения, то WORD вообще виснет и на 100% грузит проц.
Цитата: BelStudent
Оказывается WM_CHAR нормально работает в любых полях куда можно вписывать текст, но...
Но WORD и EXCEL игнорируют мои сообщения. Причём, если EXCEL просто игнорирует мои сообщения, то WORD вообще виснет и на 100% грузит проц.
Но WORD и EXCEL игнорируют мои сообщения. Причём, если EXCEL просто игнорирует мои сообщения, то WORD вообще виснет и на 100% грузит проц.
Уверены, что посылаете сообщение нужному окну? У меня все работает и подобных эффектов не наблюдается.
Но я вот подумал: у меня стои 2007 office, может microsoft опять что-нибудь наваял в своей новой версий, и там тоже стоит hook. который перекрывает мой? Короче потестирую на другом office и потом отпишусь.
Но даже если это так, то проблема остаётся: как заставить посылать сообщения во все word'ы?
Порблема со вставкой символов в ворд решена с помощью SendInput
SendInput посути добавляет в очередь событий (в моём случае в очередь событий клавиатуры) моё событие. НО...
Но возникла другая проблема, если во время набора всплывает чужое окно, или фокус перешел на другой елемент, то последствия весьма различны: от простого игнорирвание до появления кучи других окон (всё зависит где будет фокус). А как бы удержать вставку символов в одно конкретное место?
Да измени стиль главного окна на WS_EX_TOPMOST и оно ни когда не будет перекрываться другими окнами.
SetWindowLong в комплекции с WS_EX_TOPMOST
Цитата: Everhest
Да измени стиль главного окна на WS_EX_TOPMOST и оно ни когда не будет перекрываться другими окнами.
это не поможет. тк окно графически не будет перекрываться, а вот курсор перейдет на другое окно. Надо подумать как держать окно всегда активным, а не "поверх всех окон". Это разные вещи