aleratorio
Осваивающий
- Сообщения
- 85
- Репутация
- 43
AutoIt: 3.3.6.1
Версия: 1.0
Категория: Файловая система
Описание: Программа для создания символических/жестких ссылок в файловой системе NTFS
Код/Пример:
Файл:MakeLink.rar
Снимок:
История версий:
v1.0
* Первый релиз.
Автор(ы): aleratorio
Версия: 1.0
Категория: Файловая система
Описание: Программа для создания символических/жестких ссылок в файловой системе NTFS
Windows Vista и выше...
Позволяет создавать символические ссылки(simbolic links) на файлы/каталоги/диски,
жесткие ссылки(hard links) на файлы и соединения(junction points) для каталогов/дисков
в файловой системе ntfs.
По сути является графическим интерфейсом для системной команды mklink.
Windows XP/2000...
Позволяет создавать жесткие ссылки(hard links) на файлы и соединения(junction points)
для каталогов/дисков в файловой системе ntfs.
Cимволические ссылки(simbolic links) в Windows XP/2000 не поддерживаются.
Использует внешнюю программу appendix\mklink.exe (appendix\mklink64.exe для 64 битных
версий системы), т.к. Windows XP/2000 не имеет встроенной команды mklink.
Если программу не планируется использовать в Windows XP/2000, папку appendix можно
удалить.
При установке флага "Интегрировать в контекстное меню" - В контекстном меню
файлов/каталогов/дисков появляется пункт "Создать NTFS ссылку..." который
автоматически заполняет поле "Источник" для данного файла/каталога/диска.
Позволяет создавать символические ссылки(simbolic links) на файлы/каталоги/диски,
жесткие ссылки(hard links) на файлы и соединения(junction points) для каталогов/дисков
в файловой системе ntfs.
По сути является графическим интерфейсом для системной команды mklink.
Windows XP/2000...
Позволяет создавать жесткие ссылки(hard links) на файлы и соединения(junction points)
для каталогов/дисков в файловой системе ntfs.
Cимволические ссылки(simbolic links) в Windows XP/2000 не поддерживаются.
Использует внешнюю программу appendix\mklink.exe (appendix\mklink64.exe для 64 битных
версий системы), т.к. Windows XP/2000 не имеет встроенной команды mklink.
Если программу не планируется использовать в Windows XP/2000, папку appendix можно
удалить.
При установке флага "Интегрировать в контекстное меню" - В контекстном меню
файлов/каталогов/дисков появляется пункт "Создать NTFS ссылку..." который
автоматически заполняет поле "Источник" для данного файла/каталога/диска.
Код/Пример:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=MakeLink.ico
#AutoIt3Wrapper_Res_Description=Создание ссылок NTFS
#AutoIt3Wrapper_Res_Fileversion=1.0.0.15
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=Y
#AutoIt3Wrapper_Res_LegalCopyright=aleratorio
#AutoIt3Wrapper_Res_Language=1049
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: aleratorio
Script Function:
Оболочка для mklink(создание ссылок NTFS)
#ce ----------------------------------------------------------------------------
AutoItSetOption("TrayAutoPause", 0)
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=C:\!-= ДОКУМЕНТЫ =-\Programming\Scripts\NtfsLinks\MakeLink.kxf
$Form1 = GUICreate("MakeLink", 565, 178, 192, 124)
$Input_Source = GUICtrlCreateInput("", 76, 3, 354, 25, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
$Label1 = GUICtrlCreateLabel("Источник:", 6, 9, 55, 17)
$Label2 = GUICtrlCreateLabel("Назначение:", 6, 34, 68, 17)
$Input_Dest = GUICtrlCreateInput("", 76, 30, 354, 25, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
$Checkbox_Integrate = GUICtrlCreateCheckbox("Интегрировать в", 436, 83, 113, 17)
$Button_Create = GUICtrlCreateButton("Создать", 196, 150, 75, 25)
$Button_Cancel = GUICtrlCreateButton("Выход", 286, 150, 75, 25)
$Button_SourceDir = GUICtrlCreateButton("Каталог...", 436, 2, 62, 25)
$Button_DestDir = GUICtrlCreateButton("Каталог...", 436, 30, 62, 25)
$Button_SourceFile = GUICtrlCreateButton("Файл...", 500, 2, 62, 25)
$Radio_None = GUICtrlCreateRadio("Символическая ссылка на файл", 213, 127, 205, 17)
$Radio_D = GUICtrlCreateRadio("Символическая ссылка на каталог", 7, 127, 197, 17)
$Radio_H = GUICtrlCreateRadio("Жесткая ссылка на файл", 213, 83, 159, 17)
$Radio_J = GUICtrlCreateRadio("Соединение для каталога", 7, 83, 173, 17)
$Input_LinkName = GUICtrlCreateInput("", 76, 57, 354, 25)
$Label3 = GUICtrlCreateLabel("Имя ссылки:", 6, 60, 70, 17)
$Label4 = GUICtrlCreateLabel("Для Windows Vista и выше:", 13, 110, 141, 17)
$Label5 = GUICtrlCreateLabel("контекстное меню", 453, 100, 99, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $Source = "" ;диск/каталог/файл на который будет указывать ссылка
Global $Dest = "" ;диск/каталог в котором будет находиться ссылка
Global $Param = "" ;параметр для mklink ("" - символическая ссылка на файл; "/D " - символическая ссылка на каталог;
;"/H " - жесткая ссылка на файл; "/J " - соединение для каталога )
;Определяем версию ОС, т.к. символические ссылки возможны только в Windows Vista и выше
Global $Is_XP_2000 = (@OSVersion = "WIN_XP") Or (@OSVersion = "WIN_XPe") Or (@OSVersion = "WIN_2000")
Main()
Exit
Func Main()
If $Is_XP_2000 Then
GUICtrlSetState($Radio_D, $GUI_DISABLE)
GUICtrlSetState($Radio_None, $GUI_DISABLE)
EndIf
;проверка параметров командной строки (передаются, если был выбран пункт в контекстном меню - Создать NTFS ссылку...)
If $CmdLine[0] <> 0 Then
If $CmdLine[1] = "-d" Then ;выбран каталог/диск
SetSourceDir($CmdLine[2])
ElseIf $CmdLine[1] = "-f" Then ;выбран файл
SetSourceFile($CmdLine[2])
Else
ErrorMsgBox("Неверные параметры командной строки")
Exit
EndIf
EndIf
;проверка интеграции в контекстное меню
If RegRead("HKCR\Directory\shell\Создать NTFS ссылку...\command", "") <> "" Then GUICtrlSetState($Checkbox_Integrate, $GUI_CHECKED)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button_Cancel
Exit
Case $Checkbox_Integrate
Integrate()
Case $Button_Create
CreateLink()
Case $Button_SourceDir
SetSourceDir(FileSelectFolder("MakeLink | Выбор каталога/диска на который будет указывать ссылка...", "", 3, StringTrimRight($Source, StringLen($Source) - StringInStr($Source, "\", 0, -1))))
Case $Button_DestDir
SetDestinationDir(FileSelectFolder("MakeLink | Выбор каталога/диска в котором будет находиться ссылка...", "", 3, $Dest))
Case $Button_SourceFile
SetSourceFile(FileOpenDialog("MakeLink | Выбор файла на который будет указывать ссылка...", $Source, "All(*.*)"))
Case $Radio_None
$Param = ""
Case $Radio_D
$Param = "/D "
Case $Radio_H
$Param = "/H "
Case $Radio_J
$Param = "/J "
EndSwitch
WEnd
EndFunc ;==>Main
Func SetSourceDir($ret)
If $ret = "" Then Return ;нажата отмена
If StringTrimLeft($ret, 1) = ":\" Then ;выбран диск
$Source = $ret
GUICtrlSetData($Input_LinkName, "DRIVE_" & StringLeft($ret, 1), "")
Else ;выбран каталог
$Source = $ret & "\"
GUICtrlSetData($Input_LinkName, PathGetDirName($Source), "")
EndIf
GUICtrlSetData($Input_Source, $Source, "")
DirModeOn()
EndFunc ;==>SetSourceDir
Func SetSourceFile($ret)
If $ret = "" Then Return ;нажата отмена
$Source = $ret
GUICtrlSetData($Input_Source, $Source, "")
GUICtrlSetData($Input_LinkName, PathGetFileName($Source), "")
FileModeOn()
EndFunc ;==>SetSourceFile
Func SetDestinationDir($ret)
If $ret = "" Then Return ;нажата отмена
If StringTrimLeft($ret, 1) <> ":\" Then $ret &= "\" ;выбран каталог (иначе - выбран диск - второй слэш не добавляем)
$Dest = $ret
GUICtrlSetData($Input_Dest, $Dest, "")
EndFunc ;==>SetDestinationDir
Func PathGetFileName($path) ;возвращает имя файла по заданному полному пути
return (StringTrimLeft($path, StringInStr($path, "\", 0, -1)))
EndFunc ;==>PathGetFileName
Func PathGetDirName($path) ;возвращает имя каталога по заданному полному пути
return (StringTrimRight(StringTrimLeft($path, StringInStr($path, "\", 0, -2)), 1))
EndFunc ;==>PathGetDirName
Func DirModeOn() ;активирует переключатели возможных действий для каталога/диска
GUICtrlSetState($Radio_None, $GUI_DISABLE)
GUICtrlSetState($Radio_H, $GUI_DISABLE)
GUICtrlSetState($Radio_J, $GUI_ENABLE)
If $Is_XP_2000 Then
GUICtrlSetState($Radio_J, $GUI_CHECKED)
$Param = "/J "
Else
GUICtrlSetState($Radio_D, $GUI_ENABLE + $GUI_CHECKED)
$Param = "/D "
EndIf
EndFunc ;==>DirModeOn
Func FileModeOn() ;активирует переключатели возможных действий для файла
GUICtrlSetState($Radio_D, $GUI_DISABLE)
GUICtrlSetState($Radio_H, $GUI_ENABLE)
GUICtrlSetState($Radio_J, $GUI_DISABLE)
If $Is_XP_2000 Then
GUICtrlSetState($Radio_H, $GUI_CHECKED)
$Param = "/H "
Else
GUICtrlSetState($Radio_None, $GUI_ENABLE + $GUI_CHECKED)
$Param = ""
EndIf
EndFunc ;==>FileModeOn
Func Integrate() ;интегрирует команду в контекстное меню
If BitAND(GUICtrlRead($Checkbox_Integrate), $GUI_CHECKED) Then
RegWrite("HKCR\Directory\shell\Создать NTFS ссылку...\command", "", "REG_SZ", @ScriptDir & '\makelink.exe -d "%1"')
RegWrite("HKCR\Drive\shell\Создать NTFS ссылку...\command", "", "REG_SZ", @ScriptDir & '\makelink.exe -d "%1"')
RegWrite("HKCR\*\shell\Создать NTFS ссылку...\command", "", "REG_SZ", @ScriptDir & '\makelink.exe -f "%1"')
Else
RegDelete("HKCR\Directory\shell\Создать NTFS ссылку...")
RegDelete("HKCR\Drive\shell\Создать NTFS ссылку...")
RegDelete("HKCR\*\shell\Создать NTFS ссылку...")
EndIf
EndFunc ;==>Integrate
Func ErrorMsgBox($message)
MsgBox(16, "MakeLink | Ошибка...", $message)
EndFunc ;==>ErrorMsgBox
Func CreateLink()
If $Source = "" Then
ErrorMsgBox("Не задан исходный диск/каталог/файл")
Return
EndIf
If $Dest = "" Then
ErrorMsgBox("Не задан диск/каталог назначения")
Return
EndIf
$LinkName = GUICtrlRead($Input_LinkName)
If $LinkName = "" Or StringIsSpace($LinkName) Then
ErrorMsgBox("Не указано имя ссылки")
Return
EndIf
$ret = 1
If $Is_XP_2000 Then ;для Windows XP/2000 вызываем внешнюю программу appendix\mklink.exe, т.к. они не имеют встроенной команды
If @OSArch = "X86" Then
$ret = ShellExecuteWait(@ScriptDir & "\appendix\mklink.exe", $Param & '"' & $Dest & $LinkName & '" ' & FileGetShortName($Source), "", "", @SW_HIDE)
ElseIf @OSArch = "X64" Then
$ret = ShellExecuteWait(@ScriptDir & "\appendix\mklink64.exe", $Param & '"' & $Dest & $LinkName & '" ' & FileGetShortName($Source), "", "", @SW_HIDE)
EndIf
Else ;для Vista и выше вызываем встроенную команду
$ret = ShellExecuteWait(@ComSpec, "/c mklink " & $Param & '"' & $Dest & $LinkName & '" "' & $Source & '"', "", "", @SW_HIDE)
EndIf
If @error Or $ret <> 0 Then
ErrorMsgBox("Не удалось создать ссылку")
Return
EndIf
MsgBox(64, "MakeLink", "Ссылка успешно создана")
EndFunc ;==>CreateLink
Файл:MakeLink.rar
В архиве присутствует скомпилированный скрипт, исходник, и дополнения для Windows XP/2000
Интеграция в контекстное меню работает только с исполняемым файлом.
Интеграция в контекстное меню работает только с исполняемым файлом.
Снимок:
История версий:
v1.0
* Первый релиз.
Автор(ы): aleratorio