拜拜 发表于 2023-1-29 16:58

windows自动化很难啊

想要做一个每天自动定时睡眠,早上唤醒,然后播放电脑里的有声小说的功能

查了AHK,单单唤醒功能就要那么长的代码,劝退

然后又看了win自带的任务计划程序,也难用的要死,win真是功能好弱


; AHK wake-up-timer
; scheduler provides some of the functions of Window's Task Scheduler or the command line tool "schtasks" as an AHK-script.
; Unlike Windows' Scheduled Tasks this function works with accounts without passwords
;
; Author: boskoop (http://http://www.autohotkey.com/board/topic/10587-wake-up-timer-scheduler-function)

; CONFIGURATION
Year=2006
Month=8   ;1-12
Day=30      ;1-31
Hour=21   ;0-23
Minute=16 ;1-59
Hibernate=0 ;0, 1, 2
Resume=1 ;0,1
Name=%A_Now%

; AUTOEXECUTE
WakeUp(Year, Month, Day, Hour, Minute, Hibernate, Resume, Name)

msgbox, I'm awake and working!


; FUNCTIONS
WakeUp(Year, Month, Day, Hour, Minute, Hibernate, Resume, Name)
;Awaits duetime, then returns to the caller (like some sort of "sleep until duetime").
;If the computer is in hibernate or suspend mode
;at duetime, it will be reactivated (hardware support provided)
;Parameters: Year, Month, Day, Hour, Minute together produce duetime
;Hibernate: If Hibernate=1, the function hibernates the computer. If Hibernate=2 the computer is set to
;                        suspend-mode
;Resume: If Resume=1, the system is restored from power save mode at due time
;Name: Arbitrary name for the timer
{
    duetime:=GetUTCFileTime(Year, Month, Day, Hour, Minute)

    Handle:=DLLCall("CreateWaitableTimer"
            ,"char *", 0
            ,"Int",0
            ,"Str",name, "UInt")

    DLLCall("CancelWaitableTimer","UInt",handle)

    DLLCall("SetWaitableTimer"
          ,"Uint", handle
          ,"Int64*", duetime      ;duetime must be in UTC-file-time format!
          ,"Int", 1000
          ,"uint",0
          ,"uint",0
          ,"int",resume)
   

    ;Hibernates the computer, depending on variable "Hibernate":
    If Hibernate=1                 ;Hibernate
      {
      DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)
      }
      
    If Hibernate=2                ;Suspend
            {
            DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
            }
    Signal:=DLLCall("WaitForSingleObject"
            ,"Uint", handle
            ,"Uint",-1)
            
    DllCall("CloseHandle", uint, Handle)   ;Closes the handle
   
}   


GetUTCFiletime(Year, Month, Day, Hour, Min)
;Converts "System Time" (readable time format) to "UTC File Time" (number of 100-nanosecond intervals since January 1, 1601 inCoordinated Universal Time UTC)
{
    DayOfWeek=0

    Second=00
    Millisecond=00
   

    ;Converts System Time to Local File Time:
    VarSetCapacity(MyFiletime, 64, 0)
    VarSetCapacity(MySystemtime, 32, 0)
   
    InsertInteger(Year,       MySystemtime,0)
    InsertInteger(Month,      MySystemtime,2)
    InsertInteger(DayOfWeek,MySystemtime,4)
    InsertInteger(Day,      MySystemtime,6)
    InsertInteger(Hour,       MySystemtime,8)
    InsertInteger(Min,      MySystemtime,10)
    InsertInteger(Second,   MySystemtime,12)
    InsertInteger(Millisecond,MySystemtime,14)

    DllCall("SystemTimeToFileTime", Str, MySystemtime, UInt, &MyFiletime)
    LocalFiletime := ExtractInteger(MyFiletime, 0, false, 8)

    ;Converts local file time to a file time based on the Coordinated Universal Time (UTC):
    VarSetCapacity(MyUTCFiletime, 64, 0)
    DllCall("LocalFileTimeToFileTime", Str, MyFiletime, UInt, &MyUTCFiletime)
    UTCFiletime := ExtractInteger(MyUTCFiletime, 0, false, 8)
   
    Return UTCFileTime
}


ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 32)
; Documented in Autohotkey Help
{
    Loop %pSize%
      result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1)
    if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
      return result
    return -(0xFFFFFFFF - result + 1)
}



InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
; Documentated in Autohotkey Help
{
Loop %pSize%
          DllCall("RtlFillMemory", UInt, &pDest + pOffset + A_Index-1
                  , UInt, 1, UChar, pInteger >> 8*(A_Index-1) & 0xFF)
}

再买自检星剁手 发表于 2023-1-29 17:04

windaria 发表于 2023-1-29 17:10

再买自检星剁手 发表于 2023-1-29 17:04
由于gui一坨,Linux的优势就是通过脚本和命令规模化自动化很方便



linux也有方便使用的各种gui版啊,没什么关系吧

cfeng123 发表于 2023-1-29 17:12

试试Jenkins?

noahhhh 发表于 2023-1-29 17:20

用微软的Power Automate啊,低代码傻瓜式操作

—— 来自 S1Fun

roamer 发表于 2023-1-29 17:27

noahhhh 发表于 2023-1-29 17:20
用微软的Power Automate啊,低代码傻瓜式操作

—— 来自 S1Fun

这个有没有被砍掉的风险,对微软的产品总是保持怀疑

Midnight.Coup 发表于 2023-1-29 17:29

本帖最后由 Midnight.Coup 于 2023-1-29 18:51 编辑

