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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как "нажать клавишу" в другом приложении? 
:(
    Опции темы
infarch
Дата 17.5.2013, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте. 

Не получается решить очень простую задачу - нажать клавишу в другом приложении. Как пример напечатать букву "а" в блокноте. Примеров много но вот не получается.

Код

    class KeyHelper
    {
        const string ProcessName = "notepad";

        const string ksA = "a";

        IntPtr ptr1;

        [DllImport("User32.dll")]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("User32.dll")]
        static extern int SetForegroundWindow(IntPtr hWnd);

        public KeyHelper()
        {
            var plist = Process.GetProcessesByName(ProcessName);
            if (plist.Length == 0) throw new Exception();
            Process proc = plist[0];
            ptr1 = proc.Handle;
        }

        public void SendA()
        {
            SetForegroundWindow(ptr1);
            SendKeys.SendWait(ksA);
        }


    }



Вот и весь код. Однако на моменте SetForegroundWindow(ptr1); и начинаются проблемы. Окно программы фокус теряет однако блокнот не активируется и текст посылается в никуда. Не подскажет ли кто правильного решения?


Это сообщение отредактировал(а) infarch - 17.5.2013, 15:28
PM MAIL   Вверх
iprog2
Дата 2.6.2013, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Используйте
Код

        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr SetActiveWindow(IntPtr hWnd);

вместо SetForegroundWindow.
PM   Вверх
infarch
Дата 10.6.2013, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробовал SetActiveWindow. Стало несколько лучше в том плане что блокнот получает фокус. Кнопка по прежнему не нажимается. Еще заметил что блокнот не должен быть свернут, только не в фокусе. Иначе и не получит фокус.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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