|
C++빌더 VCL에 보시면 InputBox() 라는 API가 있는데요 ^^; 질문답변 게시판에서 InputBox로 검색해보시고요.
그리고 배치 파일에 사용자 입력 값이 필요한 경우에는 대부분 파라미터로 처리합니다....
첫번째 파라미터는 %1 과 같이 표현하죠.
즉, 10번째 칼럼부터 자르기를 원하는 경우에는
cut.bat 10
이런 식으로 명령을 주게 만들면 되지요.
만약에 10을 입력하지 않으면 사용법을 출력해주시고요.
이런식으로 하면 됩니다.
if "%1"="" goto usage
echo 파라미터가 있을 경우 배치 파일이 처리될 부분
goto end
:usage
echo 프로그램 설명입니다. 파일명 [칼럼수]
:end
그리고 프로그램에서 뭔가의 값을 받아서 배치 파일로 전달해주는 경우에 리턴값 처리는 ERRORLEVEL 이란 것을 사용하지요.
C 프로그래밍
test.c
int main()
{
int ret;
printf("숫자를 입력하세요? ");
scanf("%d",&ret);
return ret;
}
배치 파일 프로그래밍
test.bat
@echo off
test.exe
if errorlevel 1 goto one
if errorlevel 2 goto two
echo 사용자 입력값(리턴값)이 1,2이 아닌 경우
goto end
:one
echo 사용자 입력값이 1인 경우
goto end
:two
echo 사용자 입력값이 2인 경우
:end
사실 오래되어서 기억이 가물합니다 ㅡㅡ;
해당 소스가 틀릴 가능성도 있음에 유념하시기 바랍니다. (테스트 안 해봄)
정** 님이 쓰신 글 :
: 저는 도스프롬프트(CMD) 에서 배치파일을 만들어서 폴더(하위폴더 모두포함) 속의 파일들의 경로가포함된 전체 경로가 사용자로부터 입력받은 수치 이상의 길이를 가지는 파일명들만 출력을 하도록하는 유틸을 만들려고 합니다.
:
: 기본적은 배치파일로 작성해야 될부분을 모두 만들었고 또 잘 작동되나 한가지 빠진것은 사용자로 부터 입력받은 길이 이상의 파일명들만 출력시킬 커트라인이 될 숫자 길이값을 입력받는 것이 아니라 배치파일 내에서 고정된 값을 할당하여야 되는 단점이 있습니다. 물론 배치파일의 'SET /P CUTLIN_NUM=커트라인될 파일의 길이를 입력하세요?'라는 기능을 이용해도 되지만 이것은 비쥬얼한 것이 아니라서 사실 보기도 싫고 사용도 불편합니다.
:
: 그래서 제가 잘 아는 배치파일을 최대로 살리면서 또 배치로는 단점이 있는 최소 부분만 C++빌더로 구현을 할려고 합니다.
:
: 즉 배치파일에서 C++빌더로 컴파일된 .EXE를 호출하여 커트라인될 숫자값을 사용자로 부터 비쥬얼하게 입력받고 그값을 배치로 리턴을 해주는 방식입니다.
:
: 아래는 구체적으로 알고자 하는부분입니다.
:
: C++빌더에서 사용자로부터 숫자값을 입력받는 인풋 박스를 출력하려고 합니다. 비베나 비베스크립트나 자바스크립에서는 InputBox() 혹은 Propmpt() 함수와 같이 간단하게 해결이 되는데 C++빌더에서는 찾기가 좀힘드네요.
: 혹시 API로도 해결이 가능한가요 아니면 MFC까지 구현해야 하나요?
: 이왕이면 제가 이해가 잘아는 API로만 구현을 해보았으면 하는데요.
:
: 헤드파일이나 리소스(RC) 파일를 포함해야 하는 프로젝트 파일을 만들어야 한다면 소스를 첨부파일이나 이메일로도 좀 올려 주십시오. Borland나 VC++이나 DEV C++,Relo2.0 등등 어떻한 형태의 프로젝트 팔일소스라도 상관없어니 좀 부탁드립니다.
: 저의 이메일은 ssforyah@yahoo.co.kr 입니다.
:
:
: 그럼 답변 부탁드립니다.
:
:
: 아래는 추가적으로 제가 웹검색으로 기본 골격 까지만 겨우 만들어본 것인데 Inputbox의 겉모습은 만들었는데
: OK버턴을 클릭했을때 텍스트박스에 입력되어있는 숫자값을 Return을 해야 하는데 어떻게 해야 하나요?
: =========================================================================================
:
: #include <WINDOWS.H>
: #include "Project1_res.h"
:
:
: LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
:
: HINSTANCE g_hInst;
:
: LPSTR lpszClass="SubEdit";
:
:
:
: int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
:
: ,LPSTR lpszCmdParam,int nCmdShow)
:
: {
:
: HWND hWnd;
:
: MSG Message;
:
: WNDCLASS WndClass;
:
: g_hInst=hInstance;
:
:
:
: WndClass.cbClsExtra=0;
:
: WndClass.cbWndExtra=0;
:
: WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
:
: WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
:
: WndClass.hIcon=LoadIcon(NULL,IDI_QUESTION);
:
: WndClass.hInstance=hInstance;
:
: WndClass.lpfnWndProc=(WNDPROC)WndProc;
:
: WndClass.lpszClassName=lpszClass;
:
: WndClass.lpszMenuName=NULL;
:
: WndClass.style=CS_HREDRAW | CS_VREDRAW;
:
: RegisterClass(&WndClass);
:
:
:
: hWnd=CreateWindow(lpszClass,TEXT("검색할 파일명길이의 커트라인을 입력"),WS_CAPTION|WS_SYSMENU,
:
: 300,200,370,110,
:
: NULL,(HMENU)NULL,hInstance,NULL);
:
: ShowWindow(hWnd,nCmdShow);
:
:
:
: while(GetMessage(&Message,0,0,0)) {
:
: TranslateMessage(&Message);
:
: DispatchMessage(&Message);
:
: }
:
: return Message.wParam;
:
:
: }
:
:
:
: #define ID_EDIT1 100
:
: #define ID_EDIT2 101
:
: HWND hEdit1, hEdit2;
:
: WNDPROC OldEditProc;
:
: LRESULT CALLBACK EditSubProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
:
: {
:
: switch (iMessage) {
:
: case WM_KEYDOWN:
:
: if (wParam==VK_RETURN) {
:
: return 10;
:
: }
:
: if (wParam==VK_TAB) {
:
: SetFocus(hEdit2);
:
: }
:
: break;
:
: // case WM_LBUTTONDOWN:
:
: // SendMessage(hWnd,EM_SETSEL,0,-1);
:
: // return 0;
:
: }
:
: return CallWindowProc(OldEditProc,hWnd,iMessage,wParam,lParam);
:
: }
:
:
:
: LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
:
: {
:
: PAINTSTRUCT ps;
:
: HDC hdc;
:
: char Mes[]="입력된 수치 이상의 파일명들을 출력합니다.";
:
: switch(iMessage) {
:
: case WM_CREATE:
:
: hEdit1=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
: ES_AUTOHSCROLL,
: 10,10,150,25,hWnd,(HMENU)ID_EDIT1,g_hInst,NULL);
:
: hEdit2=CreateWindow("button","확인",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
: 260,10,50,25,hWnd,(HMENU)0,g_hInst,NULL);
:
: SetFocus(hEdit1);
: OldEditProc=(WNDPROC)SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)EditSubProc);
: return 0;
:
: case WM_COMMAND:
: if(LOWORD(wParam) == 0) {
: MessageBox(hWnd,"입력된 이 값을 리턴해야 함.","Button",MB_OK);
: PostQuitMessage(34);
: return 0;
: break;
: }
: return 0;
:
: case WM_PAINT:
:
: hdc=BeginPaint(hWnd, &ps);
:
: TextOut(hdc,10,40,Mes,strlen(Mes));
:
: EndPaint(hWnd, &ps);
:
: return 0;
:
: case WM_DESTROY:
:
: SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)OldEditProc);
:
: PostQuitMessage(0);
:
: return 0;
:
: }
:
: return(DefWindowProc(hWnd,iMessage,wParam,lParam));
:
: }
|