Q&A

  • 단축 아이콘을 만드려면?
exe파일의 단축 아이콘을 생성해서 특정폴더(바탕화면등..)안에

넣어 두려고 하는데 어찌해야 하나요?

질문 답변란을 뒤져봐도 못 찾겠네요..



4  COMMENTS
  • Profile
    류종택 2000.03.16 02:04
    천리안 프로그래머 포럼에서 주어왔습니다..





    From 류..



    ---------



    unit Link;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ExtCtrls, Ole2, Oleauto, ShellAPI, ShlObj;



    type

    TForm1 = class(TForm)

    OpenDialog1: TOpenDialog;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Edit1: TEdit;

    Label1: TLabel;

    Label2: TLabel;



    Image1: TImage;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    private

    { Private declarations }

    procedure MakeLink(Location : Word);

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure CreateShellLink(sDesc,

    sLinkToFileName,

    sStartIn,

    sArguments,

    sIconPath,

    sLinkName : String;

    iIconIndex : Integer);

    var

    sl : IShellLink;

    ppf : IPersistFile;

    wcLinkName : Array[0..MAX_PATH] of WideChar;

    begin

    OleCheck(CoInitialize(nil));

    OleCheck(



    CoCreateInstance(CLSID_ShellLink, nil,

    CLSCTX_INPROC_SERVER, IID_IShellLink, sl)

    );



    OleCheck(sl.QueryInterface(IID_IPersistFile, ppf));



    OleCheck(sl.SetDescription(PChar(sDesc)));

    OleCheck(sl.SetPath(PChar(sLinkToFileName)));

    OleCheck(sl.SetWorkingDirectory(PChar(sStartIn)));

    OleCheck(sl.SetArguments(PChar(sArguments)));

    OleCheck(sl.SetIconLocation(PChar(sIconPath), iIconIndex));



    MultiByteToWideChar(CP_ACP, 0, PChar(sLinkName), -1,



    wcLinkName, MAX_PATH);



    OleCheck(ppf.Save(wcLinkName, true));



    CoUninitialize;

    end;



    procedure GetFolderPath(var sPath : String; iFolder : Integer);

    var

    iID : PItemIDList;

    szPath : PChar;

    begin

    szPath := StrAlloc(MAX_PATH);

    if SHGetSpecialFolderLocation(Application.Handle, iFolder, iID)

    = NOERROR then

    begin

    SHGetPathFromIDList(iID, szPath);

    sPath := szPath;



    end;

    StrDispose(szPath);

    end;



    function IconOfFile(const FileName : String; IconID : Integer) : THandle;

    // 파일의 아이콘을 얻어내는 함수.

    // IconID = SHGFI_LARGEICON : 32X32, SHGFI_SMALLICON : 16X16

    var

    SHFileInfo : TSHFileInfo;

    begin

    SHGetFileInfo(PChar(FileName), 0, SHFileInfo, SizeOf(SHFileInfo),

    IconID or SHGFI_ICON);

    Result := SHFileInfo.hIcon;

    end;



    procedure TForm1.MakeLink(Location : Word);



    var

    sDeskTopPath, sLinkPath : String;

    begin

    if OpenDialog1.FileName = '' then Exit;

    GetFolderPath(sDeskTopPath, Location);

    sLinkPath := sDeskTopPath + '' +

    ExtractFileName(OpenDialog1.FileName) + '.lnk';



    CreateShellLink('',

    OpenDialog1.FileName,

    ExtractFilePath(OpenDialog1.FileName),

    Edit1.Text,

    OpenDialog1.FileName,

    sLinkPath,



    0);

    end;





    procedure TForm1.Button1Click(Sender: TObject);

    begin

    if OpenDialog1.Execute then

    begin

    Label2.Caption := ExtractFileName(OpenDialog1.FileName);

    Image1.Picture.Icon.Handle

    := IconOfFile(OpenDialog1.FileName, SHGFI_LARGEICON);

    end

    else

    begin

    OpenDialog1.FileName := '';

    Label2.Caption := '';

    Image1.Picture.Assign(nil);



    end;

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    MakeLink(CSIDL_DESKTOP);

    end;



    procedure TForm1.Button3Click(Sender: TObject);

    begin

    MakeLink(CSIDL_PROGRAMS);

    end;



    procedure TForm1.Button4Click(Sender: TObject);

    begin

    MakeLink(CSIDL_STARTMENU);

    end;



    end.







    초보 wrote:

    > exe파일의 단축 아이콘을 생성해서 특정폴더(바탕화면등..)안에

    > 넣어 두려고 하는데 어찌해야 하나요?

    > 질문 답변란을 뒤져봐도 못 찾겠네요..

    >

  • Profile
    초보 2000.03.17 10:27
    류종택님 답변 감사드립니다만.

    답변 주신 소스를 보고 어떻게 해야할지 막막하네요 복사해서 실행해도

    라이브러리도 없고 또 델파이에서 기본으로 제공하지 않는 놈도 있는것 같은데..

    단축 아이콘 생성법과 그 단축 아이콘을 특정 폴더로 옮겨 놓는 두가지만 알면 되겠군요...

    보다 이해하기 쉽고 간단한 방법은 없는건가요?

    제가 워낙 몰라서 주석도 없는 소스를 이해하기란 한계가 있습니다...^^

    소스를 이해 못해서 죄송하군요..







    류종택 wrote:

    > 천리안 프로그래머 포럼에서 주어왔습니다..

    >

    >

    > From 류..

    >

    > ---------

    >

    > unit Link;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls, ExtCtrls, Ole2, Oleauto, ShellAPI, ShlObj;

    >

    > type

    > TForm1 = class(TForm)

    > OpenDialog1: TOpenDialog;

    > Button1: TButton;

    > Button2: TButton;

    > Button3: TButton;

    > Button4: TButton;

    > Edit1: TEdit;

    > Label1: TLabel;

    > Label2: TLabel;

    >

    > Image1: TImage;

    > procedure Button1Click(Sender: TObject);

    > procedure Button2Click(Sender: TObject);

    > procedure Button3Click(Sender: TObject);

    > procedure Button4Click(Sender: TObject);

    > private

    > { Private declarations }

    > procedure MakeLink(Location : Word);

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure CreateShellLink(sDesc,

    > sLinkToFileName,

    > sStartIn,

    > sArguments,

    > sIconPath,

    > sLinkName : String;

    > iIconIndex : Integer);

    > var

    > sl : IShellLink;

    > ppf : IPersistFile;

    > wcLinkName : Array[0..MAX_PATH] of WideChar;

    > begin

    > OleCheck(CoInitialize(nil));

    > OleCheck(

    >

    > CoCreateInstance(CLSID_ShellLink, nil,

    > CLSCTX_INPROC_SERVER, IID_IShellLink, sl)

    > );

    >

    > OleCheck(sl.QueryInterface(IID_IPersistFile, ppf));

    >

    > OleCheck(sl.SetDescription(PChar(sDesc)));

    > OleCheck(sl.SetPath(PChar(sLinkToFileName)));

    > OleCheck(sl.SetWorkingDirectory(PChar(sStartIn)));

    > OleCheck(sl.SetArguments(PChar(sArguments)));

    > OleCheck(sl.SetIconLocation(PChar(sIconPath), iIconIndex));

    >

    > MultiByteToWideChar(CP_ACP, 0, PChar(sLinkName), -1,

    >

    > wcLinkName, MAX_PATH);

    >

    > OleCheck(ppf.Save(wcLinkName, true));

    >

    > CoUninitialize;

    > end;

    >

    > procedure GetFolderPath(var sPath : String; iFolder : Integer);

    > var

    > iID : PItemIDList;

    > szPath : PChar;

    > begin

    > szPath := StrAlloc(MAX_PATH);

    > if SHGetSpecialFolderLocation(Application.Handle, iFolder, iID)

    > = NOERROR then

    > begin

    > SHGetPathFromIDList(iID, szPath);

    > sPath := szPath;

    >

    > end;

    > StrDispose(szPath);

    > end;

    >

    > function IconOfFile(const FileName : String; IconID : Integer) : THandle;

    > // 파일의 아이콘을 얻어내는 함수.

    > // IconID = SHGFI_LARGEICON : 32X32, SHGFI_SMALLICON : 16X16

    > var

    > SHFileInfo : TSHFileInfo;

    > begin

    > SHGetFileInfo(PChar(FileName), 0, SHFileInfo, SizeOf(SHFileInfo),

    > IconID or SHGFI_ICON);

    > Result := SHFileInfo.hIcon;

    > end;

    >

    > procedure TForm1.MakeLink(Location : Word);

    >

    > var

    > sDeskTopPath, sLinkPath : String;

    > begin

    > if OpenDialog1.FileName = '' then Exit;

    > GetFolderPath(sDeskTopPath, Location);

    > sLinkPath := sDeskTopPath + '' +

    > ExtractFileName(OpenDialog1.FileName) + '.lnk';

    >

    > CreateShellLink('',

    > OpenDialog1.FileName,

    > ExtractFilePath(OpenDialog1.FileName),

    > Edit1.Text,

    > OpenDialog1.FileName,

    > sLinkPath,

    >

    > 0);

    > end;

    >

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > if OpenDialog1.Execute then

    > begin

    > Label2.Caption := ExtractFileName(OpenDialog1.FileName);

    > Image1.Picture.Icon.Handle

    > := IconOfFile(OpenDialog1.FileName, SHGFI_LARGEICON);

    > end

    > else

    > begin

    > OpenDialog1.FileName := '';

    > Label2.Caption := '';

    > Image1.Picture.Assign(nil);

    >

    > end;

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > begin

    > MakeLink(CSIDL_DESKTOP);

    > end;

    >

    > procedure TForm1.Button3Click(Sender: TObject);

    > begin

    > MakeLink(CSIDL_PROGRAMS);

    > end;

    >

    > procedure TForm1.Button4Click(Sender: TObject);

    > begin

    > MakeLink(CSIDL_STARTMENU);

    > end;

    >

    > end.

    >

    >

    >

    > 초보 wrote:

    > > exe파일의 단축 아이콘을 생성해서 특정폴더(바탕화면등..)안에

    > > 넣어 두려고 하는데 어찌해야 하나요?

    > > 질문 답변란을 뒤져봐도 못 찾겠네요..

    > >

  • Profile
    모질이 2000.07.31 22:24
    바탕화면에 단축아이콘을 만들려면

    인스톨쉴드에서 간단하게 할수가 있거덜랑요.

    specify folders and icons에서

    조금의 조작만 하면 바탕화면(기타등등)에 단축아이콘을 만들수가 있습니다.





    초보 wrote:

    > 류종택님 답변 감사드립니다만.

    > 답변 주신 소스를 보고 어떻게 해야할지 막막하네요 복사해서 실행해도

    > 라이브러리도 없고 또 델파이에서 기본으로 제공하지 않는 놈도 있는것 같은데..

    > 단축 아이콘 생성법과 그 단축 아이콘을 특정 폴더로 옮겨 놓는 두가지만 알면 되겠군요...

    > 보다 이해하기 쉽고 간단한 방법은 없는건가요?

    > 제가 워낙 몰라서 주석도 없는 소스를 이해하기란 한계가 있습니다...^^

    > 소스를 이해 못해서 죄송하군요..

    >

    >

    >

    > 류종택 wrote:

    > > 천리안 프로그래머 포럼에서 주어왔습니다..

    > >

    > >

    > > From 류..

    > >

    > > ---------

    > >

    > > unit Link;

    > >

    > > interface

    > >

    > > uses

    > > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > > StdCtrls, ExtCtrls, Ole2, Oleauto, ShellAPI, ShlObj;

    > >

    > > type

    > > TForm1 = class(TForm)

    > > OpenDialog1: TOpenDialog;

    > > Button1: TButton;

    > > Button2: TButton;

    > > Button3: TButton;

    > > Button4: TButton;

    > > Edit1: TEdit;

    > > Label1: TLabel;

    > > Label2: TLabel;

    > >

    > > Image1: TImage;

    > > procedure Button1Click(Sender: TObject);

    > > procedure Button2Click(Sender: TObject);

    > > procedure Button3Click(Sender: TObject);

    > > procedure Button4Click(Sender: TObject);

    > > private

    > > { Private declarations }

    > > procedure MakeLink(Location : Word);

    > > public

    > > { Public declarations }

    > > end;

    > >

    > > var

    > > Form1: TForm1;

    > >

    > > implementation

    > >

    > > {$R *.DFM}

    > >

    > > procedure CreateShellLink(sDesc,

    > > sLinkToFileName,

    > > sStartIn,

    > > sArguments,

    > > sIconPath,

    > > sLinkName : String;

    > > iIconIndex : Integer);

    > > var

    > > sl : IShellLink;

    > > ppf : IPersistFile;

    > > wcLinkName : Array[0..MAX_PATH] of WideChar;

    > > begin

    > > OleCheck(CoInitialize(nil));

    > > OleCheck(

    > >

    > > CoCreateInstance(CLSID_ShellLink, nil,

    > > CLSCTX_INPROC_SERVER, IID_IShellLink, sl)

    > > );

    > >

    > > OleCheck(sl.QueryInterface(IID_IPersistFile, ppf));

    > >

    > > OleCheck(sl.SetDescription(PChar(sDesc)));

    > > OleCheck(sl.SetPath(PChar(sLinkToFileName)));

    > > OleCheck(sl.SetWorkingDirectory(PChar(sStartIn)));

    > > OleCheck(sl.SetArguments(PChar(sArguments)));

    > > OleCheck(sl.SetIconLocation(PChar(sIconPath), iIconIndex));

    > >

    > > MultiByteToWideChar(CP_ACP, 0, PChar(sLinkName), -1,

    > >

    > > wcLinkName, MAX_PATH);

    > >

    > > OleCheck(ppf.Save(wcLinkName, true));

    > >

    > > CoUninitialize;

    > > end;

    > >

    > > procedure GetFolderPath(var sPath : String; iFolder : Integer);

    > > var

    > > iID : PItemIDList;

    > > szPath : PChar;

    > > begin

    > > szPath := StrAlloc(MAX_PATH);

    > > if SHGetSpecialFolderLocation(Application.Handle, iFolder, iID)

    > > = NOERROR then

    > > begin

    > > SHGetPathFromIDList(iID, szPath);

    > > sPath := szPath;

    > >

    > > end;

    > > StrDispose(szPath);

    > > end;

    > >

    > > function IconOfFile(const FileName : String; IconID : Integer) : THandle;

    > > // 파일의 아이콘을 얻어내는 함수.

    > > // IconID = SHGFI_LARGEICON : 32X32, SHGFI_SMALLICON : 16X16

    > > var

    > > SHFileInfo : TSHFileInfo;

    > > begin

    > > SHGetFileInfo(PChar(FileName), 0, SHFileInfo, SizeOf(SHFileInfo),

    > > IconID or SHGFI_ICON);

    > > Result := SHFileInfo.hIcon;

    > > end;

    > >

    > > procedure TForm1.MakeLink(Location : Word);

    > >

    > > var

    > > sDeskTopPath, sLinkPath : String;

    > > begin

    > > if OpenDialog1.FileName = '' then Exit;

    > > GetFolderPath(sDeskTopPath, Location);

    > > sLinkPath := sDeskTopPath + '' +

    > > ExtractFileName(OpenDialog1.FileName) + '.lnk';

    > >

    > > CreateShellLink('',

    > > OpenDialog1.FileName,

    > > ExtractFilePath(OpenDialog1.FileName),

    > > Edit1.Text,

    > > OpenDialog1.FileName,

    > > sLinkPath,

    > >

    > > 0);

    > > end;

    > >

    > >

    > > procedure TForm1.Button1Click(Sender: TObject);

    > > begin

    > > if OpenDialog1.Execute then

    > > begin

    > > Label2.Caption := ExtractFileName(OpenDialog1.FileName);

    > > Image1.Picture.Icon.Handle

    > > := IconOfFile(OpenDialog1.FileName, SHGFI_LARGEICON);

    > > end

    > > else

    > > begin

    > > OpenDialog1.FileName := '';

    > > Label2.Caption := '';

    > > Image1.Picture.Assign(nil);

    > >

    > > end;

    > > end;

    > >

    > > procedure TForm1.Button2Click(Sender: TObject);

    > > begin

    > > MakeLink(CSIDL_DESKTOP);

    > > end;

    > >

    > > procedure TForm1.Button3Click(Sender: TObject);

    > > begin

    > > MakeLink(CSIDL_PROGRAMS);

    > > end;

    > >

    > > procedure TForm1.Button4Click(Sender: TObject);

    > > begin

    > > MakeLink(CSIDL_STARTMENU);

    > > end;

    > >

    > > end.

    > >

    > >

    > >

    > > 초보 wrote:

    > > > exe파일의 단축 아이콘을 생성해서 특정폴더(바탕화면등..)안에

    > > > 넣어 두려고 하는데 어찌해야 하나요?

    > > > 질문 답변란을 뒤져봐도 못 찾겠네요..

    > > >

  • Profile
    최용일 2000.03.16 14:49
    한델의 강좌란을 보세요...

    • 오종환
    • 2000.03.16 03:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.03.16 03:10
      오종환 wrote: > 저는 델파이를 막 접한 초보입니다 > > 제가 원하는것은 SpeedButton으로 기존의 메뉴...
    • 빡수홍
      2000.03.16 03:53
      J Wraw wrote: > MSSQL6.5를 쓰고있는데 DB connection시 UserId혹은 Password가 잘못입력시 > EDBEEngi...
    • 최용일
      2000.03.16 03:11
      메소드가 아니라 일반 프로시저나 펑션에서 호출하는 방법을 묻는 것입니까? 뭐 여러가지 방법이 있겠지만...
    • 강동길
    • 2000.03.16 02:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.16 02:11
      Calulated Field를 사용하세요.. Table을 더블클릭하시고 생긴 윈도우에서 오른쪽 마우스 클릭.. Add All...
    • 김진석
    • 2000.03.16 01:55
    • 2 COMMENTS
    • /
    • 0 LIKES
    • blueSky
      2000.03.16 02:51
      김진석 wrote: > 프로그램을 짜다 보니깐.... | 신 문| > ...
    • 조피디
      2000.03.16 02:00
      김진석 wrote: > 프로그램을 짜다 보니깐.... | 신 문| > ...
    • 초보
    • 2000.03.16 01:44
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.16 02:04
      천리안 프로그래머 포럼에서 주어왔습니다.. From 류.. --------- unit Link; interface ...
    • 초보
      2000.03.17 10:27
      류종택님 답변 감사드립니다만. 답변 주신 소스를 보고 어떻게 해야할지 막막하네요 복사해서 실행해도 ...
    • 모질이
      2000.07.31 22:24
      바탕화면에 단축아이콘을 만들려면 인스톨쉴드에서 간단하게 할수가 있거덜랑요. specify folders and ic...
    • 최용일
      2000.03.16 14:49
      한델의 강좌란을 보세요...
    • 하윤철
      2000.04.12 21:40
      답을 얻으셨나요? 꽤 늦은 답입니다만.... 변환 작업 후에 프로그램 종료시점까지 Excell 인스턴스종료로...
    • 최용일
      2000.03.16 01:28
      아마도 열기 전에 저장을 안하신것 같은데... 대강 코드를 보니까 프로그램을 종료할 때 만들어진 엑셀...
    • 한현정
      2000.03.16 02:08
      아래 소스는 컴포넌트의 소스입니다. 호출할 때는 아래와 같이 하구요 MsgBar1.ShowMessage('excel...
    • 최용일
      2000.03.16 05:01
      제가 김영대님의 TGridXLS컴포넌트를 써보지 못해서 제대로 답변을 못드리겠군요. 김영대님에게 메일을 보...
    • topsman
    • 2000.03.16 00:35
    • 2 COMMENTS
    • /
    • 0 LIKES
    • blueSky
      2000.03.16 01:17
      topsman wrote: > 현재 사용자가 사용하고 있는 OS가 어떤건지 알려면... > > 어떤 함수를 써서...정보...
    • 하얀까마귀
      2000.03.16 01:03
      안녕하세요 하얀까마귀 입니다. 그런 정보는 레지스트리에 있어요... HKEY_LOCAL_MACHINE SoftwareM...
    • 하얀까마귀
      2000.03.16 00:53
      안녕하세요 하얀까마귀 입니다. 이건 전에 제가 비슷한 내용을 올린것 같은데.... 어디 올렸지???? ...
    • 문영봉
    • 2000.03.15 23:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.16 00:08
      현재 위치에서 'f1'이라는 키를 오픈하는 것입니다.. 뒤에오는 불린은 해당 키가 없을 때 생성을 할 것인...
    • 최용일
      2000.03.16 00:03
      OpenKey는 레지스트리에 있는 키값을 열때 사용합니다. TRegistry서 값을 읽거나 쓰는 함수(TRegistry.Rea...
    • hjcho
    • 2000.03.15 23:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.15 23:54
      동적으로 링크하는 방법도 있습니다. LoadLibrary함수를 DLL을 적재하시면 됩니다. 성공적으로 적재되었...
    • 윤정선
      2000.03.17 01:25
      자세한 설명을 부탁드려도 되는지요. 저는 LoadLibrary와 FreeLibrary를 이용해서 해볼려고 했는데 안되...
    • 최용일
      2000.03.17 06:14
      안녕하세요. 최용일입니다. 먼저 헬프를 사용하는 방법부터 알려드리지요. GetProcAddress과 같은 Windo...
    • neocity
    • 2000.03.15 22:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 화랑
      2000.03.16 02:59
      neocity wrote: > 다중 채팅을 만들었는데. > 여러 채팅 프로그램처럼 여러개의 방을 만들려구 하는데 >...
    • 하얀까마귀
      2000.03.16 00:38
      안녕하세요 하얀까마귀 입니다. c하고는 문법이 조금 다르죠... c를 windows c++을 하셧는지는 모르...
    • 백록화
      2000.03.16 00:22
      yo~ ^^*^~ exit나 break 같은 제어문을 적절히 사용하시면 됩니다. exit는 그냥 중단하는것이고..... ...
    • 강인규
      2000.03.15 22:39
      우선 저는 C는 못합니다. 그점 염두하시고 보아주시기 바랍니다. return이 어떤 형태로 작업열로 복귀하...
    • blueSky
      2000.03.15 22:24
      이수정 wrote: > 다른데 자료실에서.. 컴포넌트 파일이라며.. > > .pas 파일 두개를 받았는데.. > ...