1

Тема: AHK: Создание новой папки двойным кликом ЛКМ

Тут есть подобное, но только через клавишу, мне не совсем удобно. Вот здесь  http://habrahabr.ru/post/24652/
наткнулся на более приемлемое решение:
Создаем новую папку в проводнике двойным щелчком по любому пустому пространству внутри окна

#IfWinActive ahk_class CabinetWClass
~LButton::
SetKeyDelay, , 50
MouseGetPos, , , , ctrl
ControlGet, sel, List, Count Selected, SysListView321, A
If DllCall("GetDoubleClickTime") > A_TimeSincePriorHotkey
and A_ThisHotkey = A_PriorHotkey
and ctrl = "SysListView321"
and sel = 0
SendEvent, !fwf
Return
#IfWinActive

Но почему то не работает, может спецы подправят что нужно, а то я валенок в этом деле, ну или свое сделают. Спасибо.

2

Re: AHK: Создание новой папки двойным кликом ЛКМ

Спецы давно всё сделали, достаточно воспользоваться поиском:
создание новой папки в Проводнике по горячей клавише

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

3

Re: AHK: Создание новой папки двойным кликом ЛКМ

Спецы давно всё сделали, достаточно воспользоваться поиском:

А зачем там такие сложности?
А почему нельзя просто в 4 строчки?

#IfWinActive, ahk_class CabinetWClass
F7::
ControlGetText, path, Edit1, ahk_class CabinetWClass
FileCreateDir, %path%\New Folder
Return

4

Re: AHK: Создание новой папки двойным кликом ЛКМ

teadrinker пишет:

Спецы давно всё сделали, достаточно воспользоваться поиском:
создание новой папки в Проводнике по горячей клавише

Я вроде писал что я знаю что здесь есть через кнопку, но только там нет по двойному ЛКМ, как самому переделать я без понятия, иначе не спрашивал бы.

5

Re: AHK: Создание новой папки двойным кликом ЛКМ

Замени

SendEvent, !fwf

на

ControlGetText, path, Edit1, ahk_class CabinetWClass
FileCreateDir, %path%\New Folder

6

Re: AHK: Создание новой папки двойным кликом ЛКМ

villla777 пишет:

как самому переделать я без понятия

Ну, для участников форума иногда включать мозги полезно!

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

7

Re: AHK: Создание новой папки двойным кликом ЛКМ

Malcev пишет:
ControlGetText, path, Edit1, ahk_class CabinetWClass
FileCreateDir, %path%\New Folder

А если уже есть папка с таким именем?
Потом, например, в Win 7 нужный контрол называется по-другому — DirectUIHWND.

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

8

Re: AHK: Создание новой папки двойным кликом ЛКМ

Тогда для Xp можно так

#IfWinActive, ahk_class CabinetWClass
F7::
ControlGetText, path, Edit1, ahk_class CabinetWClass
inputbox:
InputBox, FolderName, Create New Folder, Введите имя директории
if ErrorLevel
   return
IfExist %path%\%FolderName%
{
   msgbox, Такая директория существует
   GoTo, inputbox
}
FileCreateDir, %path%\%FolderName%
Return

9

Re: AHK: Создание новой папки двойным кликом ЛКМ

Malcev пишет:

Тогда для Xp можно так

А смысл? В последнем варианте по ссылке универсальное решение.

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

10

Re: AHK: Создание новой папки двойным кликом ЛКМ

Ну да. Но оно очень сложное (для меня так точно).
А для семерки самое легкое послать шоркат CTRL+Shift+N

11

Re: AHK: Создание новой папки двойным кликом ЛКМ

Ну да, а если уж хочется кликом мыши — то там специальная кнопочка имеется.

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

12 (изменено: villla777, 2013-02-07 04:44:29)

Re: AHK: Создание новой папки двойным кликом ЛКМ

teadrinker
Ни разу не программист, включать нечего, или тут форум только для продвинутых.

Malcev
Заменил в верхнем коде, стало создаваться по двойному клику, но после удаления или переименования папки самопроизвольно опять создается новая папка. А можно еще на клик прикрутить такое же всплывающее окошко для переименования папки. Для WinXP Спасибо.

13 (изменено: Malcev, 2013-02-07 05:17:23)

Re: AHK: Создание новой папки двойным кликом ЛКМ

Лучше использовать код teadrinker, только заменив горячую кнопку на двойное нажатие.

