설치 / 사용기

소프트웨어 헉시 저처럼 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 - - -
2500 소프트웨어| Movie To GIF ==> GIF 만들기 [8] update 사랑의음악 286 18 04-27
2499 소프트웨어| ScreenHunter 7 Pro (7.0.1461 64-bit) 한국어 배포 [43] update 사랑의음악 459 134 04-25
2498 소프트웨어| HotCorners v0.2 , sLaunch4 v0.2.1 [13] 지후빠 504 42 04-24
2497 소프트웨어| OKR 엔진 열번째에 4boot.wim넣어 윈도우 청소 [15] wfja88 440 36 04-24
2496 소프트웨어| 화질 손상 없이 이미지(사진) 파일 압축 테스트 [3] Day 830 23 04-23
2495 소프트웨어| knm's 4boot.wim 간단 사용기입니다. [11] 지후빠 702 33 04-22
2494 소프트웨어| HotCorners - 화면 코너로 커서가 이동하면 실행 [13] 지후빠 652 44 04-22
2493 소프트웨어| sLaunch4 - PE 용 심플 런처 4 [17] 지후빠 605 49 04-21
2492 소프트웨어| Smart PC Optimizer V 9.4.0.2 (한국어 번역 버전) [9] 사랑의음악 600 22 04-21
2491 소프트웨어| AOMEI Backupper 7.3.5 인터 페이스 구축 [59] 사랑의음악 733 90 04-19
2490 소프트웨어| 디펜더 기록 삭제 [38] 집앞의_큰 1435 99 04-19
2489 소프트웨어| WIM 정보 v0993 - 내부 파일 추가 삭제 내보내기 최적화 타... [17] 입니다 859 40 04-18
2488 소프트웨어| Launcher 다운로드 및 설치 [9] 기완아빠 615 33 04-17
2487 소프트웨어| 심플 런처 3 v0.2 - sLauncher3 [22] 지후빠 710 46 04-17
2486 소프트웨어| AOMEI Backupper 사용하시는분이 라면 [61] 사랑의음악 746 74 04-16
2485 소프트웨어| 심플 런처 1 v0.2 - sLauncher1 [9] 지후빠 650 38 04-15
2484 소프트웨어| WIM 정보 v0991 -(수정) 다시 테스트 [11] 입니다 1139 40 04-15
2483 소프트웨어| ChrisPC VideoTube Downloader Pro 14.24.0414 [2] 사랑의음악 362 14 04-15
2482 소프트웨어| PC화면과 소리를 다른 기기로 미러링(확장/복제) 하기... [1] asklee 486 9 04-13
2481 소프트웨어| WIM 정보 v0988 - pb 6.10 호환성 추가 지원. x86 호환성 ... [14] 입니다 986 41 04-11
XE1.11.6 Layout1.4.8