没有基础学做网站seo技巧是什么
Windows自带的资源管理器可以用命令行打开并定位某个文件夹,或文件。
TC也可以如下方式实现, “打开并定位” 某目录或某文件
#z::
tc:="E:\totalcmd\TOTALCMD.EXE"
;用文件测试 action_path:="G:\BaiduNetdickDownload\macOS High Sierra 10.13.iso";用目录测试
action_path:="G:\BaiduNetdickDownload\典范英语练习册和教学参考"
TC打开并定位(tc,action_path)
return;作者:sunwind
;创作时间:2019年1月20日00:51:29
;最新更新时间:2020年11月23日17:03:13
;功能:用TC打开并定位某目录或某文件
;最新版本:https://blog.csdn.net/liuyukuan/article/details/86558810TC打开并定位(tc,action_path)
{If InStr(FileExist(action_path), "D") ;is Folder{run %tc% /O /T /A /S /L="%action_path%"if WinExist("ahk_class TTOTAL_CMD"){WinActivatesend {backspace}}}else{run %tc% /O /T /A /S /L="%action_path%"}
}
以下是:用AutoHotkey+Everything.dll替代Listary实现在TC中定位文件
操作步骤:
双击Ctrl-->输入文件名-->调用Everything.dll快搜文件
-->选择搜索结果中某文件-->Shift+Eter 直接在TC中定位到该文件
/*
用AutoHotkey+Everything.dll替代Listary实现在TC中定位文件
操作步骤:双击Ctrl-->输入文件名-->调用Everything.dll快搜文件
-->选择搜索结果中某文件-->Shift+Eter 直接在TC中定位到该文件*/
;作者:sunwind
;创作时间:2019年1月20日00:51:29
;最新更新时间:2019年3月27日
;功能:用ahkAHK版Listary
;最新版本:https://blog.csdn.net/liuyukuan/article/details/86558810;-------------------------------------------
;准备工作:
; 1、未安装Everything的先去官网 www.voidtools.com 下载并安装Everything。
; 2、下载SDK压缩包(https://www.voidtools.com/Everything-SDK.zip),并将包中的Dll文件解压到本 脚本所在的目录。
; 3、运行 Everything.exe 不要退出,让它建立全盘的数据库
;4、使用前先在脚本里配置TotalCommander路径
;-------------------------------------------
;用法:
;1、双击Ctrl呼叫出搜索框
;2、输入要搜内容后回车
;3、弹出搜索结果列表
;4、用数字键或↑↓键选择(也可以用鼠标选定)某条结果
;5、按Shift+Enter(也可以用鼠标双击),调用TotalCommander定位该文件
;6、增加显示修改日期,并按日期降序排列#SingleInstance,force
tc:="E:\totalcmd\TOTALCMD.EXE"
Gui, Add, ListView, r20 w700 gMyListView AltSubmit, 序号|路径|修改时间IfNotExist,%A_ScriptDir%\Everything32.dll{MsgBox,17,,没有找到Everything32.dll,将不能运行`n需要下载 https://www.voidtools.com/Everything-SDK.zip,`n并将Everything32.dll放到【%A_ScriptDir%】目录下`n是否需要从网上下载?IfMsgBox Ok{;感谢hui-Zz的githubURLDownloadToFile,https://www.voidtools.com/Everything-SDK.zip,Everything-SDK.zipSleep,1000TrayTip, 请手动处理, 将包中的Dll文件夹里的Everything32.dll 文件解压到%A_ScriptDir%!RunWait,Everything-SDK.zipReload}else{TrayTip, 无法运行, 请手动将Everything32.dll放到脚本目录后 再运行!ExitApp}}TrayTip, 已就绪, 双击Ctrl试试吧!
SetTimer, HideTrayTip, -5000
returnMyListView:
if A_GuiEvent = DoubleClick
{LV_GetText(action_path, A_EventInfo,2) run %tc% /O /T /A /S /L="%action_path%"Gui,Cancel
}
return#IfWinActive,AHK版Listary
+Enter::
RowNumber = 0 ; 这样使得首次循环从列表的顶部开始搜索.
Loop
{RowNumber := LV_GetNext(RowNumber) ; 在前一次找到的位置后继续搜索.if not RowNumber ; 上面返回零, 所以选择的行已经都找到了.breakLV_GetText(action_path, RowNumber,2)run %tc% /O /T /A /S /L="%action_path%"Gui,Cancel
}
return
^o::
RowNumber = 0 ; 这样使得首次循环从列表的顶部开始搜索.
Loop
{RowNumber := LV_GetNext(RowNumber) ; 在前一次找到的位置后继续搜索.if not RowNumber ; 上面返回零, 所以选择的行已经都找到了.breakLV_GetText(action_path, RowNumber,2);~ MsgBox % "这里可以设置对话框切换功能,切到" action_pathGui,CancelChangePath(action_path)
}
#IfWinActive~LCtrl::
Keywait, LCtrl, , t0.5
if errorlevel = 1return
elseKeywait, LCtrl, d, t0.1
if errorlevel = 0
{main()
}return^F1::
main()
{ InputBox, UserInput, 请输入你要定位的内容:, , , 320, 120if ErrorLevel{return}else{if strlen(UserInput)=0returnelse{obj := {} obj:=搜索(UserInput)};得到搜索结果}Gui, Show,, AHK版ListaryLV_Delete()theLen:=obj.Count()loop,%theLen%{LV_Add("",A_Index,obj.GetFullPath(A_Index-1),obj.GetResultDateModified(A_Index-1))};~ LV_ModifyCol(2,"Auto") ; 自动调整列宽.LV_ModifyCol(2,500) ; 自动调整列宽.
}搜索(keyword)
{Obj:=new Everything(A_ScriptDir)Obj.Setkey(keyword)Obj.SetRequestFlags() ;搜索哪些字段Obj.SetSort() ;按哪个字段排序Obj.Search() ;执行搜索动作return Obj
};~ 在心如止水写的Everything类增加了获得文件创建、修改时间功能:
;~ https://github.com/Oilj/BeanLib/blob/master/Everything.ahkclass Everything{key:="",MatchWholeWord:=false,dll:=false
;----------------------------------------------------------------------
;获取Everthingdll
;预先明确装载
getdll(dllPath:=""){if(dllPath=""){dllPath:=A_ScriptDiroutputdebug "【dllPath为空被赋值】" %A_ScriptDir%}dll:=false;~ dll:=A_PtrSize=8 ? "Everything64.dll" : "Everything32.dll"if(FileExist(dllPath "\Everything32.dll")){outputdebug "【dllPath】存在Everything32.dll"dll:=DllCall("LoadLibrary", str,dllPath . "\Everything32.dll") ? "Everything32.dll" : "Everything64.dll"outputdebug ★ErrorLevel %ErrorLevel%outputdebug "【dll】" %dll%}else if(FileExist(dllPath "\Everything64.dll")){outputdebug "【dllPath】存在Everything64.dll"dll:=DllCall("LoadLibrary", str,dllPath . "Everything64.dll") ? "Everything64.dll" : "Everything.dll"outputdebug ErrorLevel %ErrorLevel%outputdebug "【dll】" %dll%}if Not(dll){throw Exception(" Everything.dll is not Exist.")}outputdebug "-------$getdll--------"return dll
};---------------------------------------------------------------------- __New(dllPath:=""){;~ if Not(WinExist("ahk_exe Everything.exe")){;~ throw Exception("ahk_exe Everything.exe is not Exist.");~ }dll:=this.getdll(dllPath)outputdebug "----->dll" %dll%if Not(dll){outputdebug "没得到dll-》" %dll%throw Exception("Not Found Everthing.dll/Everthing64.dll.")}this.dll:=dlloutputdebug "this.dll-》" %dll%this.hModule := DllCall("LoadLibrary", str, this.dll)return this
}__Delete(){DllCall("FreeLibrary", "UInt", this.hModule)return
};设置关键词
SetKey(aValue){this.key := aValueDllCall(this.dll "\Everything_SetSearch",str,this.key)return
};设置全字匹配
SetMatchWholeWord(aValue){this.MatchWholeWord := aValueDllCall(this.dll "\Everything_SetMatchWholeWord",int,aValue)return
}; 设置搜索需要返回哪些结果的选项
SetRequestFlags(){DllCall(this.dll "\Everything_SetRequestFlags", "int", (EVERYTHING_REQUEST_FILE_NAME:=0x00000001)| (EVERYTHING_REQUEST_PATH:=0x00000002)| (EVERYTHING_REQUEST_SIZE:=0x00000010)| (EVERYTHING_REQUEST_DATE_CREATED:=0x00000020)| (EVERYTHING_REQUEST_DATE_MODIFIED:=0x00000040) )return
}SetSort()
{; 文件路径升序排序:EVERYTHING_SORT_PATH_ASCENDING:=3; 创建时间升序排序:EVERYTHING_SORT_DATE_CREATED_ASCENDING:=11; 修改时间降序排序:EVERYTHING_SORT_DATE_MODIFIED_DESCENDING:=14DllCall(this.dll "\Everything_SetSort", "int",14)
};执行搜索动作 (执行后直接返回匹配数)
Search(aValue=1){DllCall(this.dll "\Everything_Query",int,aValue)return
};返回匹配总数
Count(){return DllCall(this.dll "\Everything_GetTotResults")
};返回文件名
GetFileName(aValue){return StrGet(DllCall(this.dll "\Everything_GetResultFileName",int,aValue))
};返回文件全路径
GetFullPath(aValue,cValue=128){VarSetCapacity(bValue,cValue*2)DllCall(this.dll "\Everything_GetResultFullPathName",int,aValue,str,bValue,int,cValue)return bValue
}
GetTime(ByRef date) {static add_hoursif !add_hours{add_hours:=A_Nowadd_hours-=A_NowUTC, Hours ;得到时区差;~ Coordinated Universal Time(UTC):又称为世界标准时间;;~ 比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。 ;~ Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。日历时间对于不同的编译器,是不同的。;~ 但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。;~ 例如,time_t就是一种日历时间,其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间) 到当前时刻的秒数。;~ FILETIME表示自UTC(Coordinated Universal Time)时间1601年1月1日开始的100纳秒为单位的时间;~ 注释:公元1601年到公元1970年相差369年,转化为秒数即为11644473600秒。;~ 日历时间到FILETIME 公式: ld=(日历时间转成time_t+11644473600秒)*10000000;~ FILETIME.dwLowDateTime=ld;~ hd=ld>>32;~ FILETIME.dwHighDateTime=hd}/*入参date是FILETIME结构持有的64位无符号的文件的日期和时间值。此值表示自UTC(Coordinated Universal Time)时间1601年1月1日开始的100纳秒为单位的时间。dwLowDateTime 低位32位的文件的时间值。dwHighDateTime 高位32位的文件的时间值。
FILETIME的定义是这样的
typedef struct _FILETIME{DWORD dwLowDateTime;DWORD dwHighDateTime;} FILETIME;
FILETIME这个名字很奇怪,其实他跟FILE并没有直接关系,只是很多File的API中,都以这个为时间的类型,比如你可以调用GetFileTime来取得File的创建/修改/访问时间。
FILETIME是一个__int64
1ms (毫秒) 1毫秒=0.001秒=10-3秒(millisecond)
1μs (微秒) 1微秒=0.000001=10-6秒(microsecond)
1ns (纳秒) 1纳秒=0.000000001秒=10-9秒(nanosecond)
1ps (皮秒) 1皮秒=0.000000000001秒=10-12秒
1fs (飞秒) 1飞秒=0.00000000000001秒=10-15秒时间格式:DosDateTime <====>FileTime <====> SystemTime| | |使用上面 LocalFileTime FileName 系统时间和本地时间格式的时间: (本地时区) (UTC) */;FILETIME To Time_t;FILETIME单位是100纳秒 Time_t单位是秒,差10^7次方;~ 对于结构体首个成员变量的偏移总为 0. 第二个成员的偏移为 0 加上首个成员的大小(一般为 4 字节). HighPart:=NumGet(date,4,"uint")<<32LowPar:=NumGet(date,0,"uint");~ sec1:=(NumGet(date,4,"uint")<<32|NumGet(date,0,"uint"))// 10000000sec:=(HighPart+LowPar)//10000000t:="16010101"t+=sec, Secondst+=add_hours, Hoursreturn, t
};返回文件创建时间
GetResultDateCreated(i){VarsetCapacity(date1, 8, 0)DllCall(this.dll "\Everything_GetResultDateCreated", "int",i, "Ptr",&date1)return this.GetTime(date1)
};返回文件修改时间
GetResultDateModified(i){VarsetCapacity(date2, 8, 0)DllCall(this.dll "\Everything_GetResultDateModified", "int",i, "Ptr",&date2)return this.GetTime(date2)
}}HideTrayTip() { ; NOTE: For Windows 10, replace this function with the one defined above.TrayTip
}ChangePath(LongPath)
{If InStr(FileExist(LongPath), "D") ;is Folderdir:=LongPathelseSplitPath,LongPath,filename,dir,ext,nameNoExt,drv;~ ControlGetText, w_Edit1Text, Edit1, A;~ ControlClick, Edit1, AControlSetText, Edit1, %dir%, AControlSend, Edit1, {Enter}, A;~ Sleep,100;~ ControlSetText, Edit1, %w_Edit1Text%, Areturn dir
}