Enable - Disable Drop Shadow for DeskTop Icons [Windows]
Posted: Tue Sep 04, 2012 5:40 am
Tested with PB 4.61 x86 Win XP SP2 - Win 7 x64
Code: Select all
Global Process
sRemMachName.s = ""
lTopLevelKey.l = #HKEY_CURRENT_USER
sKeyName.s = "Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
sValueName.s = "ListviewShadow"
Procedure.l QueryValueEx(lhkey.l, szValueName.s)
Shared vValue.s
cch = 255
sValue.s = Space(255)
lrc = RegQueryValueEx_(lhkey, szValueName, 0, @lType, 0, @cch)
Select lType
Case #REG_DWORD
lrc = RegQueryValueEx_(lhkey, szValueName, 0, @lType, @lValue, @cch)
If lrc = 0
vValue = Str(lValue)
EndIf
Default
lrc = -1
EndSelect
ProcedureReturn lrc
EndProcedure
Procedure SetValue(lTopLevelKey.l, sKeyName.s, sValueName.s, vValue.s, lType.l, sRemMachName.s)
If sRemMachName.s = ""
GetHandle = RegOpenKeyEx_(lTopLevelKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, lTopLevelKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
Select lType
Case #REG_SZ
GetHandle = RegSetValueEx_(hkey, sValueName, 0, #REG_SZ, @vValue, Len(vValue) + 1)
Case #REG_DWORD
lValue = Val(vValue)
GetHandle = RegSetValueEx_(hKey, sValueName, 0, #REG_DWORD, @lValue, 4)
EndSelect
RegCloseKey_(hkey)
SetValue = 1
Else
RegCloseKey_(hKey)
SetValue = 0
EndIf
ProcedureReturn SetValue
EndProcedure
lRetVal = RegConnectRegistry_(sRemMachName, lTopLevelKey.l, @lHKeyhandle)
lRetVal = RegOpenKeyEx_(lHKeyhandle, sKeyName, 0, #KEY_ALL_ACCESS, @lhkey)
lRetVal = QueryValueEx(lhkey, sValueName)
RegCloseKey_(lhkey)
If Val(vValue) = 0
SetValue(lTopLevelKey, sKeyName, sValueName.s, "01", #REG_DWORD, "")
Else
SetValue(lTopLevelKey, sKeyName, sValueName.s, "00", #REG_DWORD, "")
EndIf
Procedure.b CheckRunningExe()
Protected snap.i , Proc32.PROCESSENTRY32 , dll_kernel32.i
dll_kernel32 = OpenLibrary(#PB_Any, "kernel32.dll")
If dll_kernel32
snap = CallFunction(dll_kernel32, "CreateToolhelp32Snapshot",$2, 0)
If snap
Proc32\dwSize = SizeOf(PROCESSENTRY32)
If CallFunction(dll_kernel32, "Process32First", snap, @Proc32)
While CallFunction(dll_kernel32, "Process32Next", snap, @Proc32)
If PeekS(@Proc32\szExeFile) = "explorer.exe"
Process = OpenProcess_(#PROCESS_ALL_ACCESS, 0, Proc32\th32ProcessID)
Break
EndIf
Wend
EndIf
CloseHandle_(snap)
EndIf
CloseLibrary(dll_kernel32)
EndIf
ProcedureReturn #False
EndProcedure
CheckRunningExe()
TerminateProcess_(Process, 0)
If OSVersion() > #PB_OS_Windows_Server_2003
Delay(500)
Else
Delay(2500)
EndIf