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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> клавиатура и С#, экранная. 
:(
    Опции темы
70n70
Дата 9.9.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



не подскажите  как сделать тчобы при нажатии кнопки в активное окно добавлялось "значение" кнопки. пример кнопка "а" и добавлялась буква "а".. в окно которе сейчас используется...(не считая саму программу)
или пример показать..
PM MAIL   Вверх
$tatic
Дата 9.9.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пользуйся классом System.Windows.Forms.SendKeys
PM MAIL   Вверх
70n70
Дата 9.9.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я конечно извиняюсь, но не могли бы вы привести пример. smile

70n70
PM MAIL   Вверх
ivashkanet
Дата 9.9.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Если приложение твое, то выставляешь наружу метод формы ReceiveKey(string Key);
Код

private void ReceiveKey(string key)
{
   System.Windows.Forms.SendKeys.Send(key);
}


Если нет, то есть пример из MSDN:
Код

// Get a handle to an application window.
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string lpClassName,
    string lpWindowName);

// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

// Send a series of key presses to the Calculator application.
private void button1_Click(object sender, EventArgs e)
{
    // Get a handle to the Calculator application. The window class
    // and window name were obtained using the Spy++ tool.
    IntPtr calculatorHandle = FindWindow("SciCalc", "Calculator");

    // Verify that Calculator is a running process.
    if (calculatorHandle == IntPtr.Zero)
    {
        MessageBox.Show("Calculator is not running.");
        return;
    }

    // Make Calculator the foreground application and send it 
    // a set of calculations.
    SetForegroundWindow(calculatorHandle);
    SendKeys.SendWait("111");
    SendKeys.SendWait("*");
    SendKeys.SendWait("11");
    SendKeys.SendWait("=");
}





P.S. Ничего не проверял, но должно работать smile
PM MAIL WWW ICQ   Вверх
Exception
Дата 10.9.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 29
Всего: 186



Так ведь SendKeys и шлёт клавишу активному приложению smile .
PM   Вверх
$tatic
Дата 10.9.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так как планируется создать аналог экранной клавиатуры, то ее приложение будет являться активным во время его использования. Поэтому не надо забывать переключать фокус окна на требуемое приложение, поскольку еще ДО нажатия кнопки (точнее, до срабатывания события Click) на неактивной форме клавиатуры, на нее будет переходить фокус. Я не знаю как это противоречие разрешено в экранной клавиатуре винды. Может необходимо запоминать в отдельном потоке активное приложение (если это не клавиатура), затем при наступлении события активировать это окно и печатать в него.
PM MAIL   Вверх
mr.DUDA
Дата 10.9.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



В экранной клавиатуре используется windows hook, даю зуб на отсечение smile... И не нужно менять фокус.


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 11.9.2006, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @  10.9.2006,  22:44 Найти цитируемый пост)
В экранной клавиатуре используется windows hook, даю зуб на отсечение ... И не нужно менять фокус.

Не понял идею  smile Поясни  smile  smile
Имхо Дело обстоит так:
Получаем клавишу. Отправляем клаву на задний план --- становиться активным приложение с которым работал пользователь до нажатия на клаву. Отправляем ему кнопку. Возвращаем клаву на место.

Единственный скользкий момент --- клава будет прыгать вверх- вниз, но я думаю можно сделать ее всегда на верху других окон (это логично), тогда можно (а можно ли) просто убирать с нее фокус.

P.S. 
Цитата(ivashkanet @  9.9.2006,  19:41 Найти цитируемый пост)
Если приложение твое, то выставляешь наружу метод формы ReceiveKey(string Key);

Действительно бред какой-то написал. "Если приложение твое... " -- на кой тогда SendKeys  smile 
PM MAIL WWW ICQ   Вверх
$tatic
Дата 11.9.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



mr.DUDA, проблема в том, что хуки - это системное программирование, а нам надо под .NET smile
PM MAIL   Вверх
mr.DUDA
Дата 12.9.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Вроде я не так понял. Если нужно просто послать нажатие клавиши в выбранное окно - незачем делать его активным, т.к. это может проглючить (остаться висеть) и вообще будет заметно. Достаточно просто вызвать SendMessage с сообщениями WM_KEYDOWN/WM_KEYUP, см. тему про программное нажатие кнопок в приложении.


--------------------
user posted image
PM MAIL WWW   Вверх
$tatic
Дата 12.9.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



mr.DUDA, да, наверное ему так лучше будет. И оформить в класс.
PM MAIL   Вверх
neProger
Дата 24.6.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А есть ли что-нибудь еще кроме System.Windows.Forms.SendKeys.Send и keybd_event, чтобы имитировать нажатие кнопки?

В некоторые игры не удаеца отправить клавишу таким образом (игры не риагируют на нажатие), а вот тот же пунтосвичер и экранная клавиатура отправляют туда клавиши на ура. Как это у них получаеца?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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