soundguy95 Posted June 24, 2011 Posted June 24, 2011 I've been trying to create a screensaver with AutoIt (using the latest version - 3.3.6.1). I understand that it's simply an exe renamed to scr. However, when I copy the scr file into my System32 directory, the only new option that shows up in the Screen Saver dialog is blank (i.e., not showing any screensaver name), and all the options - including the wait time - are greyed out. I've tried adding a string to the resources of the file representing the title of the screensaver (based on what I read at http://stackoverflow.com/questions/2218976/how-do-i-control-the-screensaver-name-shown-in-the-drop-down-list - everything else seems to be a howto for VisualStudio users), but this doesn't seem to make any difference. I'm running Server 2003. Does anyone have any experience with this kind of thing? I've tried using some of the existing screensaver scripts from the forums, but get the same result. Any assistance would be much appreciated. Thanks! - Sean
spudw2k Posted June 24, 2011 Posted June 24, 2011 (edited) Check out this Screensaver UDF of sorts. Edited June 24, 2011 by spudw2k Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retrieve SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc Cool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF
soundguy95 Posted June 24, 2011 Author Posted June 24, 2011 spudw2k: Thanks! Unfortunately, I'm still having the same problem. The UDF seems to work (it executes properly when I run one of the example scripts), but I can't get Windows to play nice. I also tried it on another XP machine, and had the exact same problem. Very weird... - Sean
UEZ Posted June 24, 2011 Posted June 24, 2011 (edited) Here another example:GDI+ 3D Star Scrolling Screensaver.au3expandcollapse popup;~ #AutoIt3Wrapper_OutFile=GDI+ 3D Star Scrolling Screensaver.scr #AutoIt3Wrapper_OutFile=c:windowssystem32GDI+ 3D Star Scrolling Screensaver.scr #AutoIt3Wrapper_Run_Obfuscator=y #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0 #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%%scriptfile%_Obfuscated.au3" #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Res_Description=Simple Screensaver made by UEZ 2011 #AutoIt3Wrapper_Res_Fileversion=1.0.1.0 #AutoIt3Wrapper_Res_Language=1033 ://////=__=.. ://////=__=-- ://////=__= ://////=__= ://////=__= #AutoIt3Wrapper_Run_After=upx.exe --best --lzma "%out%" #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include <Array.au3> #include <EditConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> #include <SliderConstants.au3> #include <Timers.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) Opt("MustDeclareVars", 1) _Singleton(@AutoItExe) Global Const $app_name = "GDI+ 3D Star Scrolling Screensaver by UEZ 2011" Global Const $ver = "v1.0.1 build 2012-12-19" Global $hGUI, $iW, $iH, $GUI_H, $GUI_W, $GUI_X, $GUI_Y, $r, $show_FPS = 0, $aPreview Global $maxStars = 150, $size = 1 Global $parent_pid, $aChildProcess Global Const $hFullScreen = WinGetHandle("Program Manager") Global Const $aFullScreen = WinGetPos($hFullScreen) Global $main_screen_x = Abs($aFullScreen[0]) Global Const $ini_file = @ScriptDir & "GDI+ 3D Star Scrolling Screensaver.ini" If FileExists($ini_file) Then $show_FPS = Int(IniRead($ini_file, "Settings", "ShowFPS", 0)) $maxStars = Int(IniRead($ini_file, "Settings", "MaxStars", 150)) EndIf Global $cmdparam = "/s" If $CmdLine[0] Then $cmdparam = StringLeft($CmdLine[1], 2) Switch $cmdparam Case "/s" $iW = @DesktopWidth $iH = @DesktopHeight $GUI_X = $aFullScreen[0] $GUI_Y = $aFullScreen[1] $GUI_W = $aFullScreen[2] $GUI_H = $aFullScreen[3] $r = (($iW + $iH) / 2) / 0x300 $hGUI = GUICreate($app_name, $GUI_W, $GUI_H, $GUI_X, $GUI_Y, $WS_POPUP, $WS_EX_TOPMOST) Case "/c" Opt("GUIOnEventMode", 0) Global Const $hGUI_Settings = GUICreate("Settings", 514, 108, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE)) Global Const $Label = GUICtrlCreateLabel("Amount of stars:", 8, 18, 100, 20) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") Global Const $Slider = GUICtrlCreateSlider(112, 8, 342, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_TOOLTIPS)) GUICtrlSetLimit(-1, 500, 10) GUICtrlSetData(-1, $maxStars) GUICtrlSetTip(-1, "Set amount of stars to be displayed") Global Const $Checkbox = GUICtrlCreateCheckbox("Enable FPS Counter", 8, 70, 130, 17) GUICtrlSetFont(-1, 11, 400, 0, "Times New Roman") If $show_FPS Then GUICtrlSetState($Checkbox, $GUI_CHECKED) Global Const $Input = GUICtrlCreateInput(GUICtrlRead($Slider), 456, 16, 41, 27, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") Global Const $Button_OK = GUICtrlCreateButton("Apply", 424, 70, 75, 25) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") Global Const $Button_Cancel = GUICtrlCreateButton("Cancel", 336, 70, 75, 25) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") Global Const $Label_Ver = GUICtrlCreateLabel($app_name & @CRLF & $ver, 150, 70, 170, 20) GUICtrlSetFont(-1, 6, 400, 0, "Times New Roman") GUISetState(@SW_SHOW, $hGUI_Settings) Global $nMsg While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $Button_Cancel GUIDelete($hGUI_Settings) Exit Case $Button_OK IniWrite($ini_file, "Settings", "ShowFPS", BitAND(GUICtrlRead($Checkbox), $GUI_CHECKED)) IniWrite($ini_file, "Settings", "MaxStars", GUICtrlRead($Slider)) GUIDelete($hGUI_Settings) Exit Case $Slider GUICtrlSetData($Input, GUICtrlRead($Slider)) EndSwitch WEnd Case "/p" $aPreview = WinGetPos(HWnd($CmdLine[2])) $iW = $aPreview[2] $iH = $aPreview[3] $GUI_X = 0 $GUI_Y = 0 $GUI_W = $iW $GUI_H = $iH $main_screen_x = 0 $r = (($iW + $iH) / 2) / 0x30 $show_FPS = False $maxStars = 30 $size = 1 $hGUI = GUICreate("GDI+ 3D Star Scrolling Screensaver by UEZ", $GUI_W, $GUI_H, $GUI_X, $GUI_Y, $WS_POPUP) _WinAPI_SetParent($hGUI, $CmdLine[2]) $parent_pid = _WinAPI_GetParentProcess(@AutoItPID) EndSwitch _GDIPlus_Startup() Global Const $iW2 = $iW / 2 Global Const $iH2 = $iH / 2 GUISetBkColor(0x000000, $hGUI) GUISetState(@SW_SHOW, $hGUI) Global Const $hBitmap = _WinAPI_CreateDIB($iW, $iH) Global Const $hDC = _WinAPI_GetWindowDC($hGUI) Global Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Global Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hBitmap) Global Const $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) Global Const $hPen = _GDIPlus_PenCreate(0, $size) Global Const $hBrush = _GDIPlus_BrushCreateSolid(0xE0000000) Global Const $hBrush_Text = _GDIPlus_BrushCreateSolid(0xFFF0F0F0) Global Const $hFormat = _GDIPlus_StringFormatCreate() Global Const $hFamily = _GDIPlus_FontFamilyCreate("Arial") Global Const $hFont = _GDIPlus_FontCreate($hFamily, 12) Global Const $tLayout = _GDIPlus_RectFCreate($iW - 32, 0, 0, 0) Global Const $speed = 50 Global $aStars[$maxStars][3], $j For $j = 0 To $maxStars - 1 NewStars($j) Next Global Const $om = MouseGetCursor() Global $idle_o, $idle_n, $fps = 0, $newx, $newy, $c, $i Global $fps2 = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") OnAutoItExitRegister("_Exit") AdlibRegister("FPS", 1000) While Sleep(10) Draw_Stars() WEnd Func FPS() $fps = $fps2 $fps2 = 0 EndFunc ;==>FPS Func Draw_Stars() If $cmdparam = "/s" Then GUISetCursor(16, 1, $hGUI) $idle_n = _Timer_GetIdleTime() If $idle_n < $idle_o Then _Exit() $idle_o = $idle_n Else If Not BitAND(WinGetState($hGUI), 2) Then _Exit() $aChildProcess = _WinAPI_EnumChildProcess($parent_pid) If $aChildProcess[0][0] > 1 Then _Exit() EndIf DllCall($ghGDIPDll, "int", "GdipFillRectangleI", "handle", $hGraphic, "handle", $hBrush, "int", 0, "int", 0, "int", $iW, "int", $iH) While $j < $maxStars $aStars[$j][0] += $aStars[$j][0] / $speed $aStars[$j][1] += $aStars[$j][1] / $speed $aStars[$j][2] += $r $newx = $aStars[$j][0] + $iW2 $newy = $aStars[$j][1] + $iH2 $c = Hex(Int(Min($aStars[$j][2], 0xFF)), 2) DllCall($ghGDIPDll, "int", "GdipSetPenColor", "handle", $hPen, "dword", "0xFF" & $c & $c & $c) DllCall($ghGDIPDll, "int", "GdipDrawRectangle", "handle", $hGraphic, "handle", $hPen, "float", $newx, "float", $newy, "float", 1, "float", 1) If $newx < 0 Or $newx > $iW Or $newy < 0 Or $newy > $iH Then NewStars($j, $iW2 * Random(0.75, 1.25), $iH2 * Random(0.75, 1.25), $iW2 * Random(0.75, 1.25), $iH2 * Random(0.75, 1.25)) If $newx < 0 Or $newx > $iW Or $newy < 0 Or $newy > $iH Then NewStars($j, $iW2 * _Random(0.75, 1.25, 0.95, 1.05), $iH2 * _Random(0.75, 1.25, 0.95, 1.05), $iW2 * _Random(0.75, 1.25, 0.95, 1.05), $iH2 * _Random(0.75, 1.25, 0.95, 1.05)) $j += 1 WEnd $j = 0 If $show_FPS Then DllCall($ghGDIPDll, "int", "GdipDrawString", "handle", $hGraphic, "wstr", $fps, "int", -1, "handle", $hFont, "struct*", $tLayout, "handle", $hFormat, "handle", $hBrush_Text) DllCall("gdi32.dll", "bool", "BitBlt", "handle", $hDC, "int", $main_screen_x, "int", 0, "int", $iW, "int", $iH, "handle", $hDC_backbuffer, "int", 0, "int", 0, "dword", $SRCCOPY) $fps2 += 1 EndFunc ;==>Draw_Stars Func NewStars($i, $sx = 0, $sy = 0, $ex = $iW, $ey = $iH) $aStars[$i][0] = Random($sx, $ex, 1) - $iW2 $aStars[$i][1] = Random($sy, $ey, 1) - $iH2 $aStars[$i][2] = 0x00 EndFunc ;==>NewStars Func Min($a, $b) If $a < $b Then Return $a Return $b EndFunc ;==>Min Func _Random($min, $max, $emin, $emax, $int = 0) ;exludes from emin to emax Local $r1 = Random($min, $emin, $int) Local $r2 = Random($emax, $max, $int) If Random(0, 1, 1) Then Return $r1 Return $r2 EndFunc ;==>_Random Func _Exit() AdlibUnRegister("FPS") GUISetCursor($om, 1, $hGUI) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_PenDispose($hPen) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BrushDispose($hBrush_Text) _GDIPlus_GraphicsDispose($hGraphic) _WinAPI_SelectObject($hDC, $DC_obj) _WinAPI_DeleteObject($hBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) _GDIPlus_Shutdown() GUIDelete($hGUI) Exit EndFunc ;==>_Exit #region WinAPIEx.au3 by Yashied Func _WinAPI_GetParentProcess($PID = 0) If Not $PID Then $PID = _WinAPI_GetCurrentProcessID() If Not $PID Then Return SetError(1, 0, 0) EndIf Local $hSnapshot = DllCall('kernel32.dll', 'ptr', 'CreateToolhelp32Snapshot', 'dword', 0x00000002, 'dword', 0) If (@error) Or (Not $hSnapshot[0]) Then Return SetError(1, 0, 0) Local $tPROCESSENTRY32 = DllStructCreate('dword Size;dword Usage;dword ProcessID;ulong_ptr DefaultHeapID;dword ModuleID;dword Threads;dword ParentProcessID;long PriClassBase;dword Flags;wchar ExeFile[260]') Local $pPROCESSENTRY32 = DllStructGetPtr($tPROCESSENTRY32) Local $Ret, $Result = 0 $hSnapshot = $hSnapshot[0] DllStructSetData($tPROCESSENTRY32, 'Size', DllStructGetSize($tPROCESSENTRY32)) $Ret = DllCall('kernel32.dll', 'int', 'Process32FirstW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32) While (Not @error) And ($Ret[0]) If DllStructGetData($tPROCESSENTRY32, 'ProcessID') = $PID Then $Result = DllStructGetData($tPROCESSENTRY32, 'ParentProcessID') ExitLoop EndIf $Ret = DllCall('kernel32.dll', 'int', 'Process32NextW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32) WEnd _WinAPI_CloseHandle($hSnapshot) If Not $Result Then Return SetError(1, 0, 0) Return $Result EndFunc ;==>_WinAPI_GetParentProcess Func _WinAPI_EnumChildProcess($PID = 0) If Not $PID Then $PID = _WinAPI_GetCurrentProcessID() If Not $PID Then Return SetError(1, 0, 0) EndIf Local $hSnapshot = DllCall('kernel32.dll', 'ptr', 'CreateToolhelp32Snapshot', 'dword', 0x00000002, 'dword', 0) If (@error) Or (Not $hSnapshot[0]) Then Return SetError(1, 0, 0) Local $tPROCESSENTRY32 = DllStructCreate('dword Size;dword Usage;dword ProcessID;ulong_ptr DefaultHeapID;dword ModuleID;dword Threads;dword ParentProcessID;long PriClassBase;dword Flags;wchar ExeFile[260]') Local $pPROCESSENTRY32 = DllStructGetPtr($tPROCESSENTRY32) Local $Ret, $Result[101][2] = [[0]] $hSnapshot = $hSnapshot[0] DllStructSetData($tPROCESSENTRY32, 'Size', DllStructGetSize($tPROCESSENTRY32)) $Ret = DllCall('kernel32.dll', 'int', 'Process32FirstW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32) While (Not @error) And ($Ret[0]) If DllStructGetData($tPROCESSENTRY32, 'ParentProcessID') = $PID Then $Result[0][0] += 1 If $Result[0][0] > UBound($Result) - 1 Then ReDim $Result[$Result[0][0] + 100][2] EndIf $Result[$Result[0][0]][0] = DllStructGetData($tPROCESSENTRY32, 'ProcessID') $Result[$Result[0][0]][1] = DllStructGetData($tPROCESSENTRY32, 'ExeFile') EndIf $Ret = DllCall('kernel32.dll', 'int', 'Process32NextW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32) WEnd _WinAPI_CloseHandle($hSnapshot) If $Result[0][0] Then ReDim $Result[$Result[0][0] + 1][2] Else Return SetError(1, 0, 0) EndIf Return $Result EndFunc ;==>_WinAPI_EnumChildProcess Func _WinAPI_CreateDIB($iWidth, $iHeight, $iBitsPerPel = 32) Local $tBIHDR, $hBitmap, $pBits Local Const $BI_RGB = 0, $DIB_RGB_COLORS = 0 Local Const $tagBITMAPINFOHEADER = 'dword biSize;long biWidth;long biHeight;ushort biPlanes;ushort biBitCount;dword biCompression;dword biSizeImage;long biXPelsPerMeter;long biYPelsPerMeter;dword biClrUsed;dword biClrImportant' $tBIHDR = DllStructCreate($tagBITMAPINFOHEADER) DllStructSetData($tBIHDR, 'biSize', DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 'biWidth', $iWidth) DllStructSetData($tBIHDR, 'biHeight', $iHeight) DllStructSetData($tBIHDR, 'biPlanes', 1) DllStructSetData($tBIHDR, 'biBitCount', $iBitsPerPel) DllStructSetData($tBIHDR, 'biCompression', $BI_RGB) $hBitmap = _WinAPI_CreateDIBSection(0, $tBIHDR, $DIB_RGB_COLORS, $pBits) If @error Then Return SetError(1, 0, 0) Return $hBitmap EndFunc ;==>_WinAPI_CreateDIB Func _WinAPI_CreateDIBSection($hDC, ByRef $tBITMAPINFO, $iUsage, ByRef $pBits, $hSection = 0, $iOffset = 0) $pBits = 0 Local $Ret = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', $hDC, 'ptr', DllStructGetPtr($tBITMAPINFO), 'uint', $iUsage, 'ptr*', 0, 'ptr', $hSection, 'dword', $iOffset) If @error Or (Not $Ret[0]) Then Return SetError(1, 0, 0) $pBits = $Ret[4] Return $Ret[0] EndFunc ;==>_WinAPI_CreateDIBSection #endregionCopy screensaver to system32 dir and select it Br,UEZ Edited December 19, 2012 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
sleepydvdr Posted June 24, 2011 Posted June 24, 2011 Nice screensaver, UEZ! To be honest, when looking at it I am expecting some music, captain Kirk saying "Space... The final frontier" and seeing the Enterprise emerge from the stars... #include <ByteMe.au3>
UEZ Posted June 24, 2011 Posted June 24, 2011 @sleepydvdr: go and do it! Show me your result... Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
soundguy95 Posted June 26, 2011 Author Posted June 26, 2011 That did the trick, UEZ! Thanks! Now I just have to figure out what I was doing wrong... - Sean
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