![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Добрый день!
Сделал тривиальную программулину, которая скидывает в clipboard число и время. У меня есть софтина, с её помощью я вешаю свою программу на определённый хоткей("Hotkey Manager"). Нажимаю клавишу, в буфере появляется число, потом руками нажимаю ctrl+v. Так вот вопрос: можно ли как-то организовать и программную вставку тоже? Тут как понимаю главная проблема в том что фокус уходит из окна, из которого была нажата горячая клавиша. То есть метод GetData из буфера обмена-то вызывается, но во время его выполнения фокус находится не в том окне куда надо произвести вставку :( С консольным приложением понятно фокус переходит на консоль; если делаю Win Forms Application и удаляю форму из приложения вставка куда мне надо тоже не происходит. В общем я вообще не очень понимаю как реализовать вставку в текущее окно, откуда было вызвана программулина - неужто писать сервис, который будет вешать хук на горячую клавишу, потом мониторить окно из которого был вызов, и осуществлять вставку? p.s.: в общем хз как описал вопрос, надеюсь вы меня хоть на 75% поняли -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| LamerTM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Если передавать текст (минуя буфер обмена), то сообщение надо послать в нужное окно функцией SendMessage. Фокус окну в этом случае не нужен.
Возможно можно послать сообщение WM_COMMAND, и окно примет содержимое буфера обмена. В этом случае фокус тоже не нужен. Правда я имитировал Ctrl+C таким образом (через WM_COMMAND), будет ли работать Ctrl+С не знаю. Если надо именно нажать клавиши Ctrl+V, то надо переключить фокус окну (есть API-функция для этого SetForegroundWindow), потом послать в него нужную комбинацию клавиш функцией SendInput. Фокус после этого можно вернуть предыдущему окну той же функцией. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Хук надо ставить - само собой. Но сервисы тут не причём.
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
а нафига именно ctrl+v ? обычное WM_SETTEXT не подходит чтоли?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Да какая разница в данном случае? Проблема автора в таком случае сведётся к получениюхендла окна, бывшего активным до запуска его программы. Короче, ошибка в самом подходе (вместо хука вешается непонятным образом хоткей, который тупо вызывает программу, без запоминания текущего состояния).
|
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Спасибо всем за ответы!
Именно. То есть для вставки как понял мне в любом случае нужно делать хук, а уже в нём через GetForeGroundWindow получить активное окно, и в нем сделать GetData. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |