| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Программно ctrl+V в окно другого приложения |
| Автор: Rockie 9.9.2009, 12:49 |
| Добрый день! Сделал тривиальную программулину, которая скидывает в clipboard число и время. У меня есть софтина, с её помощью я вешаю свою программу на определённый хоткей("Hotkey Manager"). Нажимаю клавишу, в буфере появляется число, потом руками нажимаю ctrl+v. Так вот вопрос: можно ли как-то организовать и программную вставку тоже? Тут как понимаю главная проблема в том что фокус уходит из окна, из которого была нажата горячая клавиша. То есть метод GetData из буфера обмена-то вызывается, но во время его выполнения фокус находится не в том окне куда надо произвести вставку :( С консольным приложением понятно фокус переходит на консоль; если делаю Win Forms Application и удаляю форму из приложения вставка куда мне надо тоже не происходит. В общем я вообще не очень понимаю как реализовать вставку в текущее окно, откуда было вызвана программулина - неужто писать сервис, который будет вешать хук на горячую клавишу, потом мониторить окно из которого был вызов, и осуществлять вставку? p.s.: в общем хз как описал вопрос, надеюсь вы меня хоть на 75% поняли |
| Автор: LamerTM 12.9.2009, 20:42 |
| Если передавать текст (минуя буфер обмена), то сообщение надо послать в нужное окно функцией SendMessage. Фокус окну в этом случае не нужен. Возможно можно послать сообщение WM_COMMAND, и окно примет содержимое буфера обмена. В этом случае фокус тоже не нужен. Правда я имитировал Ctrl+C таким образом (через WM_COMMAND), будет ли работать Ctrl+С не знаю. Если надо именно нажать клавиши Ctrl+V, то надо переключить фокус окну (есть API-функция для этого SetForegroundWindow), потом послать в него нужную комбинацию клавиш функцией SendInput. Фокус после этого можно вернуть предыдущему окну той же функцией. |
| Автор: Любитель 12.9.2009, 23:32 |
| Хук надо ставить - само собой. Но сервисы тут не причём. |
| Автор: jonie 13.9.2009, 22:35 |
| а нафига именно ctrl+v ? обычное http://msdn.microsoft.com/en-us/library/ms632644%28VS.85%29.aspx не подходит чтоли? |
| Автор: Любитель 14.9.2009, 01:17 |
| Да какая разница в данном случае? Проблема автора в таком случае сведётся к получениюхендла окна, бывшего активным до запуска его программы. Короче, ошибка в самом подходе (вместо хука вешается непонятным образом хоткей, который тупо вызывает программу, без запоминания текущего состояния). |