Q&A

  • 특정확장자를 클릭하면 제가 만든 프로그램으로 바로 실행하는 방법좀^^;;
안녕하세요.^^
제가 만든 프로그램을 레지스토리에 등록해서 그 확장자 파일을 클릭하면 바로 연결하는 방법을 좀
갈켜주세요..^^ 저기 검색을 해서 등록하는 방법은 알겠는대....이대로 하니까 레지스토리 확인을 하면은
등록은 되어 있는대 실행을 하니까 어떤 프로그램으로 등록할꺼냐는 창이 떠서요..
검색해서 찾은 소스가

Var

Reg : TRegistry;

Begin

Reg := TRegistry.Create;

try

with Reg do

begin

RootKey := HKEY_CLASSES_ROOT;

OpenKey('MyApp', True); // Openkey(키이름, True);

// 키이름이 없으면 생성한다.

WriteString('', 'MyApp File');

CloseKey;



OpenKey('MyAppDefaultIcon', True);



// 첫번째 파라미터는 반드시 빈문자열이어야 한다.

// 마지막 파라미터는 자신이 만든 실행파일에서 사용할 Icon이다.



WriteString('', Application.ExeName + ',0');

CloseKey;



OpenKey('MyAppshellopencommand', True);

WriteString('', Application.ExeName + ' "%1"');

CloseKey;



RootKey := HKEY_CLASSES_ROOT;

OpenKey('.ext', True); //substitute .ext with



// 자신이 원하는 확장자

WriteString('', 'MyApp');

CloseKey;



end;



finally

Reg.CloseKey;

Reg.Free;

end;

End;

