설치 / 사용기

소프트웨어 헉시 저처럼 PureBasic 시작해보신 분 계실라나요?

2024.03.21 22:50

라랑 조회:489 추천:8

차곡 차곡 개념부터 학습해야 하는데 설렁설렁 AI 믿고 대충 덤볐다가 허탕만 치고 결국 개념부터 차근차근

다시 절대 안하고(개버릇...) 또 다시 날림 삽질하다 제가 헤맨 몇 가지... 올려볼게요.

 

------------ 드라이브 문자 입력 받기 --------------

Input$ = InputRequester("드라이브 문자", "부팅할 드라이브 문자를 입력하세요 (문자만) : ", "D")

MessageRequester("Information", Input$)

 

Input1.s = InputRequester("드라이브 문자", "부팅할 드라이브 문자를 입력하세요 (문자만) : ", "D")

MessageRequester("Information", Input1.s)

 

Input2.s{1} = InputRequester("드라이브 문자", "부팅할 드라이브 문자를 입력하세요 (문자만) : ", "D")

MessageRequester("Information", Input2.s{1})

----------------------------------------------------------------------- 

 

------ 콘솔 출력 가져오는 샘플 -------

; 참고로 저는 bootice 전문가모드에서 aaa라는 항목을 70개 정도 삭제함

; bcdedit /enum으론 안보이니 연습하시고나면 bootice로 꼭 확인하시길 ^^

------------------------------------------------------------------------------

 

