My machine (Windows 7 64-bit) takes about 3-4 mins to completely boot. Is there any way which will indicate that boot is complete, some kind of sound / pop-up, either by using Windows in-built feature or by any 3rd party application?

I require when both windows and all the startup programs have finished booting

I usually sometime sit and wait in front of the machine, that time could be better utilized for a quickie.

This is how it looks, when the hard disk light stops blinking:

enter image description here

  • 2
    After logon process... All the background processes etc.. The whole shebang
    – Firee
    Mar 16, 2014 at 16:52
  • 3
    You may want to add what do you mean by "completed booting": all programmes loaded or just Windows OS loaded.
    – zurfyx
    Mar 16, 2014 at 17:02
  • 3
    I'm fairly certain there's no definitive answer. Some background processes wait for the PC to become idle before they start, some just wait a fixed period. It's hard to predict that FooUpdater.EXE will sleep for 7 minutes.
    – MSalters
    Mar 16, 2014 at 17:02
  • 2
    Perhaps instead, would detecting when busy processes eventually become idle work for you? If so, does Windows Task Manager's "On Idle" task trigger not suffice? Mar 16, 2014 at 18:04
  • 3
    Is 3-4 minutes really enough time for a "quickie"? o.O
    – Jason C
    Mar 18, 2014 at 3:07

12 Answers 12


There are several potentially helpful answers here, but I think there are two important points that haven't been made:

  1. No, it is not possible to programmatically determine that Windows and all startup programs have finished booting. This is essentially the Halting Problem and no program out there will be able to answer the question "For this arbitrary program, at what point should we say it has been loaded?".

  2. What is the actual problem you are trying to solve? All of the answers here attempt to find a solution to your question, but the question itself feels like it might be missing some important information. We want to solve your problem, not just answer the question.

Reading your question again and going just by what you've said, my response would be one of:

  • Just don't worry about it and start using your computer. Foreground tasks are prioritized and unless you've got something really unusual going on it shouldn't matter if background tasks are running.


  • Manually watch the system a few times and figure out the maximum amount of time it takes before the system is "ready" according to whatever metrics you have. Get a small timer program or script and add it to your system's startup. It can display a message or play a sound when the time you've chosen has elapsed.

This might not directly answer your current question, but hopefully it is helpful.

  • 3
    This is the best (and most technically correct) answer for one reason IMO: it highlights the ambiguity in defining "all startup programs have finished booting". I agree that the halting problem is quite relevant, but only in the case of the launched processes coming to a finish. Although one could monitor the CPU consumption of various programs after booting, and use a predefined threshold to dictate when the computer has "finished booted", this covers only a small subset of cases (notably, processes whose loading performance is mostly CPU-bound). Mar 17, 2014 at 18:41
  • @Breakthrough Good point and edit, thanks. I was really trying to succinctly express the idea that for any given program executed at startup, it might do any number of unpredictable things: (1) start and then terminate, (2) start and continue running, (3) start and spawn additional processes, then do (1) or (2). Even basing the idea of "complete" on resource consumption isn't ideal due to delayed-loading and the fact that some programs may even be waiting until the system is "idle" to begin doing some additional work.
    – Nick
    Mar 17, 2014 at 19:02
  • makes one wonder how useful a "idle" or "booted" flag would be for persistent/daemon processes (caveat being, it's only useful if implemented in every process you're waiting on...). Mar 17, 2014 at 19:14
  • @Breakthrough If I'm not mistaken, linux' systemd has this, where, in principle, one could start a service after all others have started through its dependency mechanism. You'd have to specify all of them manually though (my systemd knowledge isn't that great).
    – rubenvb
    Mar 18, 2014 at 10:10
  • @Nick Thanks for the reasoning behind trying to find the solution, it actually provides a fresh perspective. I assumed there woould be a very simple solution, but it doesn't seem so... For the time being I would use a small timer program, which lets me know that the specified time is over.
    – Firee
    Mar 18, 2014 at 11:52

Why not using Windows Task Scheduler and the Event ID 100 to play a custom sound when Windows is really finished?

Under Triggers select "On an event" and

  • Log: LogMicrosoft-Windows-Diagnostics-Performance/Operational
  • Source: Diagnostic-Performance
  • Event ID: 100

Under Actions select "Start a program" with

  • Program/script: "%ProgramFiles(x86)%\Windows Media Player\wmplayer.exe"
  • Add arguments: "%windir%\Media\Windows Logon Sound.wav"

    Event ID: 100   
    Decription: Windows has started up

    Source Event ID 100: Windows Diagnostics-Performance

  • 1
    I require when both windows and all the startup programs have finished booting
    – Firee
    Mar 16, 2014 at 17:41
  • 2
    FWIW: At the time where this answer was given, the OP only mentioned "Windows startup". The second part including all startup programs was added later!
    – nixda
    Mar 17, 2014 at 15:34
  • 1
    Comment by an anonymous user: This method works really well if your startup time is a bit slow or very slow. It is simple and accurate. However if your startup time is quick, under about 3 min, (or within the limits defined by Windows design) no event 100 is logged, so no sound will play
    – nixda
    Jun 9, 2016 at 9:30

