설치 / 사용기

소프트웨어 헉시 저처럼 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 - - -
11052 윈 도 우| IFW_BR_Fast_v3.0_Drag_ 복원리커버리 Win11 x64 PE 실컴... [18] 수리수리 747 16 04-23
11051 기 타| CLaunch를 RocketDock 처럼..아닌것 같네요 [4] 왕초보 695 9 04-23
11050 기 타| PureBasic Launch - 입니다님 투명폼을 활용하여 보았습니다. [11] update 왕초보 716 18 04-22
11049 소프트웨어| knm's 4boot.wim 간단 사용기입니다. [11] 지후빠 700 33 04-22
11048 소프트웨어| HotCorners - 화면 코너로 커서가 이동하면 실행 [13] 지후빠 652 44 04-22
11047 기 타| CLaunch - 아이콘 형태로 메뉴를 하여 보았습니다 [8] 왕초보 726 15 04-21
11046 소프트웨어| sLaunch4 - PE 용 심플 런처 4 [17] 지후빠 603 49 04-21
11045 기 타| 4boot 간단한 사용기 [19] 격자 810 44 04-21
11044 소프트웨어| Smart PC Optimizer V 9.4.0.2 (한국어 번역 버전) [9] 사랑의음악 588 22 04-21
11043 기 타| PE에서 윈도우 청소 도구 [193] update 집앞의_큰 1551 276 04-21
11042 기 타| LetterSwap 에러 - 이렇게 해결하였습니다 [5] 왕초보 726 11 04-21
11041 기 타| WinXPE147수정버전_20240322_ 23H2 ( 빌드22635.3500 ) 사용기 [41] 격자 478 70 04-20
11040 기 타| nov님 BR Fast 버전 피드백 - 원인을 찾았습니다 [6] 왕초보 715 12 04-20
11039 기 타| 【첨부】 PEplus 2종 PE를 “더블런처” PE로 만들기 [12] update 딸랑쇠 1002 52 04-20
11038 기 타| WinXPE147수정버전_20240322_23H2 (빌드22631.3520) Launch... [32] 격자 674 75 04-19
11037 소프트웨어| AOMEI Backupper 7.3.5 인터 페이스 구축 [59] 사랑의음악 729 89 04-19
11036 윈 도 우| win10 10945.4291 깡통습작 [7] 라랑 846 23 04-19
11035 소프트웨어| 디펜더 기록 삭제 [38] 집앞의_큰 1430 99 04-19
11034 기 타| IFW BR Fast v3.0 Drag + Win11 RecoveryPE로 업데이트 하... [15] 왕초보 957 36 04-18
11033 기 타| 실행 파일 오류 수정 하세요 [7] V무등산V 568 27 04-18
XE1.11.6 Layout1.4.8