阅读:162回复:8

通过“计划任务”而非“启动”文件夹实现自启动

楼主#
更多 发布于:2026-01-21 02:33
勾选设置中的“自启动”后,当前是用“启动”文件夹来实现的,根据我的实测,windows的开机自启动顺序如下:
1. 计划任务
2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
3. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
4. “启动”文件夹
其中“启动”文件夹是最慢的,这导致在开机后的几十秒内是无法打字的,此时连QQ等聊天软件都已经启动成功了,但就是打不了字,得等yong.exe启动后才能打字
建议改成用计划任务实现自启动,这是最快的,几乎在进入桌面的瞬间就能启动,这样开机后能立马打字,不会出现打开浏览器后想搜个东西打不了字的尴尬

最新喜欢:

化外愚民化外愚民 盘古大陆盘古大陆
沙发#
发布于:2026-01-21 19:49
如果要几十秒的话,电脑系统需要优化一下
板凳#
发布于:2026-01-21 23:57
我觉得启动文件夹更简单,也更合理,你希望计划任务可以自己按需设置到计划任务,并不需要周大改程式。
计划任务本身从名称看也不是用于开机启动程式用途。
地板#
发布于:2026-01-22 01:35
dgod:如果要几十秒的话,电脑系统需要优化一下回到原帖
我电脑并不差(13900HX+4060+32G+4T)
可能是因为我启动项多吧(光是应用软件就有十来个自启动项,还不包括系统服务啥的),但不管怎么样,“启动”文件夹确实是最慢的,肯定是比QQ等聊天软件启动更晚的
4楼#
发布于:2026-01-22 01:39
yanqian:我觉得启动文件夹更简单,也更合理,你希望计划任务可以自己按需设置到计划任务,并不需要周大改程式。
计划任务本身从名称看也不是用于开机启动程式用途。
回到原帖
> 计划任务本身从名称看也不是用于开机启动程式用途
那只是因为你不熟而已,计划任务本身就有“启动时”“登录时”这样的触发器

另外,即便不用计划任务,也应该用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
这个注册表项总归是一个常见手段吧?至少能保证比QQ等聊天软件启动更早
5楼#
发布于:2026-01-22 07:39
  加计划任务需要知道密码吧?相对麻烦点。试了下加入注册表,是比加入启动目录快点。
读万言 感万物 寻一理
6楼#
发布于:2026-01-22 08:44
化外愚民:  加计划任务需要知道密码吧?相对麻烦点。试了下加入注册表,是比加入启动目录快点。回到原帖
这就说明并不是只有我的电脑能感觉到小小输入法启动慢,而是在任何电脑上都会存在刚开机时打不了字的情况

另外,计划任务不需要密码,执行命令行即可:
schtasks /create /tn "小小输入法" /tr "'C:\Program Files (x86)\yong\yong.exe'" /sc onlogon /f
7楼#
发布于:2026-01-22 10:08
<#
.SYNOPSIS
  创建或删除计划任务 yong_onlogon
.DESCRIPTION
  - 当前用户登录时执行 yong.exe
  - 可按需运行
  - 失败后 1 分钟重试 3 次
  - 并发任务停止现有实例
  - 不受电源限制
.PARAMETER u
  如果指定 -u,将删除任务而不是创建
#>

param(
    [switch]$u
)

# ===============================
# UTF-8 控制台代码页保障
# ===============================
try {
    $cp = (chcp) -replace '[^\d]', ''
    if ($cp -ne '65001') {
        chcp 65001 > $null
    }
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
} catch {}

$taskName = "yong_onlogon"
$tempXml  = Join-Path $env:TEMP "$taskName.xml"

if ($u) {
    Write-Host "正在删除计划任务 $taskName..."
    schtasks /Delete /TN $taskName /F
    exit 0
}

# ===============================
# 管理员权限检查
# ===============================
if (-not ([Security.Principal.WindowsPrincipal] `
    [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "错误:需要管理员权限运行此脚本!"
    exit 1
}

# 当前用户 SID
$userSid = [Security.Principal.WindowsIdentity]::GetCurrent().User.Value

# ===============================
# 内嵌 XML(与用户无关,单文件交付)
# ===============================
$taskXml = @"
<?xml version="1.0" encoding="UTF-16"?>
<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.4">
  <Triggers>
    <LogonTrigger>
      <Enabled>true</Enabled>
      <UserId>$userSid</UserId>
    </LogonTrigger>
  </Triggers>

  <Principals>
    <Principal>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>

  <Settings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <StartWhenAvailable>true</StartWhenAvailable>

    <MultipleInstancesPolicy>StopExisting</MultipleInstancesPolicy>

    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>

    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>

    <!-- 禁用“如果任务运行超过时间,停止任务” -->
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
  </Settings>

  <Actions Context="Author">
    <Exec>
      <Command>C:\yourPath\yong\w64\yong.exe</Command>
    </Exec>
  </Actions>
</Task>
"@

# ===============================
# 写入临时 XML 并创建任务
# ===============================
$taskXml | Set-Content -Path $tempXml -Encoding Unicode

Write-Host "正在创建计划任务 $taskName..."
schtasks /Create /TN $taskName /XML $tempXml /F

Remove-Item $tempXml -Force

Write-Host "计划任务 $taskName 已创建成功!"

#以上内容保存为后缀名为ps1的powershell脚本
#以管理员权限运行即可创建yong.exe所需的任务计划
#-u参数可删除所创建的任务计划
8楼#
发布于:2026-01-22 10:14
忘了补充一下了,ps1保存为utf-8 bomb为好
游客

返回顶部