2009-10-05 3 views
0

런타임 중에 선택한 파일의 아이콘을 추가해야합니다.그림 상자에 아이콘 삽입

내가 버튼을 제공하는 프로젝트를 (보도 대화 상자를 열 때 당신이 그것을 필요로 할 파일을 선택할 수 있도록)

사용자가 파일 (AutoCAD를, MS 오피스 등) 내가 읽어 내 프로젝트 필요를 선택하면 이 파일의 아이콘이 속하고 그림 상자에이 아이콘을 삽입하십시오.

같은 아이콘은 '아이콘'을 표시하는 데 사용 된 모든 아이콘을 찾을 수 있음을 말해줍니다. 레지스트리에서 읽을 수는 있지만 찾을 수있는 위치는 모르겠습니다. 또는 그가 확실한가요.

답변

0

PictureBox의 이미지를 설정하는 방법을 알고 있다고 가정하고 찾고있는 실제 아이콘입니다.

이 특정 프로그램에 대한 당신에게 DefaultIcon은의 경로를 제공합니다 : ProgramID기본적으로 열고있는 파일 형식입니다 HKEY_CLASSES_ROOT\<ProgramID>\DefaultIcon

... (예를 들어 : Excel.AddIn). 필요한 ProgramID에 대해 확실하지 않은 경우 먼저 확장명 (.doc, .xls 등)에 대한 항목을 찾아보고 HKEY_CLASSES_ROOT

2

SHGetFileInfo 함수를 사용할 수 있습니다

이 코드

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 


namespace WindowsFormsApplication6 
{ 

    public partial class Form1 : Form 
    { 

[StructLayout(LayoutKind.Sequential)] 
public struct SHFILEINFO 
{ 
    public IntPtr hIcon; 
    public IntPtr iIcon; 
    public uint dwAttributes; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] 
    public string szDisplayName; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] 
    public string szTypeName; 
}; 

class Win32 
{ 
    public const uint SHGFI_ICON = 0x100; 
    public const uint SHGFI_LARGEICON = 0x0;  
    public const uint SHGFI_SMALLICON = 0x1;  

    [DllImport("shell32.dll")] 
    public static extern IntPtr SHGetFileInfo(string pszPath, 
           uint dwFileAttributes, 
           ref SHFILEINFO psfi, 
           uint cbSizeFileInfo, 
           uint uFlags); 
} 

    private void button1_Click(object sender, EventArgs e) 
    { 
     string fName;  
     SHFILEINFO shinfo = new SHFILEINFO(); 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
     openFileDialog1.Filter = "All files (*.*)|*.*"; 
     openFileDialog1.FilterIndex = 2; 
     openFileDialog1.RestoreDirectory = true; 

     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
     fName  = openFileDialog1.FileName; 
     Win32.SHGetFileInfo(fName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON); 
     System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon); 
     pictureBox1.Image=(Image) myIcon.ToBitmap(); 
     } 

    } 


    public Form1() 
    { 
     InitializeComponent(); 
    } 
    } 
} 
에게 시도
관련 문제