인대요...이렇게 한후에 어떻게 하면은 연결이 되는건지 좀 갈켜주세요^^
2  COMMENTS
  • Profile
    최용일 2002.06.18 19:37
    안녕하세요. 최용일입니다.

    레지스트리에 제대로 등록이 안되었네요...

    HKEY_CLASS_ROOT에 .를 포함한 확장자가 키로 만들어져야 하구요.

    그 키에 기본값으로 그 확장자의 정보를 저장할 이름을 써주세요.

    방금만든 이름으로 HKEY_CLASS_ROOT에 키하나 만드시고 탐색기의 종류에 표시될 문자열을 기본값으로 주세요.

    하위키로 DefaultIcon을 만드시고 기본값으로 아이콘이 있는 파일이름과 인덱스를 주시고 Shell이라는 키를 만드시고 그 하위에 또 Open라는 키를 만드세요. Open밑에 Command키를 만드시고, Command키의 디폴드값에 프로그램 풀패스를 적어주시면 됩니다.

    HKEY_CLASS_ROOT.MyExt
    기본값=MyAppFile
    HKEY_CLASS_ROOTMyAppFile
    기본값=내가만든파일
    HKEY_CLASS_ROOTMyAppFileShellDefaultIcon
    기본값=C:MyApp.exe, 1
    HKEY_CLASS_ROOTMyAppFileShellOpenCommand
    기본값=C:MyApp.exe %1

    ^^ 항상 즐코하세요...

  • Profile
    하얀까마귀 2002.06.18 19:59
    안녕하세요 하얀까마귀 입니다.

    음.. 소스내용을 제대로 이해를 못하신것 같네요...

    위에 최용일님 가 올린 내용을 조금 보충 설명 합니다.

      // MyExt 는 등록하실 확장자 입니다.
      예를 들어서 bmp 파일을 연결하실려면 여기다가 .bmp 하시면 됩니다.

    이넘은 키 값이고... 그러니까 레지에디터에 보시면 디렉토리 같이 생긴거 있죠? 그거 이름 입니다..

    그리고 이거의 기본값에다가 이거를 실행할 어플리케이션 이름을 넣습니다.

    이건 그러니깐.. 실행파일명이 아닙니다. 이 이름이 레지스트리 내에서

    유일해야 되거든요.. 중복되면 안되니깐.. 좀 길레 써주시는게 좋습니다.

    회사이름을 같이 써주면 좋겠죠?

    그러니깐.. KoreaMyApp.bmp 이런식으로. 좀 길게 써주시는게 좋습니다.

    // 금방 설명 드린게 요 두줄 입니다.


    이제 나머지..
    확장자에 어떤 어플리케이션에 연결되어 있다고 설명까지는 했으니깐.
    실제 어떤 실행파일이 실행될지를 가르쳐 줘야 겠죠...

    그거 하는게 위의 내용입니다.

    클래스 루트에다가.. 조금전에 확장자를 만드셧듯이 만드는데 이번에는

    확장자에 넣어주신 그 이름을 넣어줍니다. KoreaMyApp.bmp <- 좀전에
    정해주신거. 이이름은 아까 입력한거랑 같아야 합니다..

    이넘의 기본에다가 이 파일에 대한 설명을 넣습니다. 그냥 이건 설명이거든요.
    이건 언제 쓰이냐면 탐색기에 보시면 종류에 어떤파일은 'bin 파일' <- 이건
    정해지지 않으면 나오거든요.. 그러고 이떤건 시스템 파일..텍스트 문서.
    뭐 이런식으로 되어 있죠? 이넘에 대한 설명을 넣는겁니다.

    이건 이제 이 확장자의 아이콘을 정해주는겁니다..
    좀전에 만드셧던 거 밑에 값이 아닌 키를 하나더만듭니다. DefaultIcon이라고요 이건 정해져 있는거거든요..
    그리고 이넘의 기본값에 다가 아이콘을 정해주는데.. 보통은 그넘이 실행될
    실행파일의 아이콘을 쓰겠죠. 아니면 아이콘파일을 적어줘도 되고요. 물론
    풀패스로 넣어주셔야 합니다... myApp.exe <- 요게 실행파일 명이고 풀패스로입력해야 됩니다. ',1' <-- 요넘은 아이콘이 실행파일에 여러개 있을수잇으니그넘의 위치 입니다. 첫번째 두번째 세번째.. 리소스에서 여러개의 아이콘을
    만들어서 하시면 편하겠죠? 그리고 보기도 좋고...



    이제 다왔네요...
    마지막으로 이제 실제로 이넘이 어느실행파일을 실행시킬지를 알아야 겠죠.

    만드신 클래스 밑에... 그러니까 아까 만드셧던 DefaultIcon과 같은 위치에
    Shell 그밑에 open 밑에 command 까지 만듭니다.
    그리고 Shell 의 기본값으로는 open 을 넣어주시구요..

    Command 밑에 프로그램의 풀패스랑 뒤에는 %1 이라고 넣습니다..
    %1 은 사용자가 더블클릭한 파일의 풀패스가 입력되요..

    그러니깐 프로그램에서는 해당값을 파라메터로 받는거죠...

    이제 끝입니다.

    이제 해당확장자를 클릭하면 님께서 만드신 프로그램이 실행될껍니다.

    처리는 파라메터로 받아서 그 파일을 오픈하시면 되겠죠?

    음. 쉽게 할려다 보니 글이 무지 길어졌네요...  답변 길게하면 보기 않좋던데..
    그럼.. 즐거운시간 되세요.

    - 하얀까마귀 -



    • 이현철
      2002.06.18 20:55
      부서코드가 어짜피 db 에 있다면, 부서명을 콤보박스에 넣었던 식으로 똑같이 넣으면 되지 않을까여? ...
    • 하얀까마귀
      2002.06.18 19:32
      안녕하세요 하얀까마귀 입니다. 예전에 디비를 하다보면 님의 말씀처럼 코드를 쓰기 때문에 그런경우가 ...
    • 블루스알림☞
      2002.06.18 18:47
      좀 꽁수인데요.. deptcode가 크기가 같다면 부서코드와 부서명을 같이 불러서 Combobo2 에 집어넣고 ...
    • 하기
      2002.06.18 19:12
         With query3 do begin     query3.sql.clear;    &nbs...
    • 곰다방~미스김
      2002.06.18 22:48
      부서명을 선택했을 경우 해당 부서코드값을 가져오는 문제인가요? 그렇다면 DBLookUpComboBox를 사용하세...
    • 최우영
      2002.06.19 00:36
      두개의 콤보박스를 사용하는 방법도 고맙습니다. 그런데 결국은 DBLOOKUPCOMBOBOX로 했습다.. 그럼 다들 ...
    • 김승태
    • 2002.06.18 18:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이현철
      2002.06.18 22:58
      아래와 같이 API를 써보세요.. 폼을 항상 맨 위에 위치하기(Stay On Top) with MyForm do SetWindowP...
    • 신복호
    • 2002.06.18 11:05
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 블루스알림☞
      2002.06.18 18:43
      unit Unit1; interface uses   Windows, Messages, SysUtils, Classes, Graphics, Co...
    • 박상윤
      2002.06.18 13:59
      showModal을 지원을 못한다는 이야기지여... 제가 보기에는  앞의 글자를 자못 쓰셨거나 ...
    • 델.초
    • 2002.06.18 09:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.18 19:37
      안녕하세요. 최용일입니다. 레지스트리에 제대로 등록이 안되었네요... HKEY_CLASS_ROOT에 .를 포함...
    • 하얀까마귀
      2002.06.18 19:59
      안녕하세요 하얀까마귀 입니다. 음.. 소스내용을 제대로 이해를 못하신것 같네요... 위에 최용일님 ...
    • 조건일
      2002.06.18 10:14
      저의경우는 이런 경우 Application.ProcessMessage; 라는 함수를 프로그램 실행시나 이런 경우가 발생되는 ...
    • 최용일
      2002.06.18 19:19
      안녕하세요. 최용일입니다. 매크로군요... 그냥 함수로 만들어 쓰시면 될것같네요... function GetYe...
    • 신현빈
      2002.06.18 20:35
      최용일님 정말 감사드립니다~~ 저희 델코인들의 횃불~ ^^;
    • 호롱불
    • 2002.06.18 03:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정종구
      2002.06.20 02:08
    • 하얀까마귀
      2002.06.18 20:42
      안녕하세요 하얀까마귀 입니다. 음. 님이 말씀하신건 그냥 이름으로 찾으면 되겠네요... findCompone...
    • 정종필
      2002.06.18 03:37
      많은 label 중에 일부분만 보이게 하는 방법은 여러가지가 있겠죠.. 1. Panel 을 이용하는 방법  ...
    • 어린왕자A
      2002.07.09 20:36
      웹브라우저Dll을 사용하는 방법이 있습니다. 팁 어디엔가 있는 거 같습니다. 벌써 찾으셨겠죠? ㅋㅋ
    • 이현철
      2002.06.28 20:45
      가장 확실하고 간단한 방법은 프로그램 내부에서 유명 사이트에 ping 을 해보는 것입니다. empas.co.kr...
    • 김문식
    • 2002.06.18 02:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2002.06.18 04:12
      -   Update 수행시 update 테이블명      set 필드명 = null where ...
    • 박경록
    • 2002.06.18 02:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김문식
      2002.06.22 20:23
      #13을 <br>로 replace 해보세요.
    • 머슴
      2002.06.18 02:14
      야후정보통신사전에서 보면 체크섬은 수신자가 같은 수의 비트가 도착했는지를 확인 할 수 있도록 전...
    • 김문식
      2002.06.18 02:08
      어디서 보신 건가요. 체크섬은 일반적으로 통신을 할 경우에 많이 쓰입니다. 다운받은 파일이 정상적으로...
    • 하기
      2002.06.18 00:44
      참고가 될지 모르겠군요...  Group Band 를 쓰신다면 Group Band의 Expression을 참고 하세요.....
    • 김대훈
      2002.06.18 00:33
      파라독스는 잘모르는데..   MS-SQL의경우 날짜필드를 char(10) 잡구  SQL에서 그냥...
    • 버섯
    • 2002.06.17 22:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김수경
      2002.06.18 02:11
      선언된 Unit 명이나 Class명 또는 Object명 뒤에 지정해 주면 되는 걸로 알고 있는데.... 맞는지 모...
    • 김수경
      2002.06.18 02:15
      컴퍼넌트는 모르겠구여~ Windows API중 HANDLE CreateFile(     LPCTSTR lpFi...
    • 박준열
      2002.06.17 21:59
      광배님의 말씀대로   if DG_BrwBom.Fields[0].AsString = 'ENGDIC' then    ...
    • 홍성락
      2002.06.17 21:53
      hsr//////////////////////////////////////////////////////// DrawDataCell이벤트를 사용하셔도 됩니...
    • 박준열
      2002.06.17 22:02
      Source그대로 사용할수 있어서 넘 감사합니다.
    • 최광배
      2002.06.17 21:50
      DBGRID의 DBGrid1DrawColumnCell 이벤에 아래와 같이 작성하세요..   if 분류코드='ENGDIC' the...
    • 박준열
      2002.06.17 21:35
      1. Form에 Database 콤포넌트를 지정하고요 2. Database 콤포넌트의 마우스 오른쪽버튼의 팝업창에서 &...
    • 머슴
      2002.06.17 21:27
      TDatabase에서 TTable로 연결되게 하세요.. (트랜잭션관리등 이방법이 좋습니다..) Database 컴퍼넌...
    • 변선희
      2002.06.18 19:14
      ㅋㅋ 답변해주신 분들.. 감사합니다~ 이제 안나오네요...  아~ 기뿌당. 근데 꼭 Database를 ...
    • 김문식
      2002.06.17 21:20
      TDatabase 콤포넌트를 쓰시고 loginPrompt 프로퍼티를 false로 설정하세요.