'Windows/API'에 해당되는 글 13건

  1. 2010.07.16 [API] MFC Dialog 에서 실행 인자 값(Arg) 받기
  2. 2010.05.31 [API] GetLastError()
  3. 2010.05.31 [API] ShellExecute()
Windows/API2010.07.16 09:38
MFC Dlg 방식에서는 App에 아규먼트 값들이 전달 되서 들어오게 됩니다.

이때 그 값들을 저장하는 변수가 m_lpCmdLine 입니다.

AfxGetApp()->m_lpCmdLine;

Dlg에서 이러게 접근해서 사용하시면 됩니다.


Posted by 최우림 -=HaeJuK=-
Windows/API2010.05.31 09:57
함수명 :  GetLastError();
제공 Header File : winbase.h
리턴 :  unsigned int
설명 :  호출 되는 시점에서 어떠한 에러가 났는지 시스템 적으로 판단해서 에러 값을 출력해 준다.
리턴 되는 번호에 따라 에러 값이 존재한다.

사용법 : 

printf("Error Code : %d \n", GetLastError());

-----------------------------------------------------------------------------------------------------------
번호별 에러 코드 MSDN 참조
-----------------------------------------------------------------------------------------------------------
MSDN LINK : http://msdn.microsoft.com/en-us/library/ms681381%28VS.85%29.aspx

  • System Error Codes (0-499)
  • System Error Codes (500-999)
  • System Error Codes (1000-1299)
  • System Error Codes (1300-1699)
  • System Error Codes (1700-3999)
  • System Error Codes (4000-5999)
  • System Error Codes (6000-8199)
  • System Error Codes (8200-8999)
  • System Error Codes (9000-11999)
  • System Error Codes (12000-15999)
  • Posted by 최우림 -=HaeJuK=-
    Windows/API2010.05.31 09:45
    API 함수명 : ShellExecute();
    제공 DLL : SHELL.DLL


    프로그램을 띄우거나 파일을 실행할경우 ShellAPI 함수인 ShellExecute() 를 사용합니다.
    이 함수는 윈도우즈 탐색기에서 파일을 선택하고 더블클릭하는 기능과 동일한 동작을 합니다.
    다음은 ShellExecute() 의 몇가지 사용예입니다.

    (1) 파일과 연관(association)된 프로그램으로 파일을 엽니다
        ShellExecute(Handle, 'open', PChar('test.txt'), nil, nil, SW_SHOW);

    (2) notepad.exe 에 파라미터로 config.sys 파일을 주어 메모장을 실행합니다
        ShellExecute(Handle, 'open', 'notepad', 'c:\config.sys', nil, SW_SHOW);

    (3) PC에 설치된 기본 웝브라우저로 지정한 사이트를 엽니다.
        ShellExecute(Handle, 'open', 'www.howto.pe.kr', nil, nil, SW_SHOW);

    (4) 특정 폴더를 시작 폴더로 하는 윈도우즈 탐색기를 엽니다
        ShellExecute(Handle, 'explore', PChar('c:\windows)', nil, nil, SW_SHOW);

    (5) readme.doc 파일을 연결된 프로그램으로 인쇄하고 화면을 닫습니다
        ShellExecute(Handle, 'print', 'readme.doc', nil, nil, SW_SHOW);
        
    (6) rMyDelphiFile.pas 파일을 wordpad 프로그램으로 인쇄하고 화면을 닫습니다
        ShellExecute(Handle, 'print', 'wordpad.wxe', 'MyDelphiFile.pas', nil, SW_SHOW);

    (7) readme.doc 파일을 프린터를 선택하여 연결된 프로그램으로 인쇄하고 화면을 닫습니다
      
      var
          Device : array[0..255] of char;
          Driver : array[0..255] of char;
          Port   : array[0..255] of char;
          S: String;
          hDeviceMode: THandle;
        begin
          Printer.PrinterIndex := -1;  // 프린터 인덱스를 지정합니다. 여기서는 기본 프린터(-1) 선택
          Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
          S := Format('"%s" "%s" "%s"',[Device, Driver, Port]);
          ShellExecute(Handle, 'printto', 'readme.doc', Pchar(S), nil, SW_HIDE);

    (8) 기본 메일 프로그램을 실행합니다.
        ShellExecute(Handle, nil, 'mailto:cozy@howto.pe.kr', nil, nil, SW_SHOW);

    (9) DOS 명령어를 실행하고 화면을 닫습니다
        ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c copy file1.txt file2.txt'), nil, SW_SHOW);

    (10) DOS 명령어를 실행하고 화면을 닫지 않습니다
         ShellExecute(Handle, 'open', PChar('command.com'), PChar('/k dir'), nil, SW_SHOW);

    (11) ShellExecute()의 리턴값은 실행된 프로그램의 핸들이거나 에러코드입니다
         리턴값이 32 이하이면 에러가 발생한것으로 각각은 아래와 같은 의미가 있습니다

      var
        code: Integer;
      begin
        code := ShellExecute(...);
        if code <= 32 then ShowMessage(ShowShellExecuteError(code));
      end;
        
      // ShellExecute()의 리턴코드에 대한 에러 메시지
      function ShowShellExecuteError(i: integer): String;
      begin
        case i of 0: result := 'The operating system is out of memory or resources.';
          ERROR_FILE_NOT_FOUND: result := 'The specified file was not found.';
          ERROR_PATH_NOT_FOUND: result := 'The specified path was not found.';
          ERROR_BAD_FORMAT: result := 'The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).';
          SE_ERR_ACCESSDENIED: result := 'The operating system denied access to the specified file.';
          SE_ERR_ASSOCINCOMPLETE: result := 'The filename association is incomplete or invalid.';
          SE_ERR_DDEBUSY: result := 'The DDE transaction could not be completed because other DDE transactions were being processed.';
          SE_ERR_DDEFAIL: result := 'The DDE transaction failed.';
          SE_ERR_DDETIMEOUT: result := 'The DDE transaction could not be completed because the request timed out.';
          SE_ERR_DLLNOTFOUND: result := 'The specified dynamic-link library was not found.';
          //SE_ERR_FNF          : result:='The specified file was not found.';
          SE_ERR_NOASSOC           : result:='Unbekannter Extender.';
          SE_ERR_OOM: result := 'There was not enough memory to complete the operation.';
          //SE_ERR_PNF          : result:='The specified path was not found.';
          SE_ERR_SHARE: result := 'A sharing violation occurred.';
        end;
      end;

    (12) ShellExecuteEx()를 이용하여 notepad.exe 를 실행한 후 종료될때까지 기다립니다
      var
        SEInfo: TShellExecuteInfo;
        ExitCode: DWORD;
        ExecuteFile, ParamString, StartInString: string;
      begin
        ExecuteFile   := 'notepad.exe';   // 실행할 프로그램
        ParamString   := 'c:\winzip.log'; // 프로그램의 명령행 파라미터
        StartInString := 'c:\';           // 시작 위치
        FillChar(SEInfo, SizeOf(SEInfo), 0);
        SEInfo.cbSize := SizeOf(TShellExecuteInfo);

        with SEInfo do
        begin
          fMask        := SEE_MASK_NOCLOSEPROCESS;
          Wnd          := Application.Handle;
          lpFile       := PChar(ExecuteFile);
          lpParameters := PChar(ParamString);
          lpDirectory  := PChar(StartInString);
          nShow        := SW_SHOWNORMAL;
        end;
        if ShellExecuteEx(@SEInfo) then
        begin
          repeat
            Application.ProcessMessages;
            GetExitCodeProcess(SEInfo.hProcess, ExitCode);
          until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
          ShowMessage('프로그램이 종료되었습니다');
        end
        else ShowMessage('프로그램을 실행할 수 없습니다');



    출처] ShellExecute(Ex) 사용법 예제 12가지|작성자 블르

    Posted by 최우림 -=HaeJuK=-

    티스토리 툴바