Jump to content
rodent1

I need to detect wake event on windows 10

Recommended Posts

rodent1

Hi,

I have an Asus transformer tablet with Windows 10 32 bit. When I close it, it goes to sleep. When asleep, wifi is turned off. There is a WM_POWERBROADCAST message that is supposed notify applications that a power-management event has occurred, such as waking up. When the tablet wakes, it does not turn wifi back on. So I wrote a script to check the message, and sure enough, it does not fire. I was going to use that to force start wifi on wake up. I'm looking for an idea to get around that. But so far, I don't have anything. Besides complaining online about Microsoft or Asus bugs, does anyone have ideas?

Thanks!

Share this post


Link to post
Share on other sites
Exit
$gobjWMI_CIMV2 = ObjGet("winmgmts:\\.\root\cimv2")
$gobjWMI_PowerEVT_Sink = ObjCreate("WbemScripting.SWbemSink")
ObjEvent($gobjWMI_PowerEVT_Sink, "__PowerEVT_SINK_")
$gobjWMI_CIMV2.ExecNotificationQueryAsync($gobjWMI_PowerEVT_Sink, "Select EventType from Win32_PowerManagementEvent")

While Sleep(100)
WEnd

Func __PowerEVT_SINK_OnObjectReady($wmiObject, $wmiAsyncContext)
    Switch $wmiObject.EventType
        Case 7
            MsgBox(64+262144, Default, "OS reports resume from suspend is complete", 0)
            ShellExecute(@ScriptDir & "\force_start_wifi.exe")
    EndSwitch
EndFunc   ;==>__PowerEVT_SINK_OnObjectReady

 


My UDFs, Abbrevs and Snippets
If you like my post, just click the like button :) 

Share this post


Link to post
Share on other sites
rodent1

Hi Exit,

Thanks for your post. It looks like it should work. But it went through several sleep and wake cycles, and it did not work.

The __PowerEVT_SINK_OnObjectReady function never fired. To check that, I added a logging function at the top of the function, and got no log.

I also tried it as administrator, just in case an app needs special rights to receive those messages, which in this case would be odd, That did not help anyway.

Here is the code:

$gobjWMI_CIMV2 = ObjGet("winmgmts:\\.\root\cimv2")
$gobjWMI_PowerEVT_Sink = ObjCreate("WbemScripting.SWbemSink")
ObjEvent($gobjWMI_PowerEVT_Sink, "__PowerEVT_SINK_")
$gobjWMI_CIMV2.ExecNotificationQueryAsync($gobjWMI_PowerEVT_Sink, "Select EventType from Win32_PowerManagementEvent")

While Sleep(100)
WEnd

Func __PowerEVT_SINK_OnObjectReady($wmiObject, $wmiAsyncContext)
    AddToLog($wmiObject.EventType, @ScriptDir & "\" & "EventList.log")
    Switch $wmiObject.EventType
        Case 7
            MsgBox(64+262144, Default, "OS reports resume from suspend is complete", 0)
            ShellExecute(@ScriptDir & "\force_start_wifi.exe")
    EndSwitch
EndFunc

Func AddToLog ( $What, $LogFileName)
dim $File
    $File = FileOpen ( $LogFileName, 1 )
    If $File = -1 Then Return
    FileWriteLine ( $File, @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & @TAB & $What & @CRLF )
    FileClose ( $File )
EndFunc

In case that's relevant, the tablet runs Windows 10 home 32 bits with a quad core cpu, Z3775.

Thanks!

Share this post


Link to post
Share on other sites
AdamUL

Maybe this thread will help.  The code is a little old, but hopefully it helps.  

 

Adam

 

Share this post


Link to post
Share on other sites
Exit

I changed the Case statement
from :           Case 7
to:                 Case 6,7,8

$gobjWMI_CIMV2 = ObjGet("winmgmts:\\.\root\cimv2")
$gobjWMI_PowerEVT_Sink = ObjCreate("WbemScripting.SWbemSink")
ObjEvent($gobjWMI_PowerEVT_Sink, "__PowerEVT_SINK_")
$gobjWMI_CIMV2.ExecNotificationQueryAsync($gobjWMI_PowerEVT_Sink, "Select EventType from Win32_PowerManagementEvent")

While Sleep(100)
WEnd

Func __PowerEVT_SINK_OnObjectReady($wmiObject, $wmiAsyncContext)
    Switch $wmiObject.EventType
        Case 6,7,8  ; RESUME CRITICAL/SUSPEND/STANDBY = 6/7/8
            MsgBox(64+262144, Default, "OS reports resume from suspend is complete", 0)
            ShellExecute(@ScriptDir & "\force_start_wifi.exe")
    EndSwitch
EndFunc   ;==>__PowerEVT_SINK_OnObjectReady

 

  • Like 1

My UDFs, Abbrevs and Snippets
If you like my post, just click the like button :) 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • Daydreamer067
      By Daydreamer067
      Hi
      in windows 10 i create a new desktop.
      I want to run a script in this desktop, for exemple Mouseclick("left",x,y)
      I want the script to work in that desktop while i switch to the primary desktop.
      So far autoit clicks on the active desktop.
      Is there a way to make it run only on the other desktop ?
       
      Thank you for your response.
    • codingislife
      By codingislife
      Hi everyone, 
      I'm new to the autoit world and am trying to do something a little complicated and am having trouble developing a solution. My OS after reimaging comes up with two operating system choices during boot up, I'd like to delete the incorrect OS. I have noticed that the default OS is always the correct OS. My issue is I need a way to find the OS identifier before I can delete. I know that I  can use bcdedit to find this but it changes every time and it needs to be the correct identifier (i.e. not the Default or bootmgr). If someone knows of a way to parse through the output of bcdedit to find the identifier that would be greatly appreciated. Here is an example of what I am trying to do:
      https://scottiestech.info/2016/07/03/remove-the-choose-an-operating-system-message-when-starting-your-computer/
    • PramodR
      By PramodR
      Hello,
      i am new to AUTO IT development , I would like one help to read value from a POP up.
      i am able to read below values using inspect tool , information given below, I tried to create a script to read value but that does not help. any help is appreciated.
      Available Controls
      POPUP window Controls
      Auto Id = "UpdateNow_Btn"
      Name = Update Now
      Invoke - Button Control
      Below Controls i get when i move inspector tool to the text which i need to read. i need to read the text Name . Currently with my code i get only blank text 
      Auto Id = timeOutLb
      ClassName = TextBlock
      LegacyIAccess = GetName
      Name  = Read Value for Name
       
      My code.
       
    • Dreamfire
      By Dreamfire
      Hi,
      Since today, exe's are being flagged as having a trojan by Windows Defender (Fuery.B!cl)
      Version:  3.3.14.3 - SciTE Version 3.7.3



       

    • PramodR
      By PramodR
      Hello,
      I have to execute below block of code in elevated previllage, as that particular wmic class will work only with admin previlage.
      i am getting out put when i launch autoit as administrator,  but i will not be able to launch autoit as admin in this particular case but my user have admin rights.
      is there any better way i can run those command as administrator.?
      tried below steps:
      i have tried #RequireAdmin but that creates a user prompt  Tried using Runas command but gives error as wrong username or password , stuck with that step.  
       
×