Windows will treat boot finished if it was 80% idle (excluding low-priority CPU and disk activity) for 10s after reaching the Desktop UI.

To see the exact boot time use xbootmgr to trace why Windows boot slowly.

  • 1
    My question is not to speed up booting, I just want an indication when the entire (with all startup programs etc) booting is complete
    – Firee
    Mar 17, 2014 at 5:56
  • 5
    you should fix the slow boot instead of trying to play a sound. Mar 17, 2014 at 18:45

I have a free program installed that I have used for a long time, Soluto: https://www.soluto.com/

I am just a user, not connected.

It works for me.

It does a count down and allows you to select just what you want to load on boot.

It also allows you to delay starts.

  • Does it work offline?
    – Firee
    Mar 16, 2014 at 17:06
  • This site/company now provides a mobile app for remote security features; I assume the domain is owned by someone else now.
    – mbuc91
    May 26, 2016 at 0:52

Run this Python script on startup. It will play the startup sound once cpu usage has been below 20 percent for 5 consecutive seconds:

import subprocess
import time

# set these to whatever works for you
# sound will play when cpu load has been < IDLE_PERCENT for IDLE_TIME consecutive seconds

# you can execute any program you want by changing the alert function below

def get_load():
    output = subprocess.check_output('wmic cpu get loadpercentage', shell=True)
    load = output.split()[1]
    return int(load)

def alert():
        r"c:\Program Files (x86)\Windows Media Player\wmplayer.exe",
        r"c:\Windows\Media\Windows Logon Sound.wav"])

idleSeconds = 0

while idleSeconds < IDLE_TIME:
    load = get_load()
    if load < IDLE_PERCENT:
        idleSeconds += 1
        idleSeconds = 0



You can add a sound to startup.

You can delay the startup processes and put a sound effect to be executed first. The tool Startup Delayer does this.

enter image description here

  • Will this detect boot complete, or do I have to put a ideal timer?
    – Firee
    Mar 16, 2014 at 17:08
  • @Firee There's no need a timer, just use the "automatic delay" option
    – stderr
    Mar 16, 2014 at 17:09

This may not be very effective, but it's cheap.

I usually look at the hard disk activity led (you can identify it on the case by something like a database icon), until the led stabilizes and flashes infrequently, then I know i can now use the PC without much lag. The hard disk is usually the PC's bottleneck, and if it is not being used heavily, then you have room for work.

Hope that helps.

  • 1
    That is known, but I have to sit and wait...
    – Firee
    Mar 17, 2014 at 5:55
  • 4
    You don't have to. You can delegate anybody in the house to do that for you.Imagine it. it's easy!. :D
    – MadeOfAir
    Mar 17, 2014 at 9:42

I've never used it myself but Windows Task Scheduler will allow you to create a task that is triggered to run "At Startup" or "At Logon". You may be able to schedule a task to run a powershell script to access the Console.Beep() method of the .NET Framework. You may even be able to turn it into a decent tune.

From Hey Scripting Guy! Blog


Change the value of the first number to alter the pitch (anything lower than 190 or higher than 8500 can’t be heard), and change the value of the second number to alter the duration

Edit: As it turns out the Console.Beep() method may not work on 64-bit systems according to the MSDN .NET documentation. Tested beeping in a PowerShell Script and it works fine.

You may also wish to check into your startup processes. You can do this by running msconfig and clicking on services. You can also use the Sysinternals tool Autoruns.


By windows documentation last in load order is registry currentuser/runOnce (after start-up folder) ... but what ever load order is, some of programs can take long starting-up time.

So maybe watching CPU activity in batch file can be good solution:

@echo off
set cpuLimit=15
set /a lowCount=0