roamer 发表于 2023-1-29 17:27
这个有没有被砍掉的风险,对微软的产品总是保持怀疑
PowerShell 想必是不会被砍的,Power Automate 应该是和 Office 超级全家桶(包括 PowerBI 那些)配合用的

nanoka111 发表于 2023-1-29 17:36

其实在XP时代中期以前,是可以通过VBS来实现很多自动化操作的,这也是一种比较易学易用的脚本语言。
但是后来随着几次大的病毒流行事件,VBS这块因为安全性差成为首当其冲的罪魁祸首被限用了,再后来随着账单大门的离开,对BASIC语言有情怀的人已经不复存在,任何跟BASIC语言有关的功能都已经被边缘化而且基本不再有更新和改进了。其实现在电脑版的Windows仍然保留这些功能但用起来都比较麻烦了,想起来以前杂志上有过很多对这些应用的介绍,现在基本全部作废了。

noahhhh 发表于 2023-1-29 17:44

roamer 发表于 2023-1-29 17:27
这个有没有被砍掉的风险,对微软的产品总是保持怀疑

低代码还在风头上,又是赚钱的东西怎会砍

—— 来自 S1Fun

袄_偶滴小乔 发表于 2023-1-29 17:46

唤醒能不能交给其他设备来做,比如路由器每天定时发个魔术包给电脑唤醒,唤醒以后用任务计划放音频和睡眠

litel 发表于 2023-1-30 01:32

电脑主板BIOS 设置自动开机。。。ahk写好播放功能建一个快捷方式放开始菜单 启动 文件夹。。。

Andrue 发表于 2023-1-30 01:44

外部设备定时wol唤醒电脑,电脑时间匹配触发完成任务

QUI 发表于 2023-1-30 07:10

理论上可以 WoL+SSH+PowerShell 全部通过网络控制
https://devblogs.microsoft.com/scripting/powertip-use-powershell-to-play-wav-files/

Aeroblast 发表于 2023-1-30 07:15

这个需求换iOS的快捷指令闹钟唤醒+Bookplayer就能做吧

瓦格雷 发表于 2023-1-30 07:20

电脑设置通电启动 接一个定时插座(智能也行)开机后总会了吧

灰流うらら 发表于 2023-1-30 12:06

精钢魔像 发表于 2023-1-30 16:53

这代码看着长,其实就是设个日期,调几个api

testalphagogogo 发表于 2023-1-30 18:31

用批处理启动应用程序怎么样

win8 发表于 2023-1-31 08:15

计划任务能有什么难用的,迷惑

すぴぱら 发表于 2023-1-31 08:19

Flyfish233 发表于 2023-1-31 09:27

不会用的人来说计划任务比crontab舒服多了手指头点点就行

系统杀手 发表于 2023-2-1 21:43

bIOS设置定时自动开机或上电自动开机比折腾睡眠启动强多了。 至于自动关机软件办法太多了随便选。

—— 来自 S1Fun

satan023 发表于 2023-2-2 10:04

计划任务很好用啊 功能也很强大

日日夜夜 发表于 2023-2-2 10:29

干啥活用啥工具,用c++去写网页一样蛋疼

佳丽三千到 发表于 2023-2-2 10:55

如果是电脑里面的有声小说,不应该直接计划任务启动一个本地播放器,然后在播放器里面设置“自动播放”、“接上次播放”就好了吗?

—— 来自 HUAWEI EVR-AL00, Android 10上的 S1Next-鹅版 v2.5.4

拜拜 发表于 2023-2-2 11:10

佳丽三千到 发表于 2023-2-2 10:55
如果是电脑里面的有声小说,不应该直接计划任务启动一个本地播放器,然后在播放器里面设置“自动播放”、“ ...

难点是自动开机并输入密码进入系统

—— 来自 Hisense HNR320T, Android 10上的 S1Next-鹅版 v2.5.4

佳丽三千到 发表于 2023-2-2 12:31

拜拜 发表于 2023-2-2 11:10
难点是自动开机并输入密码进入系统

—— 来自 Hisense HNR320T, Android 10上的 S1Next-鹅版 v2.5.4 ...

不能改原有账户设置的话,只能想办法另搞一个无密码账户了。


—— 来自 HUAWEI EVR-AL00, Android 10上的 S1Next-鹅版 v2.5.4

heroboy 发表于 2023-2-2 13:37

代码那么长其实就相当于
Sleep(duetime - now);
不过我不了解各种唤醒模式之类的东西,毕竟各种硬件不同,没了解过。waitable timer和SetSuspendState不是很懂。

Flyfish233 发表于 2023-2-2 16:15

拜拜 发表于 2023-2-2 11:10
难点是自动开机并输入密码进入系统

—— 来自 Hisense HNR320T, Android 10上的 S1Next-鹅版 v2.5.4 ...

哥 计划任务可以输入账号和密码让他登录后执行的

kenqqex 发表于 2023-2-2 16:19

你把开机输密码这个环节去掉不就好了.......
然后再搞个1分钟自动锁屏

Nanachi 发表于 2023-2-2 16:24

&#x697C;&#x4E3B;&#x8FD9;&#x6807;&#x9898;&#x7B97;&#x662F;&#x4EB2;&#x8EAB;&#x5B9E;&#x8DF5;&#x4E92;&#x8054;&#x7F51;&#x63D0;&#x95EE;&#x6280;&#x5DE7;&#x4E86;
页: [1]
查看完整版本: windows自动化很难啊