Что нового

[Мышь, клавиатура] функция Send не шлет CTRL на Windows 7 x64

ohos

Новичок
Сообщения
47
Репутация
0
Привет,

столкнулся с проблемой отправки клавиши CTRL (^) в функции Send/ControlSend на WIndows 7 - например при нажатии ^v контрол не воспринимается и вместо вставки из буфера просто пишется v

Уже воспользовался поиском и нашел, что кому-то помог запуск скрипта (скомпилированного) с правами администратора, пробовал - не помогло. Есть еще какие-нибудь варианты?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Re: [Мышь, клавиатура] функция Send не шлет CTRL на Windows 7

Код:
hotkeyset("^l", "_send")

func _send()
send("^"&"{v}")
endfunc

While 1
   
    Sleep(10)
WEnd


Проверил на нетбуке и стационарнике в обоих случаях windows7 x86 SP1. Прав админа нет и не предвидится...


P.S.
Проверил с ^v, ^{v} работает прекрасно. :whistle:
 
Автор
O

ohos

Новичок
Сообщения
47
Репутация
0
Re: [Мышь, клавиатура] функция Send не шлет CTRL на Windows 7

за hotkeyset("^l"... спасибо, похоже ^q в Win 7 чем-то занято уже...

а вот send("^"&"{v}") нивкакую не хочет работать, это может быть из-за того, что Win 7 64 и при компиляции скипта я тоже ставлю галочку x64?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Re: [Мышь, клавиатура] функция Send не шлет CTRL на Windows 7

;D ^q обычно занимается выходом из программы autoit. т.е. полный код у меня был:
Код:
hotkeyset("^q", "_quit")
hotkeyset("^l", "_send")

func _send()
send("^v")
endfunc

While 1
    Sleep(10)
WEnd

Func _quit()
exit
endfunc

win7 x64 к сожалению нет, думаю кто-нибудь протестирует скажет. :scratch:
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Re: [Мышь, клавиатура] функция Send не шлет CTRL на Windows 7

на 64 битах работает
 
Автор
O

ohos

Новичок
Сообщения
47
Репутация
0
Re: [Мышь, клавиатура] функция Send не шлет CTRL на Windows 7

пробовал этот же код

Код:
hotkeyset("^q", "_quit")
hotkeyset("^l", "_send")

func _send()
send("^v")
endfunc

While 1
    Sleep(10)
WEnd

Func _quit()
exit
endfunc

на Win XP и WIn 7, ^1 не воспринимался в упор (проверял месадж боксом), поменял на ^2 и заработало... но ^v на Win 7 x64 ни в какую воспринимать не хочет, просто нажимает v как бы игнорируя ^

p.s. компилировал как с дефолтными настройками, так и с галочкой x64 - визуальной разницы нету
 
Автор
O

ohos

Новичок
Сообщения
47
Репутация
0
вопрос все еще актуален :whistle:
 

Sniper

Новичок
Сообщения
23
Репутация
1
ohos
попробуй использовать вместо "^" это: "{lctrl}" или "{rctrl}"
 
Автор
O

ohos

Новичок
Сообщения
47
Репутация
0
эти варианты не работают, ни на Win 7 x64, ни на Win XP
 

Sniper

Новичок
Сообщения
23
Репутация
1
:laugh:

в коде вместо "^1" стоит "^l"

вот рабочий код:
Код:
hotkeyset("^q", "_quit")
hotkeyset("^1", "send1")

func send1()
	send("^v")
endfunc

While 1
    Sleep(10)
WEnd

Func _quit()
exit
endfunc


на XP работает
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Sniper сказал(а):
вот рабочий код:
А теперь назови 10 отличий от кода в 2-м и 4-м посте?

Если на 7/XP 64/32bit все нормально работает и работало, то:
1. Или не работают отключены хоткеи в активном окне. (в игрушках иногда бывает)
2. Или проблема с AutoIt на твоем компьютере или именно в твоей OS.

Скомпилированый EXE. При нажатии на любую цифру 0-9 + Ctrl идет Ctrl+V.
Только на висте не тестил...
 
Автор
O

ohos

Новичок
Сообщения
47
Репутация
0
я использовал самый первый код

Код:
hotkeyset("^q", "_quit")
hotkeyset("^2", "_send")

func _send()
send("^v")
MsgBox(0, "",'кнопки нажаты')
endfunc

While 1
    Sleep(10)
WEnd

Func _quit()
exit
endfunc

, назначал там CTRL + 2 и в функции работы с буфером вставлял месадж бокс, результат как и писал выше: на Win XP работает, на Win 7 x32 работает и даже работает на другом компьютере с Win 7 x64, но вот на первом компьютере с Win 7 x64 работать не хочет, поэтому попутные вопросы:

1. где в Win 7 может стоять запрет на программное обращение к буферу обмена? (в IE есть такая настройка и я об неё споткнулся когда когда использовал Cntrlsend в браузере)
2. где могут быть отключены программные горячие клавиши для программ? (если нажимать самому ctrls + v, то все вставляется нормально)
3. возможно ли как-то переназначить горячие клавиши для вставки текста из буфера?
 
Автор
O

ohos

Новичок
Сообщения
47
Репутация
0
товарищ, вы гений, shift + insert почему-то работает :laugh:
 

Bloodsucker

Новичок
Сообщения
1
Репутация
0
Что скажите по поводу Ctrl+a и Ctrl+c ? все выше перечисленные способы не работают и даже #requireadmin не исправил положение.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
сто раз поднимали вопрос... во первых надо быть уверенным что высылаем ctrl+v а не ctrl+м (м - русская) то есть либо назначить через функцию окну по умолчанию ввод языка EN либо просто банально дублировать :
вот один скрипт пожалуй решит все ваши сочетания взял тут подправил чуток:
Код:
hotkeyset("^q", "_quit") ; - оригинал
hotkeyset("^й", "_quit")  ; - дублирование на русском
hotkeyset("^2", "_send")
hotkeyset("^a", "_send")
hotkeyset("^фvv", "_send")
hotkeyset("^c", "_send")
hotkeyset("^с", "_send")

func _send()
send("^v")
MsgBox(0, "",'кнопки нажаты')
endfunc

While 1
    Sleep(10)
WEnd

Func _quit()
exit
EndFunc
 

darkwhite

Знающий
Сообщения
129
Репутация
5
ohos
Bloodsucker

а раскладка при отправке CTRL+V какая? не русская ли?
 

Carabin

Новичок
Сообщения
1
Репутация
0
[Мышь, клавиатура] Re: [Мышь, клавиатура] функция Send не шлет CTRL на Windows 7 x64

Столкнулся с похожей проблемой. В учебном задании (из справки) не отменялось сохранение документа в блокноте командой Send("!n").

Система - Win7x32 Rus, тему пробовал и Aero и классическую. Язык по умолчанию и русский и английский.
Перепробовал разные варианты команд, в том чиле: "{ALT}{н}", "{LALT}{н}" , "{ALT}н", "{LALT}н"

Помогло только следущее:
Код:
Send("{ALTDOWN}")
Send("{н}")
Send("{ALTUP}")


Почему - пока не понял. Кто-нибудь может пояснить, пожалуйста?

ЗЫ. Итоговый вариант отрабатывает вполне корректно при включенной английской раскладке.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Carabin
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.





Код:
_WinAPI_LoadKeyboardLayoutEx()

Run('notepad')
$hWin = WinWait('[Class:Notepad]')
If Not $hWin Then Exit 1
ControlSend($hWin, '', '[CLASS:Edit; INSTANCE:1]', '123456789')
Sleep(1000)
ControlSend($hWin, '', '', '^n')
WinWait('[Class:#32770]')
Sleep(1000)
ControlSend($hWin, '', '', '!y')


Func _WinAPI_LoadKeyboardLayoutEx($sLayoutID = 0x0409, $hWnd = 0)
    Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)

    If Not @error And $aRet[0] Then
        If $hWnd = 0 Then
            $hWnd = WinGetHandle(AutoItWinGetTitle())
        EndIf

        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
        Return 1
    EndIf

    Return SetError(1)
EndFunc
 
Верх