1 (изменено: ypppu, 2016-05-31 20:06:33)

Тема: AHK: Вставка файла в MS Word 2010

По работе приходится очень много пользоваться функцией вставки объекта в документ, сам хоть и читаю справку по AutoHotKey думаю что не осилю написание такого кода. С горем пополам получилось "mute" забиндить xD.
Итак, что нужно:
в MS Word нажимаем кнопку "объект", которая находится на вкладке "вставить" --> в появившемся окне переключаемся на вкладку "создание из файла" --> там ставим галочку "в виде значка" --> нажимаем кнопку "обзор", появляется окно выбора файла.
Вот нужно чтобы по нажатию клавиши или сочетания клавиш, что предпочтительнее, появлялось сразу окно выбора файла, а все предыдущие действия выполнялись автоматически.
Может быть кто-нибудь сможет мне с этим помочь или хотя бы подтолкнуть в правильную сторону, буду очень признателен!

2

Re: AHK: Вставка файла в MS Word 2010

viktreee, в заголовке должен быть префикс скриптового языка.

3

Re: AHK: Вставка файла в MS Word 2010

ypppu
Извините, спасибо!

4

Re: AHK: Вставка файла в MS Word 2010

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

#If WinActive("ahk_class OpusApp")
F11:: InsertFileIntoWord()
#If

InsertFileIntoWord()  {
	ControlGet, ControlHwnd, Hwnd,, _WwG1, % "ahk_id" WinExist("A")
	accobj := AccObjectFromWindow(ControlHwnd, -16)
	oWord := accobj.Application
	dialog := oWord.FileDialog(msoFileDialogFilePicker := 3)
	if dialog.Show()  {
		FilePath := dialog.SelectedItems(1)
		SplitPath, FilePath, FileName
		dialog := oWord.Dialogs(wdDialogInsertObject := 172)
		for k, v in { DisplayIcon: 1, IconFileName: "C:\Windows\system32\packager.dll"
						, IconNumber: 1, FileName: FilePath, Caption: FileName, tab: 1 }
			dialog[k] := v
		dialog.Execute()
	}
}

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, 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, 1)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Вставка файла в MS Word 2010

viktreee
Для этих вещей существуют свои VBA-макросы.
Нажимаем "Запись макроса", именуем AttachFile, назначаем хоткей, останавливаем запись.
Выбираем в Макросах наш, жмём Изменить и вместо нашей процедуры вставляем с сохранением по Ctrl+S эту:

Sub AttachFile()
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = " Вставка файлов в виде значков"
    .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", "C:\")
    .Filters.Clear: .Filters.Add "Все файлы Word ", _
    "*.docx;*.docm;*.dotx;*.doc;*.dot;*.htm;*.html;*.txt;*.rtf;*.mht;*.mhml;*.xml;*.odt;*.pdf"
    If .Show <> -1 Then Exit Sub
    For Each F In .SelectedItems
      Selection.InlineShapes.AddOLEObject ClassType:="Package", FileName:=F, LinkToFile:=False, _
      DisplayAsIcon:=True, IconFileName:="C:\Windows\system32\packager.dll", _
      IconIndex:=0, IconLabel:=Mid(F, InStrRev(F, "\") + 1)
    Next
    SaveSetting Application.Name, "GetFilePath", "folder", Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
  End With
End Sub