본문 바로가기
VB.net

Windows 잠금화면 변경 (Win7 - 64bit OS 적용 확인)

by 호야호잇 2018. 6. 11.

#Region "잠금화면변경"


    Private Sub Button44_Click(sender As Object, e As EventArgs) Handles Button44.Click


        If Label1.Text = "본사" Then

            Dim D_day As Date = "2018-06-11" '만료되는 날짜

            If D_day > Now Then

                Lock_Screen()

            Else

                UnLock_Screen()

            End If

        End If


    End Sub


    'windows 32bit 프로그램을 이용하여 Windows 64bit OS에서 구동 시 Wow64 폴더가 아닌 system32를 사용하게 

    Declare Function Wow64DisableWow64FsRedirection Lib "kernel32.dll" (ByRef ptr As IntPtr) As Boolean


    Declare Function RegDisableReflectionKey Lib "advapi32.dll" (hBase As IntPtr) As Integer



    '잠금화면 설정하기

    Private Sub Lock_Screen()


        ' ------------------------------------------------------------------  레지 관련 -------------------------------------------------------------------------

        Dim BG_img_reg_path As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background"


        '============= 프로시저 사용하지 않고 64bit OS에서 32bit app에서 registry 쓰기 로직 =======================

        'Dim BG_img_reg_path As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"

        'Dim key As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)

        'key = key.OpenSubKey(BG_img_reg_path, True)

        'Dim val As String()

        'val = key.GetValueNames()

        'key.CreateSubKey("Background").SetValue("OEMBackground", 1, RegistryValueKind.DWord)

        'key.Close()


        '==================================================================================



        ''====   레지스트리에 윈도우 잠금화면 적용을 위한 Key값 생성 Logic  =====

        'WriteRegKey_2(BG_img_reg_path, "OEMBackground", 1)

        WriteRegKey_64(BG_img_reg_path, "OEMBackground", 1)

        ''===================================================


        ' ------------------------------------------------------------------  파일 관련 -------------------------------------------------------------------------

        ' ★★★★★★★★★★ 중요 ★★★★★★★★★★★★★★

        '      첨부되는 그림 파일은  200KB를 초과하면 안된다.

        '★★★★★★★★★★★★★★★★★★★★★★★★★★★


        'Dim BG_File_Path As String = "c:\Windows\System32\oobe\info\backgrounds\" '적용하려는 이미지가 저장되어야 할 경로

        Dim BG_File_Path As String = Environment.SystemDirectory & "\oobe\info\backgrounds" '적용하려는 이미지가 저장되어야 할 경로

        Dim 파일명 As String = "backgroundDefault.jpg"  '파일명은 고정값임(변경 시 동작하지 않음)

        Dim Source_File As String = Application.StartupPath & "\" & 파일명



        'wow64 폴더 리디렉션 방지

        Wow64DisableWow64FsRedirection(True)


        If Directory.Exists(BG_File_Path) = True Then

            My.Computer.FileSystem.CopyFile(Source_File, BG_File_Path & "\" & 파일명, overwrite:=True)  '동일한 파일이 있는경우 덮어씌우기

        Else

            My.Computer.FileSystem.CreateDirectory(BG_File_Path)  '폴더가 없는경우 폴더 생성

            My.Computer.FileSystem.CopyFile(Source_File, BG_File_Path & "\" & 파일명, overwrite:=True)  '동일한 파일이 있는경우 덮어씌우기

        End If


        '---------------------------------------------------------------------------------------------------------------------------------------------------------


    End Sub


    '잠금화면 설정해제 하기

    Private Sub UnLock_Screen()


        '===== 레지스트리에 윈도우 잠금화면 Default로 돌리기위해 레지스트리 삭제 Logic ====================================

        Dim BG_img_reg_path As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background"

        Dim key As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)

        Dim FoundKey As RegistryKey = key.OpenSubKey(BG_img_reg_path, True)  '레지스트리 쓰기를 허용한다


        '레지스트리가 해당경로에 있을경우 OEMBackground 값을 삭제 한다

        Try

            If Not (FoundKey Is Nothing) Then

                FoundKey.DeleteValue("OEMBackground")

            End If

        Catch ex As Exception


        End Try


        '===========================================================================================



        '========================  파일 삭제  ===========================================================

        Dim BG_File_Path As String = "c:\Windows\System32\oobe\info\backgrounds" '적용하려는 이미지가 저장되어야 할 경로

        Dim 파일명 As String = "backgroundDefault.jpg"  '파일명은 고정값임(변경 시 동작하지 않음)


        'wow64 폴더 리디렉션 방지

        Wow64DisableWow64FsRedirection(True)


         Try

            If File.Exists(BG_File_Path & "\" & 파일명) = True Then

                File.Delete(BG_File_Path & "\" & 파일명)

          

            End If

        Catch ex As Exception


         End Try

        '===========================================================================================


    End Sub


#End Region