595076941@qq.com

修复常用的桌面程序快捷方式

;

   修复常用的桌面程序快捷方式

         2022年1月17日

 

 

 

; ------------------------------------------------
; 修复常用的桌面程序快捷方式
; 虽然 Maye 一个简洁小巧的快速启动工具 非常好用,
; 但是还是有许多电脑没有安装 Maye , 
; 还是有许多用户不习惯 Maye 的操作方式 ,
; 喜欢把快捷方式图标摆放在电脑桌面上 ,
; 有时候会不小心把电脑桌面上的有用快捷方式图标删除 ,
; 于是这个自动恢复桌面上的有用快捷方式图标的AHK脚本就诞生了.
; 作用:开机时自动修复电脑桌面误删除的图标
; 用法:
; 开始 -> 运行 -> Shell:StartUp回车
; 右击文件夹空白处 -> 新建 AutoHotkey 脚本
; 复制此源代码文件内容到新建的AutoHotkey 脚本并保存
; 在 D:\DesktopBackup\ 文件夹中放入基本的常用的程序快捷方式
; ------------------------------------------------
#SingleInstance,Ignore
#Persistent
#NoTrayIcon
loop,5
{
	DetectHiddenWindows,On
	Sleep,5
	IfWinExist,AutoRun-E-Mail-595076941@QQ.COM
		ExitApp
}
Gui, Show, Hide,AutoRun-E-Mail-595076941@QQ.COM
DetectHiddenWindows,On
SetTitleMatchMode,2
; ------------------------------------------------
runwith("admin")
FileCopyDir,D:\DesktopBackup\,C:\Users\Public\Desktop\,1
Run,XCOPY.EXE D:\DesktopBackup C:\Users\Public\Desktop /E /Y
Run,ROBOCOPY.EXE D:\DesktopBackup C:\Users\Public\Desktop /e /mt /r:3 /w:3  *.*
ExitApp
; ------------------------------------------------

; 非常感谢  空  的无私分享,
; RunWith()函数解决了长期困扰我的以管理员身份运行AHK脚本的权限问题.

/*

RunWith —— 强制以管理员权限、普通权限、ANSI、U32、U64 运行自身。
其他
21年4月8日
4
1.7k
官方帮助里有一段管理员权限运行自身的代码,但是那段代码有4个问题。

1是不能指定ahk版本。

2是不能降权运行(管理员权限降为普通权限)。

3是会丢失传入的参数。

4是每次复制粘贴一遍代码很烦。

本函数解决了以上4个问题。

使用方法:

将以下代码保存为文件“RunWith.ahk”。
放入本地库、用户库、标准库其中任意一个里(例如 “X:\我的电脑\Documents\AutoHotkey\Lib”)。

测试代码:(使用 Unicode32 版本并以管理员权限运行自身)

#Include A_ScriptDir\Include\RunWith.ahk
RunWith("admin",32)
当前AHK版本 := (!A_IsUnicode) ? "ANSI" : (A_PtrSize=4) ? "Unicode 32" : "Unicode 64"
当前权限    := (A_IsAdmin=1)  ? "管理员权限" : "普通权限"
MsgBox, % "当前AHK版本: " 当前AHK版本 "`n`n当前权限: " 当前权限

*/

