Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программно ctrl+V в окно другого приложения 
:(
    Опции темы
Rockie
Дата 9.9.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Добрый день!

Сделал тривиальную программулину, которая скидывает в clipboard число и время. У меня есть софтина, с её помощью я вешаю свою программу на определённый хоткей("Hotkey Manager"). Нажимаю клавишу, в буфере появляется число, потом руками нажимаю ctrl+v. 

Так вот вопрос: можно ли как-то организовать и программную вставку тоже? Тут как понимаю главная проблема в том что фокус уходит из окна, из которого была нажата горячая клавиша. То есть метод GetData из буфера обмена-то вызывается, но во время его выполнения фокус находится не в том окне куда надо произвести вставку :(

С консольным приложением понятно фокус переходит на консоль; если делаю Win Forms Application и удаляю форму из приложения вставка куда мне надо тоже не происходит.

В общем я вообще не очень понимаю как реализовать вставку в текущее окно, откуда было вызвана программулина - неужто писать сервис, который будет вешать хук на горячую клавишу, потом мониторить окно из которого был вызов, и осуществлять вставку?

p.s.: в общем хз как описал вопрос, надеюсь вы меня хоть на 75% поняли


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
LamerTM
Дата 12.9.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Если передавать текст (минуя буфер обмена), то сообщение надо послать в нужное окно функцией SendMessage. Фокус окну в этом случае не нужен.
Возможно можно послать сообщение WM_COMMAND, и окно примет содержимое буфера обмена. В этом случае фокус тоже не нужен. Правда я имитировал Ctrl+C таким образом (через WM_COMMAND), будет ли работать Ctrl+С не знаю.
Если надо именно нажать клавиши Ctrl+V, то надо переключить фокус окну (есть API-функция для этого SetForegroundWindow), потом послать в него нужную комбинацию клавиш функцией SendInput. Фокус после этого можно вернуть предыдущему окну той же функцией.
PM MAIL   Вверх
Любитель
Дата 12.9.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Хук надо ставить - само собой. Но сервисы тут не причём.


--------------------
PM MAIL ICQ Skype   Вверх
jonie
Дата 13.9.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



а нафига именно ctrl+v ? обычное WM_SETTEXT не подходит чтоли?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Любитель
Дата 14.9.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Да какая разница в данном случае? Проблема автора в таком случае сведётся к получениюхендла окна, бывшего активным до запуска его программы. Короче, ошибка в самом подходе (вместо хука вешается непонятным образом хоткей, который тупо вызывает программу, без запоминания текущего состояния).


--------------------
PM MAIL ICQ Skype   Вверх
Rockie
Дата 14.9.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Спасибо всем за ответы!

Цитата(Любитель @  14.9.2009,  01:17 Найти цитируемый пост)
Проблема автора в таком случае сведётся к получениюхендла окна, бывшего активным до запуска его программы

Именно. 

То есть для вставки как понял мне в любом случае нужно делать хук, а уже в нём через GetForeGroundWindow получить активное окно, и в нем сделать GetData.


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1171 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.