Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.06.2012, 17:27
saylar_06 saylar_06 вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 33
Репутация: 10
По умолчанию Эмуляция нажатие клавиш в Windows 8

Доброго времени суток! Очень нуждаюсь в вашей помощи...

Есть данный код:

Код:
     hwndb := FindWindow(nil, PChar('Название окна'));
     if hwndb <> 0 then
      begin   Sleep(1000);
        label1.Caption:=label1.Caption+'go';
        keybd_event(69, 0, 0, 0);
        keybd_event(69, 0, KEYEVENTF_KEYUP, 0);
        //  Sleep(200);
        keybd_event(69, 0, 0, 0);
        keybd_event(69, 0, KEYEVENTF_KEYUP, 0);
        //  Sleep(200);
        keybd_event(87, 0, 0, 0);
        keybd_event(87, 0, KEYEVENTF_KEYUP, 0);
        //  Sleep(200);
        keybd_event(82, 0, 0, 0);
        keybd_event(82, 0, KEYEVENTF_KEYUP, 0);
        //  Sleep(200);
      end;

В общем то код рабочий если учитывать что на WIndows 7/XP он работает, но на Windows 8 просто игнорируется, есть какие нибудь соображение? или же какая нибудь альтернатива?

Заранее благодарен...
Ответить с цитированием
  #2  
Старый 08.06.2012, 17:37
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от saylar_06
В общем то код рабочий если учитывать что на WIndows 7/XP он работает, но на Windows 8 просто игнорируется, есть какие нибудь соображение? или же какая нибудь альтернатива?
в мсдн давно,очень давно ,много много лун назад, было написано
"ребята,функция keybd_event оставлена для совместимости,пользуйтесь SendInput"
но ребятам же похрен, они могут только с форумов копипастить...

зы
на 8ке много еще чего не будет работать
Ответить с цитированием
Этот пользователь сказал Спасибо robt за это полезное сообщение:
saylar_06 (08.06.2012)
  #3  
Старый 08.06.2012, 20:40
saylar_06 saylar_06 вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от robt
в мсдн давно,очень давно ,много много лун назад, было написано
"ребята,функция keybd_event оставлена для совместимости,пользуйтесь SendInput"
но ребятам же похрен, они могут только с форумов копипастить...

зы
на 8ке много еще чего не будет работать

в общем перерылся... элементарно никак не могу въехать, очень нужна ваша помошь, заного изложу сути проблемы...

Написал новый код:
Код:
          Inp.Itype := INPUT_KEYBOARD;
          Inp.ki.wVk := VK_RETURN;
          Inp.ki.dwFlags := 0;
          SendInput(1, Inp, SizeOf(Inp));
            sleep(500);
          Inp.ki.dwFlags := KEYEVENTF_KEYUP;
          SendInput(1, Inp, SizeOf(Inp));

элементарно вроде бы всё, при его исполнении должен нажаться Enter, и всё работает на Windows 8 да и код из первого поста тоже работал, но увы в других риложениях (блокнот, браузер и т.д) я же пишу приложение для игры конкретнее для Warcraft III, что первый что второй код удачно работают на Windows 7 c Warcraft III но просто игнорируются при выполнении на WIndows 8, подскажите в чем может быть ещё проблема?
Ответить с цитированием
  #4  
Старый 08.06.2012, 20:47
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от saylar_06
я же пишу приложение для игры конкретнее для Warcraft III, что первый что второй код удачно работают на Windows 7 c Warcraft III но просто игнорируются при выполнении на WIndows 8, подскажите в чем может быть ещё проблема?
ненуты тот ищо писатель , а сразу не судьба формулировать задачу полностью?
да чо угодно там может быть ,если в висте подсистему звука полность заменили, то логично что в 8ке изменена система в ввода, онаж под планшетники заточена
при выхода финала все может измениться
пока не выйдет офицального SDK для 8ки можно тока методом тыка делать
Ответить с цитированием
Этот пользователь сказал Спасибо robt за это полезное сообщение:
saylar_06 (08.06.2012)
  #5  
Старый 08.06.2012, 21:40
gazgolder gazgolder вне форума
Прохожий
 
Регистрация: 08.06.2012
Адрес: Обильное
Сообщения: 1
Репутация: 10
По умолчанию

robt, метод тыка - самый эффективный способ найти решение
Ответить с цитированием
  #6  
Старый 08.06.2012, 22:25
saylar_06 saylar_06 вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от robt
ненуты тот ищо писатель , а сразу не судьба формулировать задачу полностью?
да чо угодно там может быть ,если в висте подсистему звука полность заменили, то логично что в 8ке изменена система в ввода, онаж под планшетники заточена
при выхода финала все может измениться
пока не выйдет офицального SDK для 8ки можно тока методом тыка делать

это то понятно, но в Windows 8 открыв блокнот или другое приложение данный код работает, а вот в игре отказывается! а на Windows 7 он в игре тоже работает...
Ответить с цитированием
  #7  
Старый 08.06.2012, 22:42
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от saylar_06
это то понятно, но в Windows 8 открыв блокнот или другое приложение данный код работает, а вот в игре отказывается! а на Windows 7 он в игре тоже работает...
в играх используется DirectInput с прямым доступом к клаве и мыши, и он совершенно не обязан ловить програмную эмуляцию ,темболее в 8ке
Ответить с цитированием
  #8  
Старый 09.06.2012, 10:07
saylar_06 saylar_06 вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от robt
в играх используется DirectInput с прямым доступом к клаве и мыши, и он совершенно не обязан ловить програмную эмуляцию ,темболее в 8ке
хорошо, обьясни мне тогда пожалуйста, почему данный код выполняется на Windows 7 в Warcraft?
Ответить с цитированием
  #9  
Старый 09.06.2012, 10:21
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от saylar_06
хорошо, обьясни мне тогда пожалуйста, почему данный код выполняется на Windows 7 в Warcraft?
разные версии, прикинь...
Ответить с цитированием
  #10  
Старый 09.06.2012, 11:01
saylar_06 saylar_06 вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от robt
разные версии, прикинь...
прикидываю....


В общем упорство и труд всё перетрут Просидев пол ночи, меня всё же осенило, проблему я решил, так что тему можно либо закрыть либо удалить, большое спасибо всем кто принял участие
Ответить с цитированием
  #11  
Старый 09.06.2012, 11:19
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

saylar_06 ну так как же?
Ответить с цитированием
  #12  
Старый 10.06.2012, 09:25
saylar_06 saylar_06 вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 33
Репутация: 10
По умолчанию

люди, все очень просто дело было не в самом коде, а в Winodws 8, дело в том что практические любое действие oc блокирует (даже при выключеном UAC и SmartScreen) нужно было дать программе уровень администратора(не просто открыть от имени администратора) а зайти в Свойства-->Совместимость-->Изменить параметры для всех пользователей--> и поставить галочку Выполнять программу от имени администратора!

и вооля всё заработало!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025