April 16, 2013

SHExtractIconsW: Extract Executable Icon

Pertama kita deklarasi P/invoke, kita akan menggunakan fungsi "SHExtractIconsW" dari Shell32.dll, sebenarnya masih banyak fungsi Shell32.dll lain yang bisa kita gunakan untuk extract icon, sperti "ExtractIconEx" dan "LoadImage", tapi "ExtractIconEx" punya keterbatasan hanya mampu extract large icon (32x32) dan small icon (16x16), sedangkan "LoadImage" membutuhkan "hInstance" sebagai parameternya, itu akan menambah pekerjaan kita, "SHExtractIconsW" sendiri mampu mengextract berapapun ukuran icon, ini dia:
[DllImport("Shell32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern uint SHExtractIconsW(
    string pszFileName,
    int nIconIndex,
    int cxIcon,
    int cyIcon,
    IntPtr[] phIcon,
    uint[] pIconId,
    uint nIcons,
    uint flags
);
Untuk menggunakanya terlebih dahulu kita deklarasi beberapa variable,
uint nIcons = 1; // Jumlah icon yang ingin kita extract
uint iconsExtracted; // Jumlah icon yang berhasil di extract
int iSizeX = 128; // Ukuran tinggi icon
int iSizeY = 128; // Ukuran lebar icon
IntPtr[] Icons = new IntPtiSizeYr[nIcons]; // Array tempat tersimpannya icon yang kita extract
uint[] IconIDs = new uint[nIcons]; // Array ID icon
Lalu kita panggil fungsinya dengan cara:
iconsExtracted = SHExtractIconsW(strIconLocation, 0, iSizeX, iSizeY, Icons, IconIDs, nIcons, 0);
Sekarang kita baru punya handle dari icon kita, untuk benar-benar mendapatkan icon maka cukup melakukan
Icon myIcon = Icon.FromHandle(Icons[0]);
Selesai, tapi ingat, "SHExtractIconsW" hanya mampu mengextract icon dari file yang mengandung icon, seperti exe, dll, ico, icl, dan sebagainya.

No comments:

Post a Comment