wraithdu Posted April 26, 2011 Posted April 26, 2011 (edited) NOTE: supported on Vista+ This is a demo on monitoring the state of a laptop's lid. Notice how you can't make a laptop lock when you close the lid? Here's one solution: expandcollapse popupGlobal Const $WM_POWERBROADCAST = 0x0218 ; GUID_LIDSWITCH_STATE_CHANGE GUID ; 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3 Global Const $GUID_LIDSWITCH_STATE_CHANGE = DllStructCreate("byte[16]") DllStructSetData($GUID_LIDSWITCH_STATE_CHANGE, 1, Binary("0x4D0F3EBA17B89440A2D1D56379E6A0F3")) ; create gui and register notification Global $GUI = GUICreate("") GUIRegisterMsg($WM_POWERBROADCAST, "__WM_POWER") Global $hPower = DllCall("user32.dll", "handle", "RegisterPowerSettingNotification", "handle", $GUI, "ptr", DllStructGetPtr($GUID_LIDSWITCH_STATE_CHANGE), "dword", 0) GUISetState() Do Until GUIGetMsg() = -3 ; unregister notification DllCall("user32.dll", "bool", "UnregisterPowerSettingNotification", "handle", $hPower[0]) Func __WM_POWER($hwnd, $msg, $wparam, $lparam) #forceref $hwnd Local Const $PBT_POWERSETTINGCHANGE = 0x8013 ; Data member is variable depending on notification ; the size of the Data member is returned in DataLength Local Const $POWERBROADCAST_SETTING = "byte[16];dword DataLength;byte Data" Switch $msg Case $WM_POWERBROADCAST Switch $wparam Case $PBT_POWERSETTINGCHANGE Local $PBT_PSC = DllStructCreate($POWERBROADCAST_SETTING, $lparam) ; GUID of registered notification is the first member of the structure Switch DllStructGetData($PBT_PSC, 1) Case DllStructGetData($GUID_LIDSWITCH_STATE_CHANGE, 1) ; for this notification, Data is an int representing the lid state Local $data = DllStructCreate("int", DllStructGetPtr($PBT_PSC, "Data")) _LidStateChange(DllStructGetData($data, 1)) ; Return 1 EndSwitch EndSwitch EndSwitch Return "GUI_RUNDEFMSG" EndFunc Func _LidStateChange($iState) Static $iPrevious = -1 If $iPrevious = -1 Then ; first fire, current state $iPrevious = $iState Return ElseIf $iPrevious = $iState Then Return Else $iPrevious = $iState EndIf ; lid state: ; 0 -> closed ; 1 -> open Switch $iState Case 0 ConsoleWrite("lid closed" & @CRLF) DllCall("user32.dll", "bool", "LockWorkStation") Case 1 ConsoleWrite("lid opened" & @CRLF) EndSwitch EndFunc Edited May 24, 2011 by wraithdu
guinness Posted April 26, 2011 Posted April 26, 2011 Nice wraithdu! I'm always learning from you, especially when you released your MD5Hash project. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
MilesAhead Posted December 7, 2013 Posted December 7, 2013 (edited) I'm om Windows 8. I run the demo and get no output. I set my Laptop lid close action to "do nothing" but I get no console output at all from the demo when I close and open the lid. Edited December 7, 2013 by MilesAhead My Freeware Page
MilesAhead Posted December 7, 2013 Posted December 7, 2013 But the lid does lock.. so it works. I'll have to look it over more. I'm searching for a lid locker for someone on another forum and found this thread. Very cool. I've found a lot of threads where it's been attempted but not achieved. My Freeware Page
wraithdu Posted December 7, 2013 Author Posted December 7, 2013 How are you running the script and where are you expecting console output? I just tested on Win 8.1 and I get the proper SciTE output in the console and the laptop locks when closing the lid.
MilesAhead Posted December 7, 2013 Posted December 7, 2013 How are you running the script and where are you expecting console output? I just tested on Win 8.1 and I get the proper SciTE output in the console and the laptop locks when closing the lid. How are you running the script and where are you expecting console output? I just tested on Win 8.1 and I get the proper SciTE output in the console and the laptop locks when closing the lid. I tried running in Scite. The lock worked but no text output. I tried from a command prompt with compiled version. Same thing I'm on Windows 8 pre SP. Maybe that's the difference. My Freeware Page
BrewManNH Posted December 7, 2013 Posted December 7, 2013 Are you running it using #RequireAdmin? If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
wraithdu Posted December 7, 2013 Author Posted December 7, 2013 I was not, but I see your point in asking. @MilesAhead If you're using #RequireAdmin then SciTE cannot capture the console output. Further, you must compile the script as a console application if you want command prompt to show you console output. Use #pragma compile(Console, true)
MilesAhead Posted December 7, 2013 Posted December 7, 2013 (edited) Are you running it using #RequireAdmin? No. I just pasted the script in Scite and saved it to an .au3 file. Edit: Ok. I added that (#requireadmin I mean) and it works. Edit2: I just got this Laptop. Seems in W8 everything has to be run as admin. I can't even save a file in Scite without it. pita. Edited December 7, 2013 by MilesAhead My Freeware Page
wraithdu Posted December 7, 2013 Author Posted December 7, 2013 I find that strange. I'm not running with any elevation on 8.1, script or compiled version, from desktop. No issues.
MilesAhead Posted December 7, 2013 Posted December 7, 2013 Hopefully they responded to user complaints? As far as I remember on W7 I turned UAC either off or to the lowest setting and that was that. This W8 I can't even save a file in any of the Program Files trees without run as admin.. even with UAC all the way down on the slider. It's really annoying. My Freeware Page
BrewManNH Posted December 7, 2013 Posted December 7, 2013 I believe if you run SciTE as an admin, then you won't need to use it in your scripts for testing. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
MilesAhead Posted December 7, 2013 Posted December 7, 2013 I believe if you run SciTE as an admin, then you won't need to use it in your scripts for testing. I have the exe set to Run As Administrator.in compatibility tab. My Freeware Page
tonycst Posted January 27, 2015 Posted January 27, 2015 Win7 X64 AutoIt Version: 3.3.12.0 Script does not work for me. Shows blank GUI and thats it. Nothing in the console.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now