Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
Lnk파일의 실행파일명을 알아낼려면
윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을
얻어내는 방법을 알려주세요.
SHGetFileInfo 를 쓰는 것인지...
3
COMMENTS
김영대
•
1999.07.30 00:42
유시니 께서 말씀하시기를...
> 윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을
> 얻어내는 방법을 알려주세요.
> SHGetFileInfo 를 쓰는 것인지...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Registry, ShlObj,
{$IFDEF VER90}Ole2,{$ENDIF}{$IFDEF VER100}ComObj, ActiveX,{$ENDIF} CommCtrl;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PShellLinkInfoStruct = ^TShellLinkInfoStruct;
TShellLinkInfoStruct = record
FullPathAndNameOfLinkFile: array[0..MAX_PATH] of char;
FullPathAndNameOfFileToExecute: array[0..MAX_PATH] of char;
ParamStringsOfFileToExecute: array[0..MAX_PATH] of char;
FullPathAndNameOfWorkingDirectroy: array[0..MAX_PATH] of char;
Description: array[0..MAX_PATH] of char;
FullPathAndNameOfFileContiningIcon: array[0..MAX_PATH] of char;
IconIndex: integer;
HotKey: word;
ShowCommand: integer;
FindData: TWIN32FINDDATA;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct);
var
ShellLink: IShellLink;
PersistFile: IPersistFile;
{$IFDEF VER90}
WidePath: array[0..MAX_PATH] of WideChar;
{$ENDIF}
{$IFDEF VER100}
MyObject: IUnknown;
{$ENDIF}
begin
{$IFDEF VER90}
CoInitialize(nil);
if Failed(CoCreateInstance(CLSID_ShellLink,
nil,
CLSCTX_INPROC_SERVER,
{$IFDEF VER90}
IID_IShellLink,
{$ENDIF}
{$IFDEF VER100}
IID_IShellLinkA,
{$ENDIF}
ShellLink)) then
begin
CoUninitialize;
Exit;
end;
if Failed(ShellLink.QueryInterface(IID_IPersistFile,
PersistFile)) then
begin
ShellLink.Release;
CoUninitialize;
Exit;
end;
MultiByteToWideChar(CP_ACP,
0,
lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile,
-1,
WidePath,
MAX_PATH + 1);
if Failed(PersistFile.Load(WidePath, 0)) then
begin
PersistFile.Release;
ShellLink.Release;
CoUninitialize;
Exit;
end;
ShellLink.GetPath(
lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile),
lpShellLinkInfoStruct^.FindData,
SLGP_UNCPRIORITY);
ShellLink.GetDescription(
lpShellLinkInfoStruct^.Description,
sizeof(lpShellLinkInfoStruct^.Description));
ShellLink.GetArguments(
lpShellLinkInfoStruct^.ParamStringsOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));
ShellLink.GetWorkingDirectory(
lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));
ShellLink.GetIconLocation(
lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon),
lpShellLinkInfoStruct^.IconIndex);
ShellLink.GetHotKey(lpShellLinkInfoStruct^.HotKey);
ShellLink.GetShowCmd(lpShellLinkInfoStruct^.ShowCommand);
PersistFile.Release;
ShellLink.Release;
CoUninitialize;
{$ENDIF}
{$IFDEF VER100}
MyObject := CreateComObject(CLSID_ShellLink);
ShellLink := MyObject as IShellLink;
PersistFile := MyObject as IPersistFile;
PersistFile.Load(
PWChar(
WideString(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile)),
0);
ShellLink.GetPath(
lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile),
lpShellLinkInfoStruct^.FindData,
SLGP_UNCPRIORITY);
ShellLink.GetDescription(
lpShellLinkInfoStruct^.Description,
sizeof(lpShellLinkInfoStruct^.Description));
ShellLink.GetArguments(
lpShellLinkInfoStruct^.ParamStringsOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));
ShellLink.GetWorkingDirectory(
lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));
ShellLink.GetIconLocation(
lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon),
lpShellLinkInfoStruct^.IconIndex);
ShellLink.GetHotKey(lpShellLinkInfoStruct^.HotKey);
ShellLink.GetShowCmd(lpShellLinkInfoStruct^.ShowCommand);
{$ENDIF}
end;
procedure TForm1.Button1Click(Sender: TObject);
var
LinkInfo: TShellLinkInfoStruct;
SFolder: pItemIDList;
SpecialPath: array[0..MAX_PATH] of Char;
begin
// 바탕화면 폴더의 실제 디렉토리명을 구해온다
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, SFolder);
SHGetPathFromIDList(SFolder, SpecialPath);
StrCat(SpecialPath, '탐색기.lnk'); // *.lnk 파일을 지정
FillChar(LinkInfo, sizeof(LinkInfo), #0);
StrCopy(LinkInfo.FullPathAndNameOfLinkFile, SpecialPath);
GetLinkInfo(@LinkInfo);
Memo1.Clear;
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfLinkFile);
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfFileToExecute);
Memo1.Lines.Add(LinkInfo.ParamStringsOfFileToExecute);
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfWorkingDirectroy);
Memo1.Lines.Add(LinkInfo.Description);
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfFileContiningIcon);
Memo1.Lines.Add(IntToStr(LinkInfo.IconIndex));
Memo1.Lines.Add(IntToStr(LoByte(LinkInfo.HotKey)));
Memo1.Lines.Add(IntToStr(HiByte(LinkInfo.HotKey)));
Memo1.Lines.Add(IntToStr(LinkInfo.ShowCommand));
Memo1.Lines.Add(LinkInfo.FindData.cFileName);
Memo1.Lines.Add(LinkInfo.FindData.cAlternateFileName);
end;
end.
0
0
삭제
수정
댓글
유시니
•
1999.08.06 11:45
김영대 께서 말씀하시기를...
> 유시니 께서 말씀하시기를...
> > 윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을
> > 얻어내는 방법을 알려주세요.
> > SHGetFileInfo 를 쓰는 것인지...
>
... 너무길어서 생략...
델파이4 버전에서는 에러가 납니다.
그러나 델파이3 버전에서는 에러가 않나네요...
0
0
삭제
수정
댓글
유시니
•
1999.07.30 01:47
김영대 께서 말씀하시기를...
> 유시니 께서 말씀하시기를...
> > 윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을
> > 얻어내는 방법을 알려주세요.
> > SHGetFileInfo 를 쓰는 것인지...
>
답변 고맙습니다. 그런데 아래의 ========>>PersistFile: IPersistFile;
에서 컴파일시 에러가 발생합니다. 어떻게 해야하는지...
uses절에 뭔가를 추가해야 할것 같은데...
--------------------------------------------------------------------
implementation
{$R *.DFM}
procedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct);
var
ShellLink: IShellLink;
=========>> PersistFile: IPersistFile;
{$IFDEF VER90}
WidePath: array[0..MAX_PATH] of WideChar;
{$ENDIF}
{$IFDEF VER100}
MyObject: IUnknown;
{$ENDIF}
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
정원석
1999.07.30 02:11
0
COMMENTS
/
0
LIKES
TTCP 콤포넌트에 관하여
박종성
•
1999.07.30 01:29
1
COMMENTS
/
0
LIKES
현재 프린터의 용지를 어떻게 알지요?
아무
•
1999.07.30 04:14
박종성 께서 말씀하시기를... > 안녕하세요! > > 현재 설정되어 있는 기본 프린터의 용지를 어떻게 알 ...
이정호
•
1999.07.30 01:01
1
COMMENTS
/
0
LIKES
--긴급 --파라독스데이터베이스에 강제로 저장하는 방법좀....
김용철
•
1999.07.30 11:14
가략하게 제가 아는 방법만 소개를 드릴께요... 파라독스가 워낙에 소규모 DBMS이다 보니 문제점이 많더...
유시니
•
1999.07.30 00:19
3
COMMENTS
/
0
LIKES
Lnk파일의 실행파일명을 알아낼려면
윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을 얻어내는 방법을 알려주세요. SHGetFileInfo 를 쓰는 것인지...
김영대
•
1999.07.30 00:42
유시니 께서 말씀하시기를... > 윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을 > 얻어내는 ...
유시니
•
1999.08.06 11:45
김영대 께서 말씀하시기를... > 유시니 께서 말씀하시기를... > > 윈도우의 단축아이콘에서 아이콘이 가...
유시니
•
1999.07.30 01:47
김영대 께서 말씀하시기를... > 유시니 께서 말씀하시기를... > > 윈도우의 단축아이콘에서 아이콘이 가...
이용일
•
1999.07.29 23:42
1
COMMENTS
/
0
LIKES
리스트뷰에서 더블클릭했을때. 서브아이템의 텍스트 얻어오는거..
김영대
•
1999.07.30 00:19
이용일 께서 말씀하시기를... > 우선 소스를 보여드리죠.. > procedure TForm1.ListView1DblClick(Sender...
유시니
1999.07.29 23:32
0
COMMENTS
/
0
LIKES
[문]ImageList콘트롤에 200 이상의 아이콘을 넣으려면
진정은
•
1999.07.29 23:01
1
COMMENTS
/
0
LIKES
서로다른 프로그램과 메시지 통신
이정욱
•
1999.07.31 08:59
쩝...질문이 조금 애매 하네요. 그리고 BroadCast로 메세지를 보내는것보다는 특정 윈도우로 보내는것이 ...
이재용
•
1999.07.29 22:33
1
COMMENTS
/
0
LIKES
좀 도와주세요 ( telnet )
김영대
•
1999.07.29 22:56
이재용 께서 말씀하시기를... > 안녕하세요.. > 델파이 초보자입니다... > 제가 텔렛 프로그램을 함 해...
franco97
•
1999.07.29 22:03
2
COMMENTS
/
0
LIKES
PageControl에 색깔을 입힐려면..
채태숙
•
2006.05.31 00:32
아래처럼 해보세요 저도 찾다가 해보니까 되더라구요.. procedure TForm.FormCreate(Sender: TObje...
김영대
•
1999.07.29 23:12
franco97 께서 말씀하시기를... > 안녕하세요.. > PageControl에 색깔을 입힐려고 하는데.. > 혹시 아시...
sanghee
•
1999.07.29 21:34
1
COMMENTS
/
0
LIKES
컴파일이 되지 않아서요....
글쎄요
•
1999.07.29 21:51
sanghee 께서 말씀하시기를... > 컴파이을 하려고 버튼을 누르면 > Debugger Kernel BORDBK40.DLLis miss...
오용섭
•
1999.07.29 21:17
1
COMMENTS
/
0
LIKES
Database Desktop 에서
김영대
•
1999.07.29 23:19
오용섭 께서 말씀하시기를... > 안녕하세요 > 이번에 델파이 4.0과 퍼스널오라클 7.0을 연동해서 사용하...
이누리
1999.07.29 20:46
0
COMMENTS
/
0
LIKES
공통 Pas 에서 Object 에 Event Assign?
최현정
•
1999.07.29 20:34
2
COMMENTS
/
0
LIKES
기본프린터변경
김영대
•
1999.07.29 23:20
최현정 께서 말씀하시기를... > 기본프린터변경에 관한 질문입니다. > 레지스트리에서 컴퓨터에 설치된 ...
박흥태
•
1999.07.29 22:50
최현정 께서 말씀하시기를... > 기본프린터변경에 관한 질문입니다. > 레지스트리에서 컴퓨터에 설치된 ...
이현정
•
1999.07.29 20:27
3
COMMENTS
/
0
LIKES
가르쳐 주세요.
노력하는이
•
1999.07.29 21:35
이현정 께서 말씀하시기를... > 다음과 같이 프로그램을 작성하였습니다. > 그런데,자꾸만 컴파일시키면 ...
박흥태
•
1999.07.29 21:58
1
박흥태
•
1999.07.29 20:59
이현정 께서 말씀하시기를... > 다음과 같이 프로그램을 작성하였습니다. > 그런데,자꾸만 컴파일시키면 ...
황현동
1999.07.29 20:19
0
COMMENTS
/
0
LIKES
텍스트 박스에 대한질문..
황현동
1999.07.29 20:16
0
COMMENTS
/
0
LIKES
쿨바 만드는 방법좀 가르쳐 주세요
황현동
1999.07.29 20:14
0
COMMENTS
/
0
LIKES
델파이 서비스팩에관한..
황하성
•
1999.07.29 20:02
1
COMMENTS
/
0
LIKES
용지 크기에 맞춰 출력을 하려면 어떻게?
김영대
•
1999.07.29 23:00
황하성 께서 말씀하시기를... > > 현재 사용하고 있는 폼과 내용을 그대로 출력하고 싶답니다. > 그래...
하재희
1999.07.29 20:01
0
COMMENTS
/
0
LIKES
DBLookupCpmbo처럼 할수 있는 DBLookupEdit를 구합니다.
이진우
1999.07.29 19:45
0
COMMENTS
/
0
LIKES
퀵리포트 출력 때문에 그러는데요..(급함!!)
유시니
1999/07/30 00:19
Views
667
Likes
0
Comments
3
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을
> 얻어내는 방법을 알려주세요.
> SHGetFileInfo 를 쓰는 것인지...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Registry, ShlObj,
{$IFDEF VER90}Ole2,{$ENDIF}{$IFDEF VER100}ComObj, ActiveX,{$ENDIF} CommCtrl;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PShellLinkInfoStruct = ^TShellLinkInfoStruct;
TShellLinkInfoStruct = record
FullPathAndNameOfLinkFile: array[0..MAX_PATH] of char;
FullPathAndNameOfFileToExecute: array[0..MAX_PATH] of char;
ParamStringsOfFileToExecute: array[0..MAX_PATH] of char;
FullPathAndNameOfWorkingDirectroy: array[0..MAX_PATH] of char;
Description: array[0..MAX_PATH] of char;
FullPathAndNameOfFileContiningIcon: array[0..MAX_PATH] of char;
IconIndex: integer;
HotKey: word;
ShowCommand: integer;
FindData: TWIN32FINDDATA;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct);
var
ShellLink: IShellLink;
PersistFile: IPersistFile;
{$IFDEF VER90}
WidePath: array[0..MAX_PATH] of WideChar;
{$ENDIF}
{$IFDEF VER100}
MyObject: IUnknown;
{$ENDIF}
begin
{$IFDEF VER90}
CoInitialize(nil);
if Failed(CoCreateInstance(CLSID_ShellLink,
nil,
CLSCTX_INPROC_SERVER,
{$IFDEF VER90}
IID_IShellLink,
{$ENDIF}
{$IFDEF VER100}
IID_IShellLinkA,
{$ENDIF}
ShellLink)) then
begin
CoUninitialize;
Exit;
end;
if Failed(ShellLink.QueryInterface(IID_IPersistFile,
PersistFile)) then
begin
ShellLink.Release;
CoUninitialize;
Exit;
end;
MultiByteToWideChar(CP_ACP,
0,
lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile,
-1,
WidePath,
MAX_PATH + 1);
if Failed(PersistFile.Load(WidePath, 0)) then
begin
PersistFile.Release;
ShellLink.Release;
CoUninitialize;
Exit;
end;
ShellLink.GetPath(
lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile),
lpShellLinkInfoStruct^.FindData,
SLGP_UNCPRIORITY);
ShellLink.GetDescription(
lpShellLinkInfoStruct^.Description,
sizeof(lpShellLinkInfoStruct^.Description));
ShellLink.GetArguments(
lpShellLinkInfoStruct^.ParamStringsOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));
ShellLink.GetWorkingDirectory(
lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));
ShellLink.GetIconLocation(
lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon),
lpShellLinkInfoStruct^.IconIndex);
ShellLink.GetHotKey(lpShellLinkInfoStruct^.HotKey);
ShellLink.GetShowCmd(lpShellLinkInfoStruct^.ShowCommand);
PersistFile.Release;
ShellLink.Release;
CoUninitialize;
{$ENDIF}
{$IFDEF VER100}
MyObject := CreateComObject(CLSID_ShellLink);
ShellLink := MyObject as IShellLink;
PersistFile := MyObject as IPersistFile;
PersistFile.Load(
PWChar(
WideString(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile)),
0);
ShellLink.GetPath(
lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile),
lpShellLinkInfoStruct^.FindData,
SLGP_UNCPRIORITY);
ShellLink.GetDescription(
lpShellLinkInfoStruct^.Description,
sizeof(lpShellLinkInfoStruct^.Description));
ShellLink.GetArguments(
lpShellLinkInfoStruct^.ParamStringsOfFileToExecute,
sizeof(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));
ShellLink.GetWorkingDirectory(
lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));
ShellLink.GetIconLocation(
lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon,
sizeof(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon),
lpShellLinkInfoStruct^.IconIndex);
ShellLink.GetHotKey(lpShellLinkInfoStruct^.HotKey);
ShellLink.GetShowCmd(lpShellLinkInfoStruct^.ShowCommand);
{$ENDIF}
end;
procedure TForm1.Button1Click(Sender: TObject);
var
LinkInfo: TShellLinkInfoStruct;
SFolder: pItemIDList;
SpecialPath: array[0..MAX_PATH] of Char;
begin
// 바탕화면 폴더의 실제 디렉토리명을 구해온다
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, SFolder);
SHGetPathFromIDList(SFolder, SpecialPath);
StrCat(SpecialPath, '탐색기.lnk'); // *.lnk 파일을 지정
FillChar(LinkInfo, sizeof(LinkInfo), #0);
StrCopy(LinkInfo.FullPathAndNameOfLinkFile, SpecialPath);
GetLinkInfo(@LinkInfo);
Memo1.Clear;
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfLinkFile);
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfFileToExecute);
Memo1.Lines.Add(LinkInfo.ParamStringsOfFileToExecute);
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfWorkingDirectroy);
Memo1.Lines.Add(LinkInfo.Description);
Memo1.Lines.Add(LinkInfo.FullPathAndNameOfFileContiningIcon);
Memo1.Lines.Add(IntToStr(LinkInfo.IconIndex));
Memo1.Lines.Add(IntToStr(LoByte(LinkInfo.HotKey)));
Memo1.Lines.Add(IntToStr(HiByte(LinkInfo.HotKey)));
Memo1.Lines.Add(IntToStr(LinkInfo.ShowCommand));
Memo1.Lines.Add(LinkInfo.FindData.cFileName);
Memo1.Lines.Add(LinkInfo.FindData.cAlternateFileName);
end;
end.