-
08-05-2011, 04:04 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cách lấy Icon của file dựa trên phần mở rộng của file ấy?
Mình đang làm 1 FTP client , nhưng vướng vấn đề về hiển thị icon trong listview
FTP server khi được yêu cầu bằng lệnh List sẽ trả về danh sách các file hiện có trong 1 thư mục nào đấy. dựa vào danh sách file này mình muốn lấy ra Icon của chương trình mở file đó trên máy tính hiện tại, giống như cửa sổ Local trong hình vẽ.
Hiện tại giải pháp của mình đang là dùng hàm AssocQueryString để lấy về chương trình được association với file type trong registry, và sau đó dùng SHGetFileInfo để lấy về Icon tương ứng và đưa vào list
Nói dài dòng là thế, tóm tắt lại là: mình muốn cái icon bên Remote giống như bên Local cho đẹp [IMG]images/smilies/applause.gif[/IMG] Mọi người xem hình đi kèm sẽ hiểu.
Với đa số các file là ổn nhưng với các file như EXE, BAT thì lại không thành công do tham số trả về là %1. hiện tại mình chưa biết làm thế nào, nhờ anh chị em giúp cho [IMG]images/smilies/biggrin.png[/IMG]
Qua tìm hiểu thì các icon này đều nằm trong shell32.dll, nhưng chẳng nhẽ cứ so sánh xâu rồi tìm và hiển thị, thủ công quá.
Bên local sử dụng đường dẫn file và hàm SHGetFileInfo nên không vấn đề gì
Đây là bài tập lớn của mình, mình phải nộp trong 2 tuần nữa nên rất mong mọi người hồi âm sớm. Cám ơn mọi người.
Mã:i = strList.ReverseFind(_T('.'));if (i!= -1){ cbSize = sizeof(szExePath); hr = AssocQueryString(ASSOCF_INIT_DEFAULTTOSTAR, ASSOCSTR_EXECUTABLE, m_strLog, _T( "open" ), szExePath, &cbSize );//lấy file Exe để mở định dạng file if( hr == S_OK) { if( SHGetFileInfo(szExePath, NULL, &shFileInfo, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON)) //lấy icon file exe kia pCurrDlg->m_RemoteCtrl.InsertItem(iRow, strList, shFileInfo.iIcon); //thêm vào list với icon else pCurrDlg->m_RemoteCtrl.InsertItem(iRow, strList);// thêm vào list và không icon } else pCurrDlg->m_RemoteCtrl.InsertItem(iRow, strList);// thêm vào list và không icon}else pCurrDlg->m_RemoteCtrl.InsertItem(iRow, strList);// thêm vào list và không icon
View more random threads:
- Chỉ lệnh #ifdef WINNT trên VC++
- Hook Nhận biết cửa sổ Active hay không ?
- Cách xác nhận quyền admin khi process thao tác tới hệ điều hành?
- sự tương tác giữa MFC và API
- Các trình gõ tiếng Việt làm nhiễu Keyboard hook, cách giải quyết ?
- Xin hướng dẫn cách nhấn một Button để gọi thực thi chương trình khác
- ý nghĩa của HDC trong c++ ?
- Hỏi hàm FindAtom để làm gì ?
- Check class của 1 soft
- Sử dụng #pragma với data_seg,comment trong lập trình DLL như thế nào?
-
08-05-2011, 04:30 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
cậu dùng hàm SHGetFileInfo với đường dẫn file PE để lấy Hincon của nó, rồi từ HICOn có thể display dễ dàng zồi
tớ cho cậu 1 ví dụ tớ đã viết hồi trước nè
Mã:int CLView::GetFileIconIndex(const TCHAR *FileName) { SHFILEINFO FI = {0}; SHGetFileInfo(FileName, FILE_ATTRIBUTE_NORMAL, &FI, sizeof(FI), SHGFI_SMALLICON | SHGFI_ICON ); int i = 0; if (FI.hIcon) i = this->m_ImgList.Add(FI.hIcon); DestroyIcon(FI.hIcon); return i; }
-
09-05-2011, 12:22 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mình thấy cách này khá ổn
http://www.codeproject.com/KB/cs/Get...peAndIcon.aspx
-
09-05-2011, 03:24 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Đang ở
- hà nội
- Bài viết
- 0
Cám ơn 2 bạn đã trả lời, cách của bạn Alex và gianghoplus mình đã đọc rồi , cơ bản dùng cách của Alex là ổn
hôm nay mình làm được rồi, đơn giản thôi:
- dùng GetTempPath để lấy được đường dẫn thư mục tạm
- Tạo 1 file tạm có phần mở rộng tương ứng
- dùng SHGetFileInfo
- Xóa file tạm
Làm thế này tiện hơn, đơn giản thế này mà hôm qua mình ko nghĩ ra, lại đi lập thread [IMG]images/smilies/biggrin.png[/IMG]
Cám ơn mọi người đã quan tâm[IMG]images/smilies/clap_grin.gif[/IMG]
Hiện nay trên thị trường xuất hiện rất nhiều loại thuốc bôi tăng kích thước dương vật được lăng xê là có khả năng làm tăng kích cỡ dương vật của cánh mày râu. Tuy nhiên không phải loại thuốc nào cũng...
Thuốc tăng kích thước chim có tác...