Subz Posted December 18, 2016 Share Posted December 18, 2016 Would someone be able to point me in the right direction as to how I would find out which flags have been configured based upon a combined value? For example: If I find a print driver with the attribute "0x00000041" I would like to return the string: "PRINTER_DRIVER_PACKAGE_AWARE; PRINTER_DRIVER_CATEGORY_FAX" from the array below. While I could use a switch/case for each iteration i.e. 0x..1, 0x..2, 0x..3 etc.. I was wondering if someone knew of a simple function that could help, I thought Bitwise operations could help, but can't make heads or tails of how these work. Local $aPrintDriverAttribs[11][2] $aPrintDriverAttribs[0][0] = 0x00000001 $aPrintDriverAttribs[0][1] = "PRINTER_DRIVER_PACKAGE_AWARE; " $aPrintDriverAttribs[1][0] = 00000002 $aPrintDriverAttribs[1][1] = "PRINTER_DRIVER_XPS; " $aPrintDriverAttribs[2][0] = 0x00000004 $aPrintDriverAttribs[2][1] = "PRINTER_DRIVER_SANDBOX_ENABLED; " $aPrintDriverAttribs[3][0] = 0x00000008 $aPrintDriverAttribs[3][1] = "PRINTER_DRIVER_CLASS; " $aPrintDriverAttribs[4][0] = 0x00000010 $aPrintDriverAttribs[4][1] = "PRINTER_DRIVER_DERIVED; " $aPrintDriverAttribs[5][0] = 0x00000020 $aPrintDriverAttribs[5][1] = "PRINTER_DRIVER_NOT_SHAREABLE; " $aPrintDriverAttribs[6][0] = 0x00000040 $aPrintDriverAttribs[6][1] = "PRINTER_DRIVER_CATEGORY_FAX; " $aPrintDriverAttribs[7][0] = 0x00000080 $aPrintDriverAttribs[7][1] = "PRINTER_DRIVER_CATEGORY_FILE; " $aPrintDriverAttribs[8][0] = 0x00000100 $aPrintDriverAttribs[8][1] = "PRINTER_DRIVER_CATEGORY_VIRTUAL; " $aPrintDriverAttribs[9][0] = 0x00000200 $aPrintDriverAttribs[9][1] = "PRINTER_DRIVER_CATEGORY_SERVICE; " $aPrintDriverAttribs[10][0] = 0x00000400 $aPrintDriverAttribs[10][1] = "PRINTER_DRIVER_SOFT_RESET_REQUIRED; " Link to comment Share on other sites More sharing options...
Jfish Posted December 18, 2016 Share Posted December 18, 2016 (edited) I am sure there is a better way to do it ... but how about this? func _getBinaryWeights($value) local $weights[11]=[1,2,4,8,16,32,64,128,256,512,1024] local $valuesArray[2] local $leftOver=$value for $a=UBound($weights)-1 to 0 step -1 if $value>=$weights[$a] then $weightsValue=$weights[$a] ExitLoop EndIf Next $i=_arraySearch($weights,$weightsValue) do if $leftOver >=$weights[$i] then _ArrayPush($valuesArray,$weights[$i]) $leftOver=$leftOver-$weights[$i] $i -=1 Else $i-=1 ContinueLoop EndIf until $leftOver=0 _ArrayDisplay($valuesArray) EndFunc _getBinaryWeights(0x00000041) Edited December 18, 2016 by Jfish Build your own poker game with AutoIt: pokerlogic.au3 | Learn To Program Using FREE Tools with AutoIt Link to comment Share on other sites More sharing options...
water Posted December 18, 2016 Share Posted December 18, 2016 Global $aPrintDriverAttribs[11][2] $aPrintDriverAttribs[0][0] = 0x00000001 $aPrintDriverAttribs[0][1] = "PRINTER_DRIVER_PACKAGE_AWARE; " $aPrintDriverAttribs[1][0] = 00000002 $aPrintDriverAttribs[1][1] = "PRINTER_DRIVER_XPS; " $aPrintDriverAttribs[2][0] = 0x00000004 $aPrintDriverAttribs[2][1] = "PRINTER_DRIVER_SANDBOX_ENABLED; " $aPrintDriverAttribs[3][0] = 0x00000008 $aPrintDriverAttribs[3][1] = "PRINTER_DRIVER_CLASS; " $aPrintDriverAttribs[4][0] = 0x00000010 $aPrintDriverAttribs[4][1] = "PRINTER_DRIVER_DERIVED; " $aPrintDriverAttribs[5][0] = 0x00000020 $aPrintDriverAttribs[5][1] = "PRINTER_DRIVER_NOT_SHAREABLE; " $aPrintDriverAttribs[6][0] = 0x00000040 $aPrintDriverAttribs[6][1] = "PRINTER_DRIVER_CATEGORY_FAX; " $aPrintDriverAttribs[7][0] = 0x00000080 $aPrintDriverAttribs[7][1] = "PRINTER_DRIVER_CATEGORY_FILE; " $aPrintDriverAttribs[8][0] = 0x00000100 $aPrintDriverAttribs[8][1] = "PRINTER_DRIVER_CATEGORY_VIRTUAL; " $aPrintDriverAttribs[9][0] = 0x00000200 $aPrintDriverAttribs[9][1] = "PRINTER_DRIVER_CATEGORY_SERVICE; " $aPrintDriverAttribs[10][0] = 0x00000400 $aPrintDriverAttribs[10][1] = "PRINTER_DRIVER_SOFT_RESET_REQUIRED; " Global $iPrinter = 0x000041 Global $sText = "" For $i = 0 to UBound($aPrintDriverAttribs) - 1 If BitAnd($iPrinter, $aPrintDriverAttribs[$i][0]) Then $sText = $sText & $aPrintDriverAttribs[$i][1] Next MsgBox(0, "Result", $sText) My UDFs and Tutorials: Spoiler UDFs:Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsOutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - DownloadOutlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - WikiPowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - WikiTask Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs:Excel - Example Scripts - WikiWord - Wiki Tutorials:ADO - WikiWebDriver - Wiki Link to comment Share on other sites More sharing options...
Subz Posted December 18, 2016 Author Share Posted December 18, 2016 Thanks Jfish unfortunately your code would only return partial results, for example 0x0000000000000103 would only return results for "PRINTER_DRIVER_PACKAGE_AWARE; PRINTER_DRIVER_XPS;" but would leave out the results for "PRINTER_DRIVER_CATEGORY_VIRTUAL". Thanks for trying though. Water that works perfectly, I definitely need to learn how bitwise operations work, thanks for your help. Link to comment Share on other sites More sharing options...
water Posted December 18, 2016 Share Posted December 18, 2016 My UDFs and Tutorials: Spoiler UDFs:Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsOutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - DownloadOutlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - WikiPowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - WikiTask Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs:Excel - Example Scripts - WikiWord - Wiki Tutorials:ADO - WikiWebDriver - Wiki Link to comment Share on other sites More sharing options...
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