for /l %%i in (1,1,30) do (
   for /F %%c in ('wmic cpu get loadpercentage ^| findstr "[0-9]"') do (
       echo %%i cpu-Load: %%c  ...lowCnt: !lowCount!
      if %%c gtr %cpuLimit% ( set lowCount=0
      ) else ( set /a lowCount+=1
         if !lowCount! gtr 10 (
            ECHO BEEEEEEP ... mplay32 beep.wav... or something
   ping -n1 >NUL

... and BEEEPing after spoting that in last 10 cpu-load-checks, there was cpu-load below 15%. this batch file can be started by link in start-up folder, or better in registry HKLM\Software\Microsoft\Windows\CurrentVersion\Run


You wrote:

«My machine (Windows 7 64-bit) takes about 3-4 mins to completely boot...»

A "normal" boot takes around 30 seconds including the access to the user account. There's somethings wrong and this must be fix. In order to fix it, you have to get de data. I suggest you two utilities to troubleshoot this problem:

1) Autoruns

With this one you're able to check every process, program, driver loaded during the boot process. Tka care: this is a very powerful tool and DO NOT delete items unless you know what's you're doing. But you may Uncheck (disable) some startup logon programs...

2) System Explorer

With this tool you're able to see all process started and the history of them until System Explorer is started. Also it's possible to scan all these process for security purpose (compared to a process database..)

Check this first them give us some feedback.

You may also check the services at startup with services.msc and the status of devices with devmgmt.msc (yellow triangle for defect devices,Hard disk in PIO mode instead of DMA, and so on...) in the Windows administrative tools...

Hope this help. Let us know.

  • My worry is not why the boot time is so long. I may have lot of start-up programs etc... I just need an indication when the whole booting process is complete, that includes Windows, Logon, all startup programs etc
    – Firee
    Mar 17, 2014 at 5:58
  • Just check with task manager... When the CPU is in the idle state it's done. Takes 3,4 minutes for your PC, right? :-/
    – climenole
    Mar 17, 2014 at 7:35
  • This is how it looks, after the Hard disks lights stops blinking i.sstatic.net/nVToB.png
    – Firee
    Mar 17, 2014 at 8:16
  • "Something is wrong and this must be fix". Or it is just the anti-virus doing its job very very thoroughly... Mar 17, 2014 at 17:44
  • @ThorbjørnRavnAndersen Maybe. As I said my worry is not how long it takes, I just need to know when its completed and I can start using the system without the possible lag due to background process still in the process of starting.
    – Firee
    Mar 18, 2014 at 11:48

I had been searching for something like this, and i found the answer

i will post the actual code later on probably, but here it goes


just save the contents of the last part as a vbs file and run it, you can poll each system event and extract its message being displayed, simple.

what one has to do to find the boot sequence completion is to have this script run only until the event id is '100' that corresponds to the boot completion process in the system events

refer: http://www.howtogeek.com/72420/how-to-use-event-viewer-to-find-your-pcs-boot-time/

So, when you have this script in startup , it will poll all events and wait for event id to be 100 and alert you . the same can be employed in any scripting tool like autoit

Just wanted all to know it. because when i searched for this. all i found was the windows task scheduler idea or soluto at the best. actually soluto stopped working on my x64 pc a while ago for some strange reason. so i wanted to do a script myself which led me to this final solution....

  1. Check if PSRemoting is available
  2. Check if all automatic services are running

The function below returns True if the computer is reachable through PSRemoting and all automatic services are running.

It returns False if either the computer is not available through PSRemoting, or if some automatic services are still not running.

With the Verbose and Debug parameters you get more details on what is available or not.

The list of keyword you put into the Name and DisplayName lists depend on the version of Windows and the applications you use. For some services it is completely normal to start during the startup phase and then stay stopped until something is starting them again.

function Test-HasComputerFinishedBooting {
    This function checks if a computer has fully booted or not.
    This function checks if a computer has fully booted or not.
    It returns true if the computer is available throught PSRemoting and all automatic services are running.
.PARAMETER ComputerName
    The name of the computer of which you want to check the availability.
    A RegEx containing a list of Names for automatic services which can be in a stopped state.
.PARAMETER DisplayNameFilter
    A RegEx containing a list of DisplayNames for automatic services which can be in a stopped state.
    Test-HasComputerFinishedBooting -ComputerName MyComputer -Verbose -Debug

    The Verbose parameter displays if PSRemoting is available or not and if some services are still not running.
    The Debug parameter display the services which are still not running.


param (
        Position = 0,

    $NameFilter = @(
    ) -join '|',

    $DisplayNameFilter = @(
    ) -join '|'

process {
    foreach ($Computer in $ComputerName) {

        if (Test-WSMan -ComputerName $Computer -ErrorAction SilentlyContinue) {

            try {
                $Result = Invoke-Command -ComputerName $Computer -ScriptBlock {
                    Get-Service |
                    Where-Object StartType -EQ 'Automatic' |
                    Where-Object Name -NotMatch $NameFilter |
                    Where-Object DisplayName -NotMatch $DisplayNameFilter |
                    Where-Object Status -NE 'Running'
                } -ErrorAction Stop

                if ($Result) {
                    $Result | Write-Debug
                    $Message = 'Some services are still not running on {0}' -f $Computer
                    Write-Verbose -Message $Message
                    $HasFinishedBooting = $false
                else {
                    $HasFinishedBooting = $true
            catch {
                $HasFinishedBooting = $null
        else {
            $Message = '{0} is not reachable with PSRemoting' -f $Computer
            Write-Verbose -Message $Message
            $HasFinishedBooting = $false

            ComputerName       = $Computer
            HasFinishedBooting = $HasFinishedBooting


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .