파일 확장자로부터 아이콘 가져오기

Programming/Visual Basic 2016. 11. 23. 22:04


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
Imports Microsoft.Win32
 
''' <summary>확장자로부터 아이콘을 가져오는 모듈입니다.</summary>
Public Module IconModule
    'Win API
    Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As IntPtrByVal lpszExeFileName As StringByVal nIconIndex As IntegerAs Integer
    Private Declare Function DestroyIcon Lib "User32.dll" (hIcon As IntPtrAs Integer
 
    ''' <summary>확장자으로 부터 아이콘을 가져옵니다.</summary>
    ''' <param name="Ext">확장자 값 입니다.</param>
    ''' <returns>가져온 아이콘입니다. 실패시 Nothing(NULL)을 반환힙니다.</returns>
    Public Function GetIconFromExt(Ext As StringAs Icon
        Dim Reg = Registry.ClassesRoot, Icon As Icon
        Reg = Reg.OpenSubKey(Ext, False)
        If Reg Is Nothing Then Return Nothing
        Icon = GetDefaultIcon(Reg)
        If Icon IsNot Nothing Then Return Icon
        Icon = GetOpenIcon(Reg)
        Dim Value As String = Reg.GetValue(Nothing)
        If Value Is Nothing Then Return Nothing
        Return GetIconFromAppClass(Value)
    End Function
 
    ''' <summary>AppClass로 부터 아이콘을 가져옵니다.</summary>
    ''' <param name="AppClass">AppClass 스트링입니다.</param>
    ''' <returns>가져온 아이콘입니다. 실패시 Nothing(NULL)을 반환힙니다.</returns>
    Public Function GetIconFromAppClass(AppClass As StringAs Icon
        Dim Reg = Registry.ClassesRoot
        Reg = Reg.OpenSubKey(AppClass, False)
        If Reg Is Nothing Then Return Nothing
        Return If(GetDefaultIcon(Reg), GetOpenIcon(Reg))
    End Function
 
    Private Function GetDefaultIcon(Reg As RegistryKey) As Icon
        Reg = Reg.OpenSubKey("DefaultIcon")
        If Reg Is Nothing Then Return Nothing
        Dim Value As String = Reg.GetValue(Nothing)
        If Value Is Nothing Then Return Nothing
        Dim FilePath As String = ""
        Dim Index As Integer
        Try
            ParsePath(Value, FilePath, Index)
        Catch 'Parse Error
            Return Nothing
        End Try
        Return GetIcon(FilePath, Index)
    End Function
 
    Private Function GetOpenIcon(Reg As RegistryKey) As Icon
        Reg = Reg.OpenSubKey("shell/open/command")
        If Reg Is Nothing Then Return Nothing
        Dim Value As String = Reg.GetValue(Nothing)
        If Value Is Nothing Then Return Nothing
        If Value.Length = 0 Then Return Nothing
        Dim FilePath As String = ""
        Dim Spt As Integer
        If Value(0= """"Then
            Spt = Value.IndexOf(""""c)
            FilePath = If(Spt = -1, Value.Substring(1), Value.Substring(1, Spt - 1))
        Else
            Spt = Value.IndexOf(" ")
            If Spt = -1 Then Spt = Value.Length
            FilePath = Value.Substring(0, Spt)
        End If
        Try
            FilePath = IO.Path.GetFullPath(FilePath)
        Catch 'Parse Error
            Return Nothing
        End Try
        Return GetIcon(FilePath, 0)
    End Function
 
    ''' <summary>아이콘의 경로를 파싱하는 함수입니다.</summary>
    ''' <param name="Path">아이콘의 경로입니다.</param>
    ''' <param name="FilePath">반환되는 아이콘 파일의 경로입니다.</param>
    ''' <param name="Index">반환되는 아이콘의 인덱스입니다.</param>
    Private Sub ParsePath(Path As StringByRef FilePath As StringByRef Index As Integer)
        Dim Spt As Integer
        Path = Path.Trim(" "c)
        FilePath = ""
        Index = 0
        If Path.Length = 0 Then Return
        If Path(0= """"Then
            Spt = Path.IndexOf(""""c)
            If Spt = -1 Then
                Spt = Path.Length
                FilePath = Path.Substring(1)
            Else
                FilePath = Path.Substring(1, Spt - 1)
                Spt += 1
            End If
        Else
            Spt = Path.IndexOf(",")
            If Spt = -1 Then Spt = Path.Length
            FilePath = Path.Substring(0, Spt)
        End If
        If Spt = Path.Length Then Return
        Index = CInt(Path.Substring(Spt + 1))
        FilePath = IO.Path.GetFullPath(FilePath)
    End Sub
 
    ''' <summary>아이콘을 가져오는 함수입니다.</summary>
    ''' <param name="FilePath">아이콘 파일의 경로입니다.</param>
    ''' <param name="Index">아이콘의 인덱스입니다.</param>
    ''' <returns>가져온 아이콘입니다. 실패시 Nothing(NULL)을 반환힙니다.</returns>
    Private Function GetIcon(FilePath As String, Index As IntegerAs Icon
        Dim hIcon As IntPtr
        hIcon = ExtractIcon(0, FilePath, Index)
        If hIcon = 0 Then Return Nothing
        Dim eIcon = Icon.FromHandle(hIcon).Clone()
        Call DestroyIcon(hIcon)
        Return eIcon
    End Function
End Module
 
cs


사용법은 주석 참조


IconModule.vb


posted by 자칭 프로그래머ㅡ ModMapper

[SMLP] StarcraftMapLockerProject 프로텍터 Ver. 2.5.00

Project/StarcraftMapLockerProject 2016. 10. 28. 18:34
  • 이전 댓글 더보기
  • 그게 안대용... ㅠㅠ

    To. 제작자님 2017.05.13 17:33
  • 게임시작하고 얼마안있어서 유저들 드랍되고 튕기고 겜멈추던데 이거때문인가요??

    ㅂㅈㄷㄱ 2017.05.14 17:00
  • 멀쩡하던 맵이 이걸로 프로텍트 하자마자 WAV오류 생기거나 렉이 걸리거나 하는 오류가 발생함.
    하여튼 wav 사용하면 이걸로 프로텍트 하면 안됨

    ㅇㅇ 2017.05.19 16:10
  • 리마스터에서 작동하지 않네요 ㅠ

    패치예정 있나요?

    ㅠㅠ 2017.07.31 20:42
  • 새로운 패치 기대하겠습니다!!!
    또 들어올게요~

    부탁 2017.08.15 14:34
  • 리마스터 1.20 에 맞는 새로운 프로텍터 부탁드립니다 정말잘쓰고있습니다.

    요청합니다 2017.08.18 02:31
  • 오늘 갑자기 프로텍터 튕김과 동시에 파일이 강제로 삭제 당했어요,
    방화벽 때문인가해서 전부 해제 시키고 다운받아보았는데도 다운로드 자체를 컴퓨터에서 막아버림 ㄷㄷ;
    2.4 이하 의 버젼부터는 실행 자체가 안되구요;;

    갑자기 왜이러지 ㄷ

    executer10 2017.08.31 22:06
  • 방법은 없나요? ㅠㅠ

    executer10 2017.09.01 12:33
  • 고급옵션에서 EUD지원과 EUD보호 1.16.1 상관관계를 알수있을까요? 그리고 CHK프로텍션과 좌측 chk 클릭후 암호화 체크 관련두요

    grp와 datedit 언리미터만 사용중인데 맵내부에서 버그가 일어나네요 다만 같은위치가 아니라 무작위로 일어나는거보니

    프로텍션쪽에서 잘못됏나싶어서요 1.16버전만 사용합니다 답변부탁드려요

    집정관 2017.09.03 13:59
  • 그러면 chk 프로텍션으로 인해서 맵버그가 일어나는 경우가 있나요?? 체크가 두개가있더라구요 chk 프로텍션하고 시나리오.chk 클릭후 암호화 체크옵션요

    현재 사용하는 체크옵션이 mpq 프로텍션, chk 프로텍션 EUD지원, EUD보호 1.16.1 그리고 좌측 시나리오.chk 에서 암호화 해제상태이고 wav이름은 바꾸지 않음 이거든요(datedit(6개 간단한 무기속성만바꿈), grp(4개), 언리미터 사용중)

    집정관 2017.09.03 15:40
  • 안녕하세요. 프로텍터 잘 쓰고 있습니다. 한가지 문제가 있어서 댓글 달아요.
    얼마전에 리마스터 패치에서 유닛확장 목록이 생겼는데 이 프로텍터로 보호하면 유닛확장이 안되는 현상이 발생되네요.
    보호하기전 파일은 잘 적용되구요. 그래서 어쩔수 없이 chk 보호는 해제하고 mpq만 프로텍트를 하는데 금방 뚫린다는게 문제네요.

    문의 2018.01.28 16:52
  • OGG 파일로 사운드를 넣을 시 기본 압축재생때문에 사운드가 전혀 재생되질 않습니다 OGG 지원도 가능하게 해주실 수 있나요

    OGG문의 2019.02.23 20:44
  • 이프로텍터 뚫을려면 헥스빼고는 방법없나요?

    wwwwww 2019.05.12 19:21
  • 프로텍터 제작자님 안녕하세요
    프로텍터 잘 쓰고있습니다.
    이 프로텍터로 맵을 보호하면
    유닛 확장이 안되더라구요.
    제작자님이 수정중이라고 댓글을 작년에 작성하셨더라구요.
    언제 출시예정인가요??

    초보맵메이커 2020.06.13 20:52
  • 새 패치 기대하겠습니다!!
    감사합니다ㅎㅎ

    초보맵메이커 2020.06.13 20:59
  • eud는 프리즈라는 강력한게 있지만 만질줄 모르고 일반 맵을 만드는데 smlp 2.5는확장이 안되서 어떻게해야되나 고민했는데 패치 해주신다니!!
    제작자님 압도적 감사!!

    멈뭄미 2020.07.06 21:55
  • 이 프로텍트로 유닛 확장하게끔하는것은 불가능한가요?

    ㅇㅅㅇ 2020.08.05 20:18
  • 아 제작자님이 업데이트 해주시는건가보네요.
    그러면 조만간 확장가능한 프로텍트 사용할수 있는건가요?

    ㅇㅅㅇ 2020.08.05 20:39
  • 감사합니다 ㅎㅎ

    ㅇㅅㅇ 2020.08.07 09:33
  • 안녕하세요 제작자님 프로텍트때문에 눈팅만하다 글써봅니다.
    맵보호하려고 제작자님 프로텍트를 많이 이용했는데 확장이 되지 않더라구요 그래서 문의드리려고했는데 이미 많은 분들이 비슷하게 문의를 주셨더라구요.
    업데이트 하시는중이라는 댓글도 봤는데 언제 나올지 궁금하네요.
    혹시 이번달에 나오는지 그게아니면 언제쯤나오는지 궁금합니다.
    제작해주셔서 감사합니다.

    질문드립니다. 2020.09.03 22:09


<성능>

An Unprotector 0.06

Starcraft Map Cracker 2.88

Unused Unprotector 2 Final

를 포함한 언프로텍터 방어


<설명>

이름 : StarcraftMapLockerProject Ver. 2.5.00

제작자 : ModMapper

블로그 : http://blog.tkyuki.kr/

이메일 : modmapper@tkyuki.kr


<업데이트 기록>

프로텍션 강화

EUD 추가 지원

MPQ 라이브러리 업데이트


<태그>

일단은 EUD 프로텍션의 버그를 수정했습니다 그리고 EUD 지원을 강화해서

다른 EUD 유틸리티를 대부분 지원합니다 (EUDPLIB 등 그 외 기타)


음... 프로텍션이 약간 부족해네요 으... 추가 할만한게 잘 안보여요...

이제 다 만들었으니 오버워치나 다른 게임이나 해야지...


2016 - 11 / 09

- 버그 수정


2017 - 3 / 30

- 1.18 호환성 패치

- 일부 버그 수정

- MPQ 프로텍션 수정


2017 - 4 / 07

- 1.18 호환성 패치


2017 - 12 / 10

- 스타크래프트 지원에 따른 구버전 파일로 롤백


StarcraftMapLockerProject.exe


posted by 자칭 프로그래머ㅡ ModMapper

마인크래프트 폰트 제작기 Ver2

Minecraft/Minecraft Files 2016. 10. 1. 22:10


추가사항

1. 클리어 타입 지원

2. 폰트 미리보기 추가

3. 배경 투명 개선



posted by 자칭 프로그래머ㅡ ModMapper