Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 17.05.2013
Сообщений: 688
.NET 4.x

нажатия клавиш в стороней программе

17.05.2013, 10:54. Показов 3700. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите плиз, как такое можно реализовать :
Надо встороней программе (игре) сделать так, что бы каждых 5 секунд нажималась комбинация клавишь atl + Print Screen(скриншот экрана). Как это можно выполнить на платформе .NET либо сторонеми библиотеками типо WinaApi
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2013, 10:54
Ответы с готовыми решениями:

Нажатия клавиш автоматически в стороней программе
Привет, всем программистам , у меня возникла не большая проблема, по лабараторной работе по Win32Api я не знаю как ее решить. Вот суть...

Можно ли улавливать нажатия клавиш стороней клавиатуры?
Например встроенной softkeybord from Google, без того, чтобы прописывать клавиатуру в своем приложении.

Обработка нажатия клавиш клавиатуры в программе на C++
Здравствуйте, уважаемые форумчане и великие гуру! У меня есть такой вопрос: Как можно запрограммировать на C++, чтобы на определённом...

6
[Bicycle Reinventor]
 Аватар для Exerion
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
17.05.2013, 12:54
Вам нужно смотреть в сторону WinApi:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        [DllImport("User32.dll")]
        public static extern int FindWindow(string strClassName, string strWindowName);
 
 
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int FindWindowEx(int parentHandle, IntPtr childAfter, string lclassName, string windowTitle); 
 
 
        [DllImport("user32.dll")]
        public static extern bool PostMessage(int hWnd, uint Msg, int wParam, Int64 lParam);
 
 
        [DllImport("User32.dll")]
        public static extern Int32 SendMessage(int hWnd,uint Msg,int wParam,Int64 lParam);
В частности, реализация этих методов:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        const int WM_KEYDOWN = 256;
        const int WM_KEYUP = 257;
 
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string _ClassName, string _WindowName);
 
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndPrnt, IntPtr hwndChildAfter, string _ClassName, string _WindowName);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
 
        private void Post()
        {
            IntPtr hWnd = FindWindow(null, "Безымянный - Блокнот");
            if (hWnd == IntPtr.Zero)
            {
                MessageBox.Show("Not found main", "Error");
                return;
            }
            IntPtr hEdit = FindWindowEx(hWnd, IntPtr.Zero, "Edit", "");
            if (hEdit == IntPtr.Zero)
            {
                MessageBox.Show("Not found child", "Error");
                return;
            }
            IntPtr t1 = (IntPtr)Keys.F5;
            IntPtr nul = IntPtr.Zero;
            PostMessage(hEdit, WM_KEYUP, t1, nul);
            PostMessage(hEdit, WM_KEYDOWN, t1, nul);
        }

Метод отправляет нажатие кнопки F3 запущенному блокноту, даже если его окно неактивно. Минус - нельзя отправить комбинацию.

В случае отправки комбинации, можно попробовать следующее:
C#
1
2
3
4
SendMessage(handle, WM_KEYDOWN, 0x12, 0);
SendMessage(handle, WM_KEYDOWN, 0x2C, 0);
SendMessage(handle, WM_KEYUP, 0x2C, 0);
SendMessage(handle, WM_KEYUP, 0x12, 0);
Немного другая функция, но как утверждают люди на форумах, это работает и с комбинацией клавиш. Сам пробовал только отдельные кнопки, так что проверяйте сами.
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
17.05.2013, 12:55
Вот статья как делать скрины.
http://coderlife.ru/progr/nech... creen.html
0
2 / 2 / 1
Регистрация: 17.05.2013
Сообщений: 688
17.05.2013, 13:39  [ТС]
Exerion, не много не пойму а как найти окно нужно программы и где написано клавиши которые вызывались ?
0
[Bicycle Reinventor]
 Аватар для Exerion
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
17.05.2013, 13:47
Окно ищется по заголовку. В примере - это "Безымянный - Блокнот". Дочернее окно нужно только в случае с блокнотом, я думаю. Если вы можете достать хэндл окна без поиска по заголовку - тем лучше. Но вводить придётся вручную.
Отправляемый код клавиши - третий параметр в функции PostMessage. Можно нагуглить по запросу "keys virtual codes" или просто преобразовать: (IntPrt)Keys.F5 например.
Также есть функция SendKeys. Она умеет отправлять комбинации клавиш. Но работает только с активным окном, т.е. для её использования окно сперва надо активировать винапишной функцией SetForegroundWindow.

Все эти функции, их объявление и использование можно посмотреть на сайте pinvoke.net
0
2 / 2 / 1
Регистрация: 17.05.2013
Сообщений: 688
18.05.2013, 09:30  [ТС]
У меня ругаеться на эту строчку кода
C#
1
2
  DllImport("User32.dll")]
        public static extern int FindWindow(string strClassName, string strWindowName);
Пишиться что надо тип
0
2 / 2 / 1
Регистрация: 17.05.2013
Сообщений: 688
18.05.2013, 14:38  [ТС]
Цитата Сообщение от Exerion Посмотреть сообщение
Вам нужно смотреть в сторону WinApi:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        [DllImport("User32.dll")]
        public static extern int FindWindow(string strClassName, string strWindowName);
 
 
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int FindWindowEx(int parentHandle, IntPtr childAfter, string lclassName, string windowTitle); 
 
 
        [DllImport("user32.dll")]
        public static extern bool PostMessage(int hWnd, uint Msg, int wParam, Int64 lParam);
 
 
        [DllImport("User32.dll")]
        public static extern Int32 SendMessage(int hWnd,uint Msg,int wParam,Int64 lParam);
В частности, реализация этих методов:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        const int WM_KEYDOWN = 256;
        const int WM_KEYUP = 257;
 
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string _ClassName, string _WindowName);
 
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndPrnt, IntPtr hwndChildAfter, string _ClassName, string _WindowName);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
 
        private void Post()
        {
            IntPtr hWnd = FindWindow(null, "Безымянный - Блокнот");
            if (hWnd == IntPtr.Zero)
            {
                MessageBox.Show("Not found main", "Error");
                return;
            }
            IntPtr hEdit = FindWindowEx(hWnd, IntPtr.Zero, "Edit", "");
            if (hEdit == IntPtr.Zero)
            {
                MessageBox.Show("Not found child", "Error");
                return;
            }
            IntPtr t1 = (IntPtr)Keys.F5;
            IntPtr nul = IntPtr.Zero;
            PostMessage(hEdit, WM_KEYUP, t1, nul);
            PostMessage(hEdit, WM_KEYDOWN, t1, nul);
        }

Метод отправляет нажатие кнопки F3 запущенному блокноту, даже если его окно неактивно. Минус - нельзя отправить комбинацию.

В случае отправки комбинации, можно попробовать следующее:
C#
1
2
3
4
SendMessage(handle, WM_KEYDOWN, 0x12, 0);
SendMessage(handle, WM_KEYDOWN, 0x2C, 0);
SendMessage(handle, WM_KEYUP, 0x2C, 0);
SendMessage(handle, WM_KEYUP, 0x12, 0);
Немного другая функция, но как утверждают люди на форумах, это работает и с комбинацией клавиш. Сам пробовал только отдельные кнопки, так что проверяйте сами.
Написал код, который вы мне сказали, но у меня почему-то не находит блокнот , хотя я его запустил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2013, 14:38
Помогаю со студенческими работами здесь

Можно в программе Lazarus эмитировать нажатия клавиш, и насколько сложно?
Дело в том, что там где сейчас нахожусь, часто выключают свет, а мне нужно будет кое-что вытачивать на ЧПУ, работу он не журналирует. Лезть...

Перехватчик клавиш + эмуляция нажатия клавиш
Здравствуйте! Срочно нужна помощь! Моя программа работает в фоновом режиме. Мне нужно: 1) чтобы где бы я не находился в среде,...

Нажатия клавиш
В mfc нужно чтобы при нажатии клавиш, происходило действие. С помощью WM_KEYDOWN, пытался сделать, чтобы при нажатии клавиш программа...

Нажатия клавиш
Напишите пожалуйста код который будет нажимать клавиши 5 и 6 с активации на пробел

Имитация нажатия клавиш
Как сделать так, чтобы нужный мне текст как будто сам набирался на клавиатуре, но чтобы пользователь (другой человек) сам ничего не делал?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru