기 타 pureBasic - PE 1회 부팅 Launch에 사진을 넣어 보았습니다
2024.03.21 11:30
pureBasic 으로 처음 만든 PE 1회 부팅 프로그램의 경우 명령어를 제대로 이해를 못해서 소스를 정리하면서 엉뚱한 경로가 설정되는 부분과
레지 경로를 수정하면서 허전한 Launch 모습에...cmd용 Launch 처럼 사진을 추가를 하여 보았습니다
cmd용 Launch를 계속 보다가..PE 1회 부팅에 사진이 없어서인지...버튼 크기가 커서인지 뭔가 빠진 느낌이었습니다
사진이 있는 것을 보면서 익숙해졌는데 사진이 없어지면 이런 느낌이 들었나 봅니다
이 배경사진은 솔직히 기능과는 전혀 상관이 없는 부분이죠..단지..눈으로 보는 즐거움이 있는 것뿐이기는 합니다
그래도..있는것이 보기에는 좋네요.
이런 부분에서 버튼 아이콘도 나름대로는 신경을 많이 써서 찾지만...찾을때에는 있어 보이는 이미지도 실제 아이콘으로 적용을 해보면..
크기가 작아서인지..어색한 경우가 많습니다.
이쁜 모양으로 구성하는것은 보는 눈이 있어야 하는데 저는 이런 부분과는 거리가 먼것 같습니다
1. 자꾸 파일이 증가를 하네요..사진용 BG 폴더가 생겼습니다
2. Bootice 관련 버튼이 3개나 되면서 프로그램 폭이 넓어져 사진 비율이 3:5 정도 됩니다..cmd용 Launch는 3:4 비율입니다 3:5가 더 보기
가 좋은것 같습니다
3. cmd Laucnh 처럼 사진의 위에, 버튼이 아래에 배치가 되었습니다..버튼 높이를 좀 줄였습니다
4. 사진이 파일 경로에 없으면 아래처럼 버튼만 있는 모습으로 실행이 됩니다.
5. 같은 크기의 BG.bmp 파일만 교체를 하면 됩니다
6. 레지 경로는 HKLM 경로로 등록을 하였습니다..BR 버전은 그대로 사용을 해서 HKCR 경로 입니다..
7. 이 메세지가 참 고민이 되는 부분입니다.. 파일 우클릭 메뉴에서 실행을 하는데 이렇게 확인 메세지를 해야할지...메세지 없이 바로 부팅을
하면 클릭을 하는 귀찮음이 사라지기는 합니다..실수로 엉뚱한 wim을 부팅을할수도 있어서 확인하는것이 좋기는 합니다.
8. PE로 부팅이 잘 되었습니다
9. PE 부팅시에 레지가 등록이 되었습니다
10. 다른 PE로 부팅을 하여 보겠습니다..
11. PE로 부팅을 하였습니다
12. 복구시스템용 PE처럼 BCD에 등록된 필수 PE라면..pe를 찾아서 우클릭 메뉴에서 하는 번거로움보다는 바로가기에서 바로 실행이 되도록
하는 것이 편합니다..
13. 확인 메세지입니다
14. PE로 부팅이 되었습니다
15. 마무리
익숙함일것입니다..cmd Launch에서 사진이 있는것이 눈에 있어서 사진을 추가를 하고나서야 어색함이 사라졌습니다.
기능과는 상관도 없는것이지만 등록 삭제가 Launch 형태에서 이 모습으로 가야 할것 같습니다
사진이 필요 없으신분도 있으시죠..BR.bmp 파일만 없으면 간단한 버튼 형식으로 사용할수 있습니다
대충..체크해볼것들은 다 해보기는 하였지만..pureBasic으로 처음 만들어본 프로그램이어서 테스트 한 부분들만 정상이어서 어떤 문제가
있는지는 좀더 테스트를 해보야 할것 같기는 합니다..
Cmd나 VB6, 오토잇의 경우 오랜시간이 지나서야 지금의 모습이 된것처럼 pureBasic도 시간과 경험이 필요하기는 하네요
오늘 하루도 즐거운 일만 있으시길 바랍니다
댓글 [20]
-
늑대아니에요! 2024.03.21 11:41
-
수리수리 2024.03.21 11:46
수고 하셨습니다^^
-
상발이 2024.03.21 11:59
수고하셨습니다.
-
스마일^_^ 2024.03.21 12:03
감사합니다.
-
입니다 2024.03.21 12:32
;정상적인 WIM 인지 확인 하기 위해 이미지 개수를 가져 오기
Procedure.l WIMGetImageCount(sWimFileFullPath.s)
Protected pdwCreationResult.l = 0, ImageCount.l = 0
Protected hDLL.l = OpenLibrary(#PB_Any, "WimGapi.dll")
If hDLL
Protected HANDLE_hWim = CallFunction(hDLL, "WIMCreateFile", @sWimFileFullPath, #GENERIC_READ, #OPEN_EXISTING, 0, 0, @pdwCreationResult)
ImageCount.l = CallFunction(hDLL, "WIMGetImageCount", HANDLE_hWim)
CloseLibrary(hDLL)
EndIf
ProcedureReturn ImageCount
EndProcedure
;디버그로 확인. 0이면 문제가 있는 wim 파일로 보면 됨.
Debug WIMGetImageCount("E:\Test\Test.wim")
-
왕초보 2024.03.21 13:06
오토잇에서도 같은 api로 PE인지 윈도우 wim인지를 구분하는데 활용을 하고 있습니다...
이것을 가지고 PureBasic에서 찾아 볼까도 했었습니다.. 배울것이 많아서 아직 시도를 못하고 있었습니다
오토잇으로 만들것 정도는 되어야 할것 같아서 생각만 하고 있었습니다
이렇게 귀한 지식을 베풀어 주셔서 감사합니다
이미지 갯수로 wim 파일 정상, 비정상인지를 판단을 하고 있는 소스네요
wim 증분 백업시에 도움이 될것 같습니다
알려주신 소스를 가지고 공부를 해서 PE인지 구분을 하는 것으로 해보도록 하겠습니다
관심을 가져주시고 베풀어 주시고자 하시는 따뜻한 마음에 머리숙여 감사드립니다
-
왕초보 2024.03.21 13:19
베풀어 주신 소스로 wim 파일과 7z으로 폴더를 압축한 wim 파일을 확인하여 보았습니다
잘됩니다..감사합니다
1. 정상적인 PE인 경우 1을 반환하고 있습니다
2. pe를 압축을 풀고 7z으로 압축후 확장자를 wim으로 만든것입니다 정상적인 wim 파일이 아니어서 0을 반환하고있습니다
3. 압축을 해제한 PE를 T.Dism으로 PE로 다시 캡처를 하는 도중 중간에 중지를 하였습니다..용량이 얼마 비정상입니다
4. 비정상으로 0 값을 반환하였습니다...
-
왕초보 2024.03.21 14:34
제가 멍청했습니다..
입니다님 WimInfo 소스가 너무 길어서 모든 소스를 다 보지를 못하고 필요한 것이 있을때 참조를 했습니다
이미 PE인지 아닌지 구분하는 소스가 WimInfo에 포함이 되어 있네요..
WimInfo 작품에 저에게 필요한 보물인것을 알면서도 소스 공부를 제대로 하지못하였습니다
함수를 가져와서 적용을 해보도록 하겠습니다
입니다님..감사합니다
-
왕초보 2024.03.21 15:16
입니다님 WimInfo 작품에 있는 소스를 활용해서 PE인지 구분을 하도록 하는것이 성공하였습니다
WimInfo 소스가 없었다면 이렇게 성공하는것 자체를 생각 못했을것입니다.. 감사합니다
7z으로 만든 wim 파일이나 wim 캡처 중간에 중지가 된 경우에는 WIMCreateFile 자체가 에러가 나서 이 부분에서는 PE인지 검사하지
않고 wim이 정상일때 PE인지 구분을 하는것으로 하였습니다
이미..소스에는 WIMCreateFile가 정상일때만으로 되어 있었습니다
1. 부팅이 가능한 wim(PE) 일때 1값이 반환됩니다
2. 윈도우 wim 파일 입니다
3. 폴더를 7z으로 압축후 wim 으로 이름을 바꾼 경우입니다..정상 wim 파일이 아니어서 WIMCreateFile에서 에러가 발생을 합니다
아래처럼 구분해서 표시를 할수 있습니다
4. PE를 압출 해제한후 T.Dism 프로그램으로 PE로 압축하는중에 중지를 한 경우 입니다.
이것도 WIMCreateFile를 통과하지 못해서 표시를 하였습니다
5. 추가입니다 윈도우 ISO에 있는 boot.wim의 결과값입니다 저는 1만 생각을 했었습니다..boot.wim은 처음 해봅니다..값이 2이네요
부팅 가능한 이미지 갯수인가 봅니다
-
입니다 2024.03.21 17:54
image Count 하고
bootindex 는 다릅니다.
여러개의 이미지가 있을 경우 bootindex 가 없으면 1번 이미지로 부팅하고
bootindex 로 이미지 번호가 지정되어 있으면 해당 번호로 부팅합니다.
-
왕초보 2024.03.21 18:18
설명을 해주신 덕분에 정확히 파악이 되었습니다
일반 PE는 이미지가 1개여서 bootindex이 1인것이 1번 이미지로 부팅이 되는것이고 boot.wim의 경우 이미지가 2개 인데 2개 이미지중
에서 2번이 부팅이 가능한 이미지라는것이네요..
부끄럽습니다..엉뚱하게 착각을 했습니다
입니다님 감사합니다...
-
입니다 2024.03.21 18:51
bootindex는 부팅 가능 이미지라는 의미가 아니라
2번으로 부팅 해라는 뜻입니다.
이미지 모두 부팅 가능할 경우 뭘로 부팅 할지 지정하는 의미입니다.
응용을 잘 하면
같은 버전의 PE 일 경우 하나의 파일로 합쳐서 선택적으로 부팅 할 수 있습니다.
-
왕초보 2024.03.21 19:14
말씀하여 주신 내용이 정답입니다..
부팅 가능한 PE인지 여부를 bootindex로 판단을 하게 된 이유는 PE인 경우 bootindex값이 1이고 윈도우 설치인 wim인 경우
이 값이 0 이라는것에 착안을해서 PE 부팅 여부를 판단을 한것입니다.
이 방법이 꼼수일것입니다..윈도우 설치 wim을 만들때 실수로 bootindex 값을 줄수도 있을것입니다.
아래는 새로 쓴 사용기에 쓴 내용입니다...오늘 댓글을 주신 내용으로 검색을 하면서 찾은 부분들입니다
pureBasic - PE 1회 부팅 PE 체크기능을 추가하여 보았습니다.
https://windowsforum.kr/review/20535798
BootIndex
.wim 파일에서 부팅 가능한 이미지의 인덱스를 지정합니다.
이 값이 0이면 부팅 가능한 이미지를 사용할 수 없습니다. 부팅 가능한 이미지를 설정하려면 WIMSetBootImage 함수를 호출합니다.
아래는 T.Dism에서 캡처를 할때 선택 항목입니다..PE의 경우 bootindex 값이 1로 설정이 되고 윈도우는 설정값 없이 캡처가 되는것
으로 알고 있습니다
이런 차이를 가지고 정상적인 방법은 아니지만 PE를 구분하게 된것입니다..
PE는 bootindex 값이 0이 아니어서 이 정도로만 구분을 해도 충분하지 않을까 하는 생각에 이 방법을 사용을 하게되었습니다
이미지가 0 인 아닌 경우 PE를 판단하는 더 좋은 방법이 있으면 좋은데요...이 꼼수밖에 없어서..이것을 활용하였습니다
PE의 wim 파일안에 있는 특정 파일의 유무로 체크하시는 방법도 있었던것 같습니다.
MS에서 규정한 방법은 아니지만 bootindex 값을 설정하는 경우는 윈도우가 아니라 부팅이 가능한 PE를 만들때 추가하는 값이이서
PE에는 이값이 무조건 추가가 될것입니다..윈도우의 경우에는 체크를 해보면 많지는 않지만 값들이 0 입니다.
100% 정확하지는 않을것입니다.. 실수로 PE가 아닌것으로 부팅할때 방지정도는될수 있을것 같습니다
"같은 버전의 PE 일 경우 하나의 파일로 합쳐서 선택적으로 부팅 할 수 있습니다." 내용은 세**에서 보았던 내용입니다
bootmgr 도 일반것이 아니라 개조가 되었던것으로 가능했던것 같습니다.
너무 오래전이지만 신기해서 기억이 남아 있습니다. 다른곳에서 본적이 없은것을 보면 쉽지는 않은것 같습니다.
-
입니다 2024.03.21 20:03
PE 는 에디션 노드에서 WindowsPE 인지 확인 하면 되고,
일반 Wim 은 윔부트 라는 노드로 확인 하면 됩니다.
Wimlib 에 있는 Get propety 기능을 GetNodeValue 라는 코드 소스를 올리겠습니다.
-
왕초보 2024.03.21 20:16
확실히 구분하는 방법이 있나 봅니다..
솔질히 말씀드려서 MS 규정이 있는것도 아니고 설명이 있는것도 아니어서 bootindex 번호로 PE인지 윈도우인지 구분하는것도 시간이
많이걸려서 여기저기 찾아보다가 우연히 차이가 있다는것을 알게 도어서 활용하게된 꼼수입니다..
어떤것을 활용해야 하는지 알려주셨는데도 깜깜하기만 합니다..저도 검색을 하여 보겠습니다
결국은 이렇게 또 신세만 지게 되었습니다..
제가 드릴수 있는것은 감사드리는 마음뿐이어서 죄송합니다
-
광풍제월 2024.03.21 12:35
수고하셨습니다.
-
소리애드 2024.03.21 12:42
수고하셨습니다 ...
-
엄마갯돈 2024.03.21 17:52 수고하셨습니다.
-
아이맥스 2024.03.21 18:17
감사합니다
-
목련 2024.03.21 23:57
수고많이하셨습니다.
수고많으셨습니다