; 强制自身进程以 管理员权限 或 普通权限 或 ANSI 或 U32 或 U64 版本运行。
; 例1: runwith("admin","u32") 强制自身以 u32 + 管理员权限 运行。
; 例2: runwith("","ansi")     强制自身以 ansi 版本运行(权限不变)。
; 例3: runwith("normal")      强制自身以 普通权限 运行(版本不变)。
RunWith(RunAsAdmin:="Default", ANSI_U32_U64:="Default")
{
	; 格式化预期的模式
	switch, RunAsAdmin
	{
		case "Normal","Standard","No","0":		RunAsAdmin:=0
		case "Admin","Yes","1":								RunAsAdmin:=1
		case "default":												RunAsAdmin:=A_IsAdmin
default:															RunAsAdmin:=A_IsAdmin
	}
switch, ANSI_U32_U64
{
	case "A32","ANSI","A":								ANSI_U32_U64:="AutoHotkeyA32.exe"
	case "U32","X32","32":								ANSI_U32_U64:="AutoHotkeyU32.exe"
	case "U64","X64","64":								ANSI_U32_U64:="AutoHotkeyU64.exe"
	case "default":												ANSI_U32_U64:="AutoHotkey.exe"
default:															ANSI_U32_U64:="AutoHotkey.exe"
	}
; 获取传递给 “.ahk” 的用户参数(不是 /restart 之类传递给 “.exe” 的开关参数)
for k, v in A_Args
{
	if (RunAsAdmin=1)
	{
		; 转义所有的引号与转义符号
		v:=StrReplace(v, "\", "\\")
		v:=StrReplace(v, """", "\""")
		; 无论参数中是否有空格,都给参数两边加上引号
		; Run       的内引号是 "
		ScriptParameters  .= (ScriptParameters="") ? """" v """" : A_Space """" v """"
	}
	else
	{
		; 转义所有的引号与转义符号
		; 注意要转义两次 Run 和 RunAs.exe
		v:=StrReplace(v, "\", "\\")
		v:=StrReplace(v, """", "\""")
		v:=StrReplace(v, "\", "\\")
		v:=StrReplace(v, """", "\""")
		; 无论参数中是否有空格,都给参数两边加上引号
		; RunAs.exe 的内引号是 \"
		ScriptParameters .= (ScriptParameters="") ? "\""" v "\""" : A_Space "\""" v "\"""
	}
}
; 判断当前 exe 是什么版本
if (!A_IsUnicode)
	RunningEXE:="AutoHotkeyA32.exe"
else if (A_PtrSize=4)
	RunningEXE:="AutoHotkeyU32.exe"
else if (A_PtrSize=8)
	RunningEXE:="AutoHotkeyU64.exe"
; 运行模式与预期相同,则直接返回。 ANSI_U32_U64="AutoHotkey.exe" 代表不对 ahk 版本做要求。
if (A_IsAdmin=RunAsAdmin and (ANSI_U32_U64="AutoHotkey.exe" or ANSI_U32_U64=RunningEXE))
	return
; 如果当前已经是使用 /restart 参数重启的进程,则报错避免反复重启导致死循环。
else if (RegExMatch(DllCall("GetCommandLine", "str"), " /restart(?!\S)"))
{
	预期权限:=(RunAsAdmin=1) ? "管理员权限" : "普通权限"
	当前权限:=(A_IsAdmin=1)  ? "管理员权限" : "普通权限"
	ErrorMessage=
	(LTrim
		预期使用: %ANSI_U32_U64%
		当前使用: %RunningEXE%
		预期权限: %预期权限%
		当前权限: %当前权限%
		程序即将退出。
	)
	MsgBox 0x40030, 运行状态与预期不一致, %ErrorMessage%
	ExitApp
}
else
{
	; 获取 AutoHotkey.exe 的路径
	SplitPath, A_AhkPath, , Dir
	if (RunAsAdmin=0)
	{
		; 强制普通权限运行
		switch, A_IsCompiled
		{
			; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
			; 工作目录不用单独指定,默认使用 A_WorkingDir 。
			case, "1": Run, RunAs.exe /trustlevel:0x20000 "\"%A_ScriptFullPath%\" /restart %ScriptParameters%",, Hide
default: Run, RunAs.exe /trustlevel:0x20000 "\"%Dir%\%ANSI_U32_U64%\" /restart \"%A_ScriptFullPath%\" %ScriptParameters%",, Hide
	}
}
else
{
	; 强制管理员权限运行
	switch, A_IsCompiled
	{
		; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
		; 工作目录不用单独指定,默认使用 A_WorkingDir 。
		case, "1": Run, *RunAs "%A_ScriptFullPath%" /restart %ScriptParameters%
default: Run, *RunAs "%Dir%\%ANSI_U32_U64%" /restart "%A_ScriptFullPath%" %ScriptParameters%
	}
}
ExitApp
}
}
posted @   QQ595076941  阅读(370)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
595076941@qq.com
点击右上角即可分享
微信分享提示