0 / 0 / 0
Регистрация: 29.01.2019
Сообщений: 3
1
WPF

События в неактивном окне (в окне без фокуса)

03.02.2019, 18:21. Показов 1953. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю для себя программу, которая будет отображать нажатия определенных клавиш. Например, во время игры.

Для примера сделал окно с одной кнопкой. Изображение кнопки есть в двух вариантах - в "нажатом" и "не нажатом" состояниях.
При нажатии "W" (пока она нажата) отображается картинка с "нажатой кнопкой", если отпустить "W", то отображается исходная картинка (с "не нажатой кнопкой"). Все работает, пока окно находится в фокусе. (Первый и второй скриншоты)

Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
<Window x:Name="Interface" x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="768" Width="1024" Background="{x:Null}" Visibility="Visible" Foreground="{x:Null}" Topmost="True" KeyDown="Winodow_KeyDown" KeyUp="Winodow_KeyUp" ResizeMode="NoResize" WindowStyle="None" AllowsTransparency="True">
    <Grid>
        <Image x:Name="button" Source="Resources/fire.png" HorizontalAlignment="Left" Height="99" VerticalAlignment="Top" Width="99" Margin="784,394,0,0"/>
    </Grid>
</Window>


Кликните здесь для просмотра всего текста
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
32
33
34
35
36
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace WpfApp1
{public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Winodow_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.W)
                button.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/fire-pressed.png"));
        }
 
        private void Winodow_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.W)
                button.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/fire.png"));
        }
    }
}



Стоит переключиться на другое окно и в нем нажать на "W" - изображение не поменяется, словно события и не произошло (3-й скриншот). (Окно полностью прозрачное и оно topmost - находится поверх остальных).
Подскажите, как сделать так, чтобы программа обрабатывала события клавиатуры, даже находясь вне фокуса! И не только события клавиатуры, но и мыши (например клик).
Хотелось бы получить не ссылку на книгу, а название и описание способа, с помощью которого это можно сделать, ну или кусочек кода, в идеале - исправленный мой код. Ну или на худой конец ссылку на чей-нибудь чужой, который подошел бы мне.
Миниатюры
События в неактивном окне (в окне без фокуса)   События в неактивном окне (в окне без фокуса)   События в неактивном окне (в окне без фокуса)  

Изображения
  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2019, 18:21
Ответы с готовыми решениями:

Клик в неактивном окне
всем привет,помогите плиз,не пойму в чём дело F1 в неактивном окне нажимает,а по координатам не...

Работа в неактивном окне
Народ, подскажете как, ну или ссылку на информацию дайте, как можно сделать следующее: заставить...

Нажатие на кнопку в неактивном окне
Добрый день,у меня есть такая задача,есть свернутая программа,нужно нажать на кнопку (например V) и...

Нажатие клавиш в неактивном окне
Hello, ребят, суть вопроса такова. Можно ли как либо эмулировать нажатие клавишь в неактивном окне...

3
1509 / 900 / 328
Регистрация: 17.05.2015
Сообщений: 3,399
03.02.2019, 19:12 2
artossar, событие KeyDown срабатывает только кода форма в фокусе. Чтобы ловить нажатия клавиш вне вашего окна нужен глобальный хук клавиатуры
1
0 / 0 / 0
Регистрация: 29.01.2019
Сообщений: 3
03.02.2019, 19:35  [ТС] 3
Спасибо, попробую почитать об этом. И не подскажешь еще, можно ли глобальный хук мыши сделать?
0
1509 / 900 / 328
Регистрация: 17.05.2015
Сообщений: 3,399
03.02.2019, 19:48 4
artossar, реализаций на С# - море. Гуглите. Вот например


Добавлено через 13 секунд


Добавлено через 25 секунд


Добавлено через 28 секунд
что то ссылки не кидаются..
0
03.02.2019, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2019, 19:48
Помогаю со студенческими работами здесь

Перемещение мышки в неактивном окне
Здравствуйте!! Помогите пожалуйста разобраться с неточностью в программе. Программа работает с...

Клик мыши в неактивном окне
Открыто окно Opera, свёрнут Google Chrome Мы запускаем программу, которая должна кликнуть по...

Поиск цвета в неактивном окне
Возможно ли реализовать поиск цвета пикселя в неактивном или свернутом окне?

Нажатие клавиш в неактивном окне
Здравствуйте. Есть окно, оно не активно. Нужно программно послать нажатие какой-то клавиши,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru