설치 / 사용기

소프트웨어 헉시 저처럼 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 - - -
2480 소프트웨어| 실행 목록 및 화면 캡처 v0.2 [16] 입니다 848 33 04-11
2479 소프트웨어| Building Information Modeling 한글을 찾아서~ [1] 습관 228 4 04-10
2478 소프트웨어| 유튜브 멀티다운로드 - 플레이 기능 [11] 굿듀님스토 395 25 04-04
2477 소프트웨어| PureBasic - AZJIO ChkDskGui_4.2.2_Admin_KO [20] 지후빠 611 50 04-01
2476 소프트웨어| DLnow Video Downloader [15] 사랑의음악 551 34 04-01
2475 소프트웨어| 유튜브 멀티다운로드 - 네이버 치지직 실시간 고화질 재생 [8] 굿듀님스토 846 13 03-31
2474 소프트웨어| PureBasic - AZJIO BCDBootGUI 한글 [22] 지후빠 738 57 03-30
2473 소프트웨어| 유튜브 멀티 다운로드 - 네이버 치지직 [1] 굿듀님스토 606 12 03-30
2472 소프트웨어| 아프리카TV 실시간 방송 실시간으로 플레이어로 보기 [17] 굿듀님스토 814 42 03-30
2471 소프트웨어| 유튜브 멀티 다운로드 서포트 목록 [5] 굿듀님스토 402 21 03-30
2470 소프트웨어| 유튜브 멀티 다운로드 트위치 생방송 다운로드 지원 [41] 굿듀님스토 725 65 03-29
2469 소프트웨어| WIM 정보 v0983 - 검은색 배경 버그 수정 [13] 입니다 781 49 03-29
2468 소프트웨어| 유튜브 멀티 다운로드 - 멀티 오디오트랙 및 기타 옵션 기... [15] 굿듀님스토 492 28 03-26
2467 소프트웨어| WIM 정보 v0981 - 검색 기능 추가.편의성 향상(약간의 버그... [10] 입니다 765 35 03-26
2466 소프트웨어| Advanced Installer 한글 패치 2종 [78] SPiRiTY 1063 106 03-25
2465 소프트웨어| 아래 글에 그거 일부 기능만 완성(수정) [11] 라랑 406 16 03-25
2464 소프트웨어| PureBasic으로 BCD 툴 따라해보는 중 [4] 라랑 548 9 03-24
2463 소프트웨어| WIM 정보 v0970 - bcd 1회 부팅 - 소소한 버그들 수정. WIM... [16] 입니다 906 51 03-22
» 소프트웨어| 헉시 저처럼 PureBasic 시작해보신 분 계실라나요? [6] 라랑 489 8 03-21
2461 소프트웨어| 크롬 123버전 예전 UI 변경 방법... [11] DengJang 682 23 03-20
XE1.11.6 Layout1.4.8