Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация

C# Скрипт или макрос.

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 04.05.2017, 12:35   #1
 Разведчик
Аватар для September13
 
September13 никому не известный тип
Регистрация: 04.05.2017
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
Question C# Скрипт или макрос.

Добрый день.
Как в с# реализовать мою идею?
Идея вот в чем.
Запускаю прогу WPF и захожу в игру. Нажимаю на клавишу которую забиндил и выполняется скрипт.
Вроде на словах просто))
Но как реализовать? Создаю форму wpf, затем кликаю на события осного процесса приложения и пользуясь методом Send.Keys пишу скрипт. Что-то типа

if(KeyCode==Key.F1)
Send.Keys("{qwert});


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

Можно сказать пытаюсь сделать что-то наподобии AHK только свое))

Может библиотеку какую подключить, или в настройках полазить что бы прога работала в фоновом процессе. Любая информация будет полезна.
  Ответить с цитированием
Старый 04.05.2017, 19:31   #2
 Разведчик
Аватар для KLAIDY
 
KLAIDY никому не известный тип
Регистрация: 11.10.2010
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
 
По умолчанию Re: C# Скрипт или макрос.

Насколько я понял, вам нужен глобальный хук клавиш.
Можете почитать об этом в интернете.
Лично я пользуюсь вот этим классом (написал не сам, нашел в интернете):
Код:
    class globalKeyboardHook
    {

        public struct keyboardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }

        const int WH_KEYBOARD_LL = 13;
        const int WM_KEYDOWN = 0x100;
        const int WM_KEYUP = 0x101;
        const int WM_SYSKEYDOWN = 0x104;
        const int WM_SYSKEYUP = 0x105;

        public List<Keys> HookedKeys = new List<Keys>();

        IntPtr hhook = IntPtr.Zero;

        public event KeyEventHandler KeyDown;

        public event KeyEventHandler KeyUp;

        public globalKeyboardHook()
        {
            hook();
        }

        ~globalKeyboardHook()
        {
            unhook();
        }

        public void hook()
        {

            IntPtr hInstance = LoadLibrary("User32");
            //hhook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hInstance, 0);
            delegateHookProc = hookProc;
            hhook = SetWindowsHookEx(WH_KEYBOARD_LL, delegateHookProc, hInstance, 0);
        }
        public delegate int keyboardHookProc(int code, int wParam, ref keyboardHookStruct lParam);
        keyboardHookProc delegateHookProc;

        public void unhook()
        {
            UnhookWindowsHookEx(hhook);
        }

        public int hookProc(int code, int wParam, ref keyboardHookStruct lParam)
        {
            if (code >= 0)
            {
                Keys key = (Keys)lParam.vkCode;
                if (HookedKeys.Contains(key))
                {
                    KeyEventArgs kea = new KeyEventArgs(key);
                    if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
                    {
                        KeyDown(this, kea);
                    }
                    else
                    if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
                    {
                        KeyUp(this, kea);
                    }
                    if (kea.Handled)
                        return 1;
                }
            }
            return CallNextHookEx(hhook, code, wParam, ref lParam);
        }

        [DllImport("user32.dll")]
        static extern IntPtr SetWindowsHookEx(int idHook, keyboardHookProc callback, IntPtr hInstance, uint threadId);

        [DllImport("user32.dll")]
        static extern bool UnhookWindowsHookEx(IntPtr hInstance);

        [DllImport("user32.dll")]
        static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref keyboardHookStruct lParam);

        [DllImport("kernel32.dll")]
        static extern IntPtr LoadLibrary(string lpFileName);
    }
Использовать можно следующим образом:
Код:
 public partial class MainWindow : Window
    {
        globalKeyboardHook hook;
        public MainWindow()
        {
            hook = new globalKeyboardHook();
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            hook.HookedKeys.Add(Keys.D1);
            hook.KeyUp += new System.Windows.Forms.KeyEventHandler(gkh_KeyUp);
        }

        void gkh_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.D1)
            {
                System.Windows.MessageBox.Show("1 нажато");
            }
        }

    }
  Ответить с цитированием
Ответ

Метки
помогите

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Обсуждение] макрос для еже? exist+ Общение и обсуждение Perfect World 1 21.04.2012 11:55
[Скрипт для UOPilot / Бот] Адекватный скрипт / адекватный бот для [ВК]Легенды Santilla57 Баги игр ВКонтакте 1 15.01.2012 08:45

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 10:37.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net