임프랍니다..
오늘의 팁은.. 외부의 exe, dll과 같은 화일들에서 아이콘을 읽어오는 방법입니다.
오늘도 역시 제가 전에 하이텔 비파툴에 올렸던 답변을 다시 올립니다.
icl화일도 사실은 확장자만 바뀐 16비트 dll이므로 같은 방법으로 읽어올 수 있습니
다. 아래를 보시면 아시겠지만, API 함수 하나로 끝입니다. 근데 이 기법 하나만
가지고 아이콘해커라는 프로그램을 만들어서 계속 버전업을 하고 있는 분도 있더군
요. 후후... 그럼, 도움되시길 바랍니다.
제 목:[질문] dll에 있는 아이콘 읽는 방법...??
보낸이:옥창안 (BlueNOAH) 10/09 21:55 조회:18 1/1
──────────────────────────────────────
dll에 있는 아이콘을 로드 하려면 어떻게 해야하나요?
dll에 아이콘이 여럿 있는 경우 ImageList로 불러들이는가요? 아니면
한개씩 읽어들이는가요?
제 목:[답변] dll에 있는 아이콘 읽는 방법...??
보낸이:박지훈 (cbuilder) 10/10 13:19 조회:53 1/2
──────────────────────────────────────
임펠리테리입니다.
DLL같은 이진화일에서 아이콘을 빼내는것은 아주 간단합니다. DLL뿐만 아니라
어떤 화일이든 그 화일에 들어있는 아이콘이 리소스의 형태로 포함된 것이라면
간단히 빼낼수 있습니다. API 함수 ExtractIcon과 ~Ex 함수를 참고하시기 바랍
니다. 제 기억으론... 파라미터로서 아이콘이 들어있는 이진화일과 빼낼 아이콘의
인덱스를 넘겨주면 아이콘의 핸들, 즉 HICON을 리턴해줍니다.
그러니까... TIcon * 형으로 임시 변수를 하나 만들고, 생성시킨 후에 그 TIcon *
의 핸들에 ExtractIcon()에서 넘겨받은 HICON을 대입해주면 됩니다.
횡설수설한 거 같은데... 예를 보이자면...
TIcon *TempIcon = new TIcon;
TempIcon->Handle =ExtractIcon(HInstance, "c:\\WinNT\\regedit.exe", 0);
이처럼 하면 (정확한지는 모르겠습니다만 대충 이럴겁니다..) TemppIcon에
Acdsee의 첫번째(0번째) 아이콘이 넘어옵니다.
이 함수를 이용하면... 제기억으로는 지정한 화일에 들어있는 아이콘의 총 개수도
알아낼 수 있었던 것 같습니다.
그럼, 도움되시길 바라면서, 이만...
델파이에서라면...
var
TempIcon: TIcon;
begin
...
TempIcon := TIcon.Create;
TempIcon.Handle := ExtractIcon(HInstance, 'c:\WinNT\regedit.exe', 0);