Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] ControlSend работает не на всех компьютерах.

Ответить
Настройки темы
[решено] ControlSend работает не на всех компьютерах.

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Пишу приложение - Бота для онлайн игры.
Использую для эмуляции нажатия кнопок при неактивном окне клиента игры, следующую функцию.
Код: Выделить весь код
Func presskey($param1)
	_SendMessage($handle, 0x6, 0x1)
	ControlSend($handle, "", "", $param1)
	_SendMessage($handle, 0x6, 0x1)
EndFunc

presskey("c")
На моем компьютере работает нормально а ноутбуке (Samsung r20) не нажимает клавиши букв(тоесть presskey("1") -работает а presskey("c")-нет) . ОС на обоих компах Win XP. Причем на ноуте не получестя даже Send("c"), вручную кнопка конечно же работае.
1)Подозреваю, что нужно отправлять клавиши в виде ascii, подскажите как?
2)Использование ControlSend приводит к периодическому залипанию клавиши shif. Это баг или есть способ лучше?

Отправлено: 01:34, 02-12-2009

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


подозреваю, что раскладка по умолчанию на проблемной машине - русская.
если да, то как вариант выход - менять на английскую

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:54, 02-12-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


2kaster
спасибо огромное. Выставил раскладку по умолчанию английской(Панель управления>>Язык и региональные стандарты>>Подробнее>>Язык ввода по умолчанию) и все заработало.

Дайте пожалуйста ответ и на второй вопрос. На офф форуме читал, что существует проблема залипания shift, поделитесь опытом.

Последний раз редактировалось mymindspam, 02-12-2009 в 03:01. Причина: update


Отправлено: 02:56, 02-12-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата mymindspam:
Подозреваю, что нужно отправлять клавиши в виде ascii, подскажите как? »
Чтобы не преключать раскладку, предлагаю такую функцию:
Код: Выделить весь код
_ControlSendEx($handle, "", "", $param1)

Func _ControlSendEx($sTitle, $sText, $iCtrlID, $sKeys, $iFlag=0)
    If @KBLayout = 0419 Then
        Local $sANSI_Chars = "ёйцукенгшщзхъфывапролджэячсмитьбю.?"
        Local $sASCII_Chars = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./&"

        Local $aSplit_Keys = StringSplit($sKeys, "")
        Local $sKey
        $sKeys = ""

        For $i = 1 To $aSplit_Keys[0]
            $sKey = StringMid($sANSI_Chars, StringInStr($sASCII_Chars, $aSplit_Keys[$i]), 1)

            If $sKey <> "" Then
                $sKeys &= $sKey
            Else
                $sKeys &= $aSplit_Keys[$i]
            EndIf
        Next
    EndIf

    Return ControlSend($sTitle, $sText, $iCtrlID, $sKeys, $iFlag)
EndFunc
Цитата mymindspam:
Использование ControlSend приводит к периодическому залипанию клавиши shif. Это баг или есть способ лучше? »
Обходится примерно так:
Код: Выделить весь код
#include <Misc.au3>

Func _ControlSendExEx($sTitle, $sText, $iCtrlID, $sKeys, $iFlag)
    Local $hUser32DllOpen = DllOpen("User32.dll")

    While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
        Sleep(10)
    WEnd

    DllClose($hUser32DllOpen)
    Return _ControlSendEx($sTitle, $sText, $iCtrlID, $sKeys, $iFlag)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:50, 02-12-2009 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


2Creat0R
Это просто магия, спасибо *пошел читать гайд по DllOpen*

Отправлено: 16:04, 02-12-2009 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата mymindspam:
пошел читать гайд по DllOpen »
На самом деле "магия" не в ней, хотя для залипания она используется, но лучше почитать справку по _IsPressed.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 00:31, 03-12-2009 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] ControlSend работает не на всех компьютерах.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Редко определяется флэшка (на всех компьютерах) Berkyt Накопители (SSD, HDD, USB Flash) 3 25-11-2008 01:01
Установка прав на определенную папку на всех компьютерах домена ss777 Microsoft Windows NT/2000/2003 5 08-11-2008 12:52
На всех компьютерах время отстает на 10 мин zip_ukraine Microsoft Windows NT/2000/2003 4 15-09-2008 15:44
Надо чтобы на всех компьютерах входящих в домен создался сетевой диск. sir0ja Microsoft Windows NT/2000/2003 16 15-05-2008 02:25
Прочее - смена ip на всех компьютерах в домене Gaara_of_the_Desert Сетевые технологии 4 05-02-2008 17:14




 
Переход