~LButton::
If (A_TimeSincePriorHotkey<400) and (A_ThisHotkey=A_PriorHotkey)
{
  SetBatchLines, -1
   WinGet, ID,, A
   WinGetClass, Class, A
   if !(Class ~= "(Cabinet|Explore)WClass")
      Return

   oShell := ComObjCreate("Shell.Application")
   Loop
   {
      oIE := oShell.Windows.Item(A_Index - 1)
      Sleep, 10
   } Until oIE.HWND = ID   ; получаем объект InternetExplorer для активного окна
 
   oShellFolderView := oIE.Document
   oFolder := oShellFolderView.Folder
   if !(oFolder.Self.IsFileSystem)   ; если родительская папка не является частью файловой системы
   {
      MsgBox, % "Папка """ oFolder.Self.Name """ не является частью файловой системы`
            ,`nсоздание новой папки в ней невозможно!"
      oShell := oIE := oShellFolderView := oFolder := ""
      Return
   }
 
   Loop   ; определяем имя новой папки в зависимости
   {      ; от существования других объектов с названием "Новая папка (i)"
      Sleep, 10
      FolderName := "Новая папка" . (A_Index = 1 ? "" : " (" . A_Index . ")")
   } Until !IsObject(oFolder.ParseName(FolderName))

   Count := oFolder.Items.Count    ; перед созданием новой папки определяем количество видимых объектов
   oFolder.NewFolder(FolderName)   ; создаём новую папку
   While (Count = oFolder.Items.Count)    ; ждём, пока новая папка не станет видимой
      Sleep, 50                           ; и общее количество объектов не изменится

   oShellFolderView.SelectItem(oFolder.ParseName(FolderName), 1|3|4|8)
   oShell := oIE := oShellFolderView := oFolder := ""   ; удаляем объекты из памяти
   Return
}

14

Re: AHK: Создание новой папки двойным кликом ЛКМ

Malcev
При запуске выскакивает такое окно
http://s017.radikal.ru/i433/1302/31/83d09f3f7565.jpg

15

Re: AHK: Создание новой папки двойным кликом ЛКМ

Значит надо поставить актуальную версию автохотки.

16 (изменено: villla777, 2013-02-07 05:29:59)

Re: AHK: Создание новой папки двойным кликом ЛКМ

Malcev
Да, я уже догадался, все работает, спасибо Вам большое.

17

Re: AHK: Создание новой папки двойным кликом ЛКМ

Malcev
Сейчас только заметил, папка создается при двойном клике по любому файлу а не только на свободном пространстве, как из первого поста, как то можно их срастить, исправить?

18

Re: AHK: Создание новой папки двойным кликом ЛКМ

~LButton::
If (A_TimeSincePriorHotkey<400) and (A_ThisHotkey=A_PriorHotkey)
{
  SetBatchLines, -1
   WinGet, ID,, A
   WinGetClass, Class, A
   if !(Class ~= "(Cabinet|Explore)WClass")
      Return
   ControlGet, sel, List, Count Selected, SysListView321, A
   if (sel != 0)
      Return

   oShell := ComObjCreate("Shell.Application")
   Loop
   {
      oIE := oShell.Windows.Item(A_Index - 1)
      Sleep, 10
   } Until oIE.HWND = ID   ; получаем объект InternetExplorer для активного окна
 
   oShellFolderView := oIE.Document
   oFolder := oShellFolderView.Folder
   if !(oFolder.Self.IsFileSystem)   ; если родительская папка не является частью файловой системы
   {
      MsgBox, % "Папка """ oFolder.Self.Name """ не является частью файловой системы`
            ,`nсоздание новой папки в ней невозможно!"
      oShell := oIE := oShellFolderView := oFolder := ""
      Return
   }
 
   Loop   ; определяем имя новой папки в зависимости
   {      ; от существования других объектов с названием "Новая папка (i)"
      Sleep, 10
      FolderName := "Новая папка" . (A_Index = 1 ? "" : " (" . A_Index . ")")
   } Until !IsObject(oFolder.ParseName(FolderName))

   Count := oFolder.Items.Count    ; перед созданием новой папки определяем количество видимых объектов
   oFolder.NewFolder(FolderName)   ; создаём новую папку
   While (Count = oFolder.Items.Count)    ; ждём, пока новая папка не станет видимой
      Sleep, 50                           ; и общее количество объектов не изменится

   oShellFolderView.SelectItem(oFolder.ParseName(FolderName), 1|3|4|8)
   oShell := oIE := oShellFolderView := oFolder := ""   ; удаляем объекты из памяти
   Return
}

19

Re: AHK: Создание новой папки двойным кликом ЛКМ

Malcev
Ура! Работает. Ну Вы просто волшебник, честное слово, спасибо Вам еще раз.