1

Тема: AHK: неправильно работает код при русской раскладке клавиатуры

Задача скопировать в буфер выделенную мышкой ячейку в excel. При англ. раскладке все отлично. Но при русской - сочетание alt+x срабатывает, однако скрипт вводит в ячейку символ 'c' и неудачно её копирует (ErrorLevel).
Как исправить?
Код:


!x::
	kd1 := ""
	Clipboard =         ;Сделать Буфер обмена пустым
	Send, ^c
	ClipWait, 2
	if ErrorLevel <> 0
	{
		MsgBox, Попытка скопировать текст в буфер обмена неудачна.
		Return
	}
	
	cl = %clipboard%
return

2

Re: AHK: неправильно работает код при русской раскладке клавиатуры

Попробуйте так:

Send, ^{c}
Win11x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: неправильно работает код при русской раскладке клавиатуры

__Михаил__ попробую, завтра напишу по результатам.
Я еще нашел такой вариант:

Send ^{vk43}

4

Re: AHK: неправильно работает код при русской раскладке клавиатуры

По идее ^c должно работать, если у вас последняя версия AHK.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: неправильно работает код при русской раскладке клавиатуры

А вообще лучше так:

MsgBox, % GetSelectedCellText()      

GetSelectedCellText() {
   if !IsObject( Excel := Excel_Get() ) {
      MsgBox, Failed to get Excel Application object!
      return
   }
   Return Excel.Selection.Cells[1].text
}

Excel_Get(WinTitle := "ahk_class XLMAIN") {
   ControlGet, hwnd, hwnd,, Excel71, %WinTitle%
   if !hwnd
      return
   Window := AccObjectFromWindow(hwnd, -16)
   Loop {
      try Application := Window.Application
      catch
         ControlSend, Excel71, {esc}, %WinTitle%
   } Until !!Application
   return Application
}

AccObjectFromWindow(hWnd, idObject = 0)
{
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObjEnwrap(VT_DISPATCH, pAcc, F_OWNVALUE)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: CyberGudini, 2021-10-27 01:35:25)

Re: AHK: неправильно работает код при русской раскладке клавиатуры

teadrinker пишет:

По идее ^c должно работать, если у вас последняя версия AHK.

Да, версия старая. Нужно чтобы работало именно на старой версии, с установкой новой версии почему-то возникают проблемы.

teadrinker пишет:

А вообще лучше так:

Уххх, ну прям хардкор какой-то. Понять бы еще это.
Завтра, как попробую - отпишусь.

7

Re: AHK: неправильно работает код при русской раскладке клавиатуры

На первых порах можно использовать без понимания. Нужно только получать объект Excel.Application

Excel := Excel_Get()

Excel_Get(WinTitle := "ahk_class XLMAIN") {
   ControlGet, hwnd, hwnd,, Excel71, %WinTitle%
   if !hwnd
      return
   Window := AccObjectFromWindow(hwnd, -16)
   Loop {
      try Application := Window.Application
      catch
         ControlSend, Excel71, {esc}, %WinTitle%
   } Until !!Application
   return Application
}

AccObjectFromWindow(hWnd, idObject = 0)
{
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObjEnwrap(VT_DISPATCH, pAcc, F_OWNVALUE)
}

и использовать его.
Ознакомьтесь, пожалуйста, с правилами. Обратите внимание на точки в конце предложений и правила цитирования. Я отредактировал ваш пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: неправильно работает код при русской раскладке клавиатуры

__Михаил__ увы, не сработало

9

Re: AHK: неправильно работает код при русской раскладке клавиатуры

teadrinker, работает, спасибо!