guid_run = RunProgram("bcdedit", "/create /d aaa /application osloader", "", #PB_Program_Open | #PB_Program_Read)

Output$ = ""

If guid_run

  While ProgramRunning(guid_run)

    If AvailableProgramOutput(guid_run)

      Output$ + ReadProgramString(guid_run, #PB_Ascii) + Chr(13)

    EndIf

  Wend

  Output$ + "Exitcode: " + Str(ProgramExitCode(guid_run))

  CloseProgram(guid_run) ; Close the connection to the program

EndIf

guid_os$ = Mid(Output$, 1, 38)

MessageRequester("Output", guid_os$)

MessageRequester("Output", Output$)

 
---------------------------------------------------------------

-- 다른 것도 좀 애먹었지만 배치 만들던 습성을 못버리니까

-- 콘솔 창에 출력을 어떻게 가져와서 변수화 하는지 이거 찾는 동안 AI가 구라를 너무 많이 날려서 그거 때문에 엄청나게 허탕을 쳤네요.

-- 결국 꽁수 포기하고 함수 한가지 한가지 다 테스트해가면서 겨우 찾은 방법입니다. 더 나은 방법이 있을 것 같은데 실력이 나아지면

-- 그땐 떠오를지도...

 

 

--------------- 아래는 제가 예전에 쓰던 원작자 snoopy님의 PE 부팅 배치파일 샘플 / 그 아래에 그것을 PureBasic으로
일부만 구현한 것

그나마 제일 간단한거 찾아서 덤비려다보니 그냥 생각나는게... 가장 많이 사용했던 것이기도 하고...

----------------------------------------------------------------------------------------------

@echo off

bcdedit /enum bootmgr > nul || goto _admin

 

set drv_L =

set /p drv_L= "드라이브 문자를 입력하세요. (ex : D), 콜론 생략 : "

 

bcdedit /create {ramdiskoptions} /d "TmpBoot_PE" || bcdedit /set {ramdiskoptions} description "TmpBoot_PE"

bcdedit /set {ramdiskoptions} ramdisksdidevice partition=%drv_L%: || goto _dynamic

bcdedit /set {ramdiskoptions} ramdisksdipath \TmpBoot_PE\boot\boot.sdi

setlocal enabledelayedexpansion

for /f "tokens=1-5 usebackq delims=-" %%a in (`bcdedit /create /d "TmpBoot_PE" /application osloader`) do (

            set first=%%a

            set last=%%e

            set guid=!first:~-9!-%%b-%%c-%%d-!last:~0,13!

)

bcdedit /set !guid! device ramdisk=[%drv_L%:]\TmpBoot_PE\sources\boot.wim,{ramdiskoptions}

bcdedit /set !guid! osdevice ramdisk=[%drv_L%:]\TmpBoot_PE\sources\boot.wim,{ramdiskoptions}

set bios=exe

reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecureBoot\State" > nul 2>&1

if not errorlevel 1 set bios=efi

bcdedit /set !guid! path \windows\system32\boot\winload.!bios!

bcdedit /set !guid! systemroot \windows

bcdedit /set !guid! winpe yes

bcdedit /set !guid! detecthal yes

bcdedit /displayorder !guid! /addlast

bcdedit /bootsequence !guid! /addlast

bcdedit /timeout 5

endlocal

goto _success

 

:_admin

cls

echo.

echo     우클릭 해서 관리자 권한으로 실행해주세요.

pause

exit

 

:_dynamic

cls

echo.

echo     오류가 발생했습니다. 동적 디스크에서는 작동하지 않습니다.

echo.

echo     기본 디스크에서 실행해주세요.

echo.

pause

exit

 

:_success

cls

echo.

echo     작업이 성공적으로 완료되었습니다.

echo.

echo     재부팅하시면 Tmp Boot_PE 메뉴가 나타납니다.

echo.

pause

exit

-------------------------------------- 이상이 배치파일 --------- 아래는 이것을 PureBasic으로 연습해 본 것

 

OpenConsole()

 

drv_l.s{1} = InputRequester("Drive Letter Input", "Please enter a drive letter:", "D")

PE_Name$ = "Tmp PE"

 

guid_run = RunProgram("bcdedit", "/create /d "+#DQUOTE$+PE_Name$+#DQUOTE$+" /application osloader", "", #PB_Program_Open | #PB_Program_Read)

  Output$ = ""

  If guid_run

    While ProgramRunning(guid_run)

      If AvailableProgramOutput(guid_run)

        Output$ + ReadProgramString(guid_run, #PB_Ascii) + Chr(13)

      EndIf

    Wend

    Output$ + "Exitcode: " + Str(ProgramExitCode(guid_run))

    

    CloseProgram(guid_run) ; Close the connection to the program

  EndIf

  

  guid_os$ = Mid(Output$, 1, 38)

  MessageRequester("Guid_Number", guid_os$)

  

RunProgram("bcdedit", "/create {ramdiskoptions} /d " + #DQUOTE$+PE_Name$+#DQUOTE$, "", #PB_Program_Open)

RunProgram("bcdedit", "/set {ramdiskoptions} description " + #DQUOTE$+PE_Name$+#DQUOTE$, "", #PB_Program_Open)

RunProgram("bcdedit", "/set {ramdiskoptions} ramdisksdidevice partition="+#DQUOTE$+drv_l+#DQUOTE$+":", "", #PB_Program_Open)

RunProgram("bcdedit", "/set {ramdiskoptions} ramdisksdipath "+ #DQUOTE$+ "\" +PE_Name$+ "\boot\boot.sdi" + #DQUOTE$, "", #PB_Program_Open)

RunProgram("bcdedit", "/set " + guid_os$ + " device ramdisk=" + #DQUOTE$ + "[" + drv_l +":]\" +PE_Name$+ "\sources\boot.wim,{ramdiskoptions}"+ #DQUOTE$, "", #PB_Program_Open)

RunProgram("bcdedit"," /set " + guid_os$ + " OSdevice ramdisk=" + #DQUOTE$ + "[" + drv_l +":]\" +PE_Name$+ "\sources\boot.wim,{ramdiskoptions}"+ #DQUOTE$, "", #PB_Program_Open)

RunProgram("bcdedit"," /set " + guid_os$ + " path \windows\system32\boot\winload.efi", "", #PB_Program_Open)

RunProgram("bcdedit"," /set " + guid_os$ + " systemroot \windows", "", #PB_Program_Open)

RunProgram("bcdedit"," /set " + guid_os$ + " winpe yes", "", #PB_Program_Open)

RunProgram("bcdedit"," /set " + guid_os$ + " detecthal yes", "", #PB_Program_Open)

RunProgram("bcdedit"," /displayorder " + guid_os$ + " /addlast", "", #PB_Program_Open)

RunProgram("bcdedit","/bootsequence " + guid_os$ + " /addlast", "", #PB_Program_Open)

RunProgram("bcdedit"," /timeout 5", "", #PB_Program_Open)

 

 

Delay(14000)

CloseConsole()

------------------------------------ OpenConsole() / CloseConsole() / Delay(14000) 은 없어도 됩니다.

--- 콘솔창 습성을 못버려서 debug 활용을 못하고 저걸로 자꾸 보게 되더라구요

 

원본 보시면 아시겠지만 최근 아주 지능화(?)된 1회성부팅보다 너무 너무 불편한 부팅스크립트이니

그냥 코딩 연습용 장난감으로만 보세요.

 

여러 자료나 정보를 제공해주신 입니다님과 왕초보님이 올려주신 보여주신 정보들이 시작이라도 해볼 맘이 생겼었네요.

감사드립니다. 

 

창띄우고(가젯이라고 불리는...) 연동하는 것은 의외루 너무 쉬워서 굳이 올리진 않았습니다. 기본 설치하면 예제가 엄청나게 많기도 하고 다른 베이직처럼 시작부터 폼모드(pbf)로 작성하시다가 switch code 모드로 코딩모드에서 작성하셔도 됩니다. 

 

마지막 샘플 실행파일 만든거 첨부하려고 했는데 고새 삭제하고 없군요. 백신 검사에서는 암것도 안나왔는데...;

 

왕초보님의 https://windowsforum.kr/index.php?mid=review&page=2&document_srl=20514407 이 글을 보고 시작하였습니다.

혹시 시작해보실 분들 홧팅!입니다.

 

 

번호 제목 글쓴이 조회 추천 등록일
[공지] 사용기/설치기 이용안내 gooddew - - -
11025 윈 도 우| win10 10945.4291 깡통습작 [7] 라랑 848 23 04-19
11024 소프트웨어| 디펜더 기록 삭제 [38] 집앞의_큰 1439 99 04-19
11023 기 타| IFW BR Fast v3.0 Drag + Win11 RecoveryPE로 업데이트 하... [15] 왕초보 957 36 04-18
11022 기 타| 실행 파일 오류 수정 하세요 [7] V무등산V 571 27 04-18
11021 기 타| 【공유】 Win11 ToolsBR v3.620+C “더블런처” PE ~2in1~ [22] 딸랑쇠 1068 60 04-18
11020 윈 도 우| Defender 보호 기록 제거 스크립트 [27] 와로 946 42 04-18
11019 기 타| 종료 WinXPE147수정버전_20240322_23H2 (빌드22631.3520) [47] 격자 360 92 04-18
11018 소프트웨어| WIM 정보 v0993 - 내부 파일 추가 삭제 내보내기 최적화 타... [17] 입니다 861 40 04-18
11017 기 타| 구형 PE 수정 [63] 집앞의_큰 1184 143 04-18
11016 기 타| (수정) PureBasic - Launch 버튼을 테마에 따라 다른색으로... [4] 왕초보 678 12 04-18
11015 기 타| 더블【숨은】 런처 PE [78] 딸랑쇠 1046 136 04-18
11014 기 타| 수정 00 [31] V무등산V 945 73 04-17
11013 소프트웨어| Launcher 다운로드 및 설치 [9] 기완아빠 616 33 04-17
11012 기 타| CLaunch - CLaunch.exe 종료후 테마 적용 방식으로 해보았... [4] 왕초보 678 9 04-17
11011 소프트웨어| 심플 런처 3 v0.2 - sLauncher3 [22] 지후빠 714 46 04-17
11010 윈 도 우| [가상머신용] 완전무인설치 테스트2 [21] suk 840 62 04-17
11009 기 타| PureBasic - AppsUseLightTheme 레지값 읽기 관련입니다 [7] 왕초보 695 12 04-17
11008 기 타| 【공유】 퀀텀 SystemM+ v2.0 ISO PE [25] 딸랑쇠 1478 77 04-16
11007 소프트웨어| AOMEI Backupper 사용하시는분이 라면 [61] 사랑의음악 750 74 04-16
11006 기 타| 종료 WinXPE147수정버전_20240322_23H2( 빌드 22631.3447 ) [70] 격자 457 135 04-16
XE1.11.6 Layout1.4.8