This post has 6 Replies | 0 Followers

Top 25 Contributor
Posts 37
Mrkean Posted: 09-18-2009 10:21 PM

Giới thiệu về Libraries

Yochay Kiriaty and Alon Fliess

Thông tin người dịch :

+ Họ tên : Đỗ Văn Hiệp

+ Địa chỉ : Lớp K52A-Hóa học. Trường Đại học khoa học tự nhiên – ĐHQGHN

19 Lê Thánh Tông, Hoàn Kiếm, Hà Nội

+ Điện thoại : 0973 616 852

+ Email : dovanhiep@hus.edu.vn

Bài báo này được dựa trên 1 phiên bản được phát hành trước đó của Windows 7. Thông tin chi tiết có thể thay đổi.

Nội dung :

Libraries có ý nghĩa gì cho người dùng trong Windows 7?

Libraries – những ứng dụng được biết tới

Sử dụng Common File Dialog

Chọn và sử dụng Libraries giống như Thư mục

Cấu trúc Model chương trình

Sử dụng cấu trúc Model chương trình

Sử dụng New IshellLibrary API

Libraries dưới dạng Hood

Thư viện hỗ trợ đầy đủ Model

Tóm lược

 Đây là bài đầu tiên trong một loạt các bài viết về Windows 7 tập trung vào sự trải nghiệmcủa người sử dụng mới cho các nhà phát triển có thể đề cập nhằm làm nổi bật ứng dụng của họ trên Windows 7. Ở bài viết này, từng phần một, tập trung vào một khái niệm lưu trữ mới trong Windows 7, được gọi là Libraries (Thư viện). Tải Windows 7 Release Candidate bây giờ để giúp bạn hiểu tối đa bài viết này.

Trước khi chúng tôi bắt đầu đi sâu vào Windows 7 Libraries API, chúng tôi cần phải hiểu rõ hơn là tại sao Libraries lại được giới thiệu trong Windows 7 và cách họ cải thiện sự trải nghiệm của người sử dụng để quản lý nội dung. Để hiểu rõ hơn về khái niệm Libraries trong Windows 7, chúng tôi cần phải nhìn lại quãng thời gian. Ở những phiên bản trước của Windows như Windows Vistôi và Windows XP, bao gồm những thư mục đặc biệt cho người sử dụng lưu trữ nội dung như My Documents. Windows XP sử dụng CSIDL ( list ID danh mục đặc biệt , không thay đổi) là 1 danh sách các giá trị cung cấp duy nhất một hệ thống độc lập cách để xác định những thư mục đặc biệt bởi các ứng dụng sử dụng thường xuyên nhưng có thể không trùng tên hoặc vị trí trên bất kỳ đâu của hệ thống.

Trong thời kỳ của Windows Vistôi, CSIDL phát triển thành một hệ thống lưu trữ mới được gọi là Known Folder Ids. Kể từ Windows Vistôi, các thư mục đặc biệt CSIDL được tham chiếu bởi một tập các giá trị GUID. Điều quan trọng cần lưu ý rằng hệ thống CSIDL vẫn còn hỗ trợ cả hai trong Windows Vistôi và Windows 7 cho khả năng tương thích ngược. Trong danh sách Know Folder Ids , bạn có thể tìm thấy thư mục FOLDERID_Documents. Thư mục này đại diện cho cả hai thư mục My Documents là một phần lưu trữ của người dùng và FOLDERID_Fonts như là một phần của hệ thống các thư mục đặc biệt.

Trong Windows 7, danh sách Know Folder Ids đã mở rộng để hỗ trợ Windows 7 Libraries. Bạn có thể tìm thấy ở đó GUIDS cũng như FOLDERID_DocumentsLibrary đại diện cho Document Library. Trong Windows Vistôi, những thư mục đặc biệt này được tự động liệt kê cho phép người dùng thực hiện nhanh hơn, hiệu quả hơn, tìm kiếm trên nội dung của họ. Tuy nhiên, Tuy nhiên, chúng tôi nhận thấy rằng rất nhiều người sử dụng lưu trữ các file tại nhiều nơi trên máy tính của họ, không chỉ trong thư mục "đặc biệt"mà còn trong các thư mục khác nhau như C: \ My Temp Folder, D: \ Birthday2008 \ pictures hoặc ngay cả lưu trữ từ xa. Lưu trữ các tập tin bên ngoài không gian lưu trữ của người sử dụng ảnh hưởng đến các chỉ mục, gây cản trở trải nghiệm tìm kiếm của người dùng.Chúng tôi thường thấy mình đang tìm kiếm một tập tin cụ thể mà chúng tôi đã làm việc chỉ một vài ngày trước, lãng quên nơi tôi đã lưu nó, và sau đó phát hiện ra rằng tìm kiếm không tìm thấy nó bởi vì tập tin này không bao giờ được tạo mục lục.

Với Windows 7, khái niệm về Libraries đã cố gắng giải quyết vấn đề của người dùng lưu trữ các nội dung trên tất cả máy tính của mình bằng cách cho phép họ có toàn quyền kiểm soát tài liệu của cấu trúc thư mục Libraries. Nói cách khác, trong Windows 7, người sử dụng có thể định nghĩa là các thư mục để bao gồm trong Documents Library . Trên thực tế, điều này là đúng cho bất kỳ Library ( thư viện) trong Windows 7. Chúng tôi có thể nói rằng Libraries được người dùng xác định các bộ sưu tập của thư mục trình bày hợp lý nội dung của người dùng. Bao gồm các thư mục trong Libraries, người sử dụng khẳng định Windows là nơi mà mình chứa những dữ liệu quan trọng. Hệ thống sẽ liệt kê các thư mục này, cho phép tìm kiếm nhanh hơn và khả năng sắp xếp phong phú hơn trong Windows Explorer dựa trên các thuộc tính của tập tin và siêu dữ liệu.

Hình 1

hiển thị các thư mục tích hợp nhiều thành một lần xem thư viện duy nhất và cho thấy việc tìm kiếm phong phú và then chốt của Windows Explorer trong Windows 7.

 

Libraries là một phần không thể tách rời của Windows Shell. Sự tích hợp này là rất quan trọng bởi vì nó cho phép người dùng duyệt các tập tin của họ trong cùng một cách giống như chúng nằm trong một thư mục, có nghĩa là không có hoạt động mới mà người dùng cần phải học. Click vào Documents Library của bạn chỉ đơn giản cho thấy tất cả các tài liệu trong một cách sắp xếp riêng biệt. Hơn nữa, do thực tế là Libraries được tích hợp vào trong Windows Shell, người dùng có thể thực hiện các hoạt động tìm kiếm và lọc các kết quả bằng cách sử dụng các thuộc tính và siêu dữ liệu chẳng hạn ngày hình ảnh đã được chụp, thể loại của bài hát, và tính chất của item . Nói cách khác, bằng cách sử dụng Libraries người dùng được sử dụng tập tin lưu trữ đó linh hoạt và được tạo mục lục.

Libraries – Nhận biết các ứng dụng

Chúng tôi muốn lưu ý rằng trong khi hầu hết các ứng dụng hoạt động tốt với Windows 7 Libraries, có một cơ hội để khai thác trong môi trường Windows 7 Libraries nhằm cung cấp cho người dùng những trải nghiệm phong phú hơn. Một thắc mắc có thể xảy ra nếu một ứng dụng không hỗ trợ Libraries. Hãy tưởng tượng một ứng dụng, như là một phần của các chức năng của nó, cần phải lưu một tập tin vào đĩa. Ứng dụng này sẽ nhắc người dùng với tùy chọn để chọn một vị trí cho tập tin đó được lưu. Người dùng có thể chọn Documents Library của mình để lưu trữ vì đây là nơi mà người dùng thường hay lui tới khi họ cần làm việc trên một tài liệu.

Tuy nhiên, nếu các ứng dụng không nhận ra rằng Documents Library không phải là một thư mục thường xuyên, ứng dụng sẽ cố gắng để lưu file trực tiếp vào Documents Library như thể nó chỉ là một thư mục trên đĩa. Điều này trình bày cho một vấn đề, kể từ bây giờ, như chúng tôi đã biết, Libraries là một địa điểm phi tập tin hệ thống và do đó không thể được coi là các thư mục thường xuyên. Ứng dụng này phải trở thành nhận thức là thực tế họ đang quan tâm tới Libraries. May mắn thay, Windows 7 bao gồm cập nhật Shell API, Libraries API, và cập nhật Common File Dialog cho phép các nhà phát triển sử dụng Libraries một cách đúng đắn.

1 Library – Những ứng dụng được biết đến nên bao gồm các cơ chế để xử lý tình huống mà người dùng vô tình thử để chọn Libraries như thể chúng là các thư mục để lưu các tập tin, hoặc vào một thư viện hoặc tải các nội dung của một thư viện. Hơn nữa, hầu hết các ứng dụng cho phép người dùng tương tác với hệ thống tập tin là một phần của sự trải nghiệm ứng dụng.Một ứng dụng nên cung cấp cho người dùng với các vị trí quen thuộc và được cung cấp bởi Windows 7 Libraries. Bằng cách bao gồm các thư mục trong một Library, người dùng chỉ định nơi dữ liệu quan trọng của họ được lưu giữ, cho chúng tôi biết đây là nội dung mà họ quan tâm. Cần đẩy mạnh ứng dụng các vị trí này bằng cách hỗ trợ Libraries trong ứng dụng của họ.

Đối với các nhà phát triển, có một số điểm tích hợp với Windows 7 có thể giúp các ứng dụng Libraries- nhận thức. Developers should review the following three integration points and select according to their needs. Các nhà phát triển nên cân nhắc ba điểm tích hợp sau và chọn theo nhu cầu của họ.

Điểm tích hợp cơ bản nhất là chỉ cần sử dụng Common File Dialog (CFD) để chọn file và thư mục, và lưu trực tiếp đến một Library.

Điểm tích hợp thứ hai cung cấp các ứng dụng tùy chọn nhằm nổi bật trên Windows 7 bằng cách cho phép các ứng dụng để chọn và sử dụng nội dung Libraries.

Điểm tích hợp cuối cùng cung cấp các tùy chọn tích hợp nâng cao hơn hỗ trợ các mô hình Libraries lập trình đầy đủ.

Sử dụng Common File Dialog

 

Thông tin tốt là Windows 7 Libraries là một công dân hạng nhất trong CFD, cho phép người dùng duyệt qua và tìm kiếm Libraries. Họ thậm chí có thể chọn một Library cụ thể như là một địa điểm để lưu ,đó không chỉ là một trong những thư mục từ trong Library, mà là Library của riêng của mình! Bởi vì Windows 7 Library lưu trữ - backed, người dùng có quyền lưu và sao chép các tập tin vào bất kỳ thư mục trong một Library. Mỗi Library đều có một vị trí mặc định lưu các tập tin khi người dùng sao chép và lưu các tập tin trực tiếp tới Library. Bằng cách mặc định, vị trí này sẽ là các thư mục được biết đến,bao gồm trong một Library mặc định, hoặc thư mục đầu tiên được gửi tới một Library tùy chỉnh.

Nhưng (luôn luôn có lời cảnh bảo này), nó rất khuyến khích sử dụng giao diện mới CFD đã được giới thiệu trong Windows Vistôi và không phải là phiên bản kế thừa của CFD! Điều rất quan trọng cần lưu ý là các API để sử dụng bản kế thừa CFD không thay đổi kể từ Windows Vistôi và Windows XP, vì lý do là khả năng tương thích của ứng dụng. Tuy nhiên, phiên bản kế thừa của CFD không trực tiếp hỗ trợ Libraries hoặc sự trải nghiệm của người dùng mới được cung cấp đầy đủ trong Windows 7. Hình 2 hiển thị các bản mới bên cạnh bản kế thừa CFD

 

Hình 2 : Cách nhìn mới và cũ của Hộp thoại Common File Dialog

Trong bản kế thừa CFD , thậm chí nếu Libraries được trình bày trong cửa sổ chuyển hướng bên phải, họ cần một click đúp để lưu vào một trong những thư mục bao gồm, thay vì chỉ Library của chính nó. Người sử dụng không thể tìm kiếm trực tiếp trong CFD hoặc trải nghiệm xử lý xem trước phong phú, và cũng không chọn nhiều file trên các thư mục, vì phiên bản kế thừa CFD không hỗ trợ quay lại nhiều file từ các vị trí thư mục khác nhau. Ngược lại, đây là một viễn cảnh mà một Windows 7 Library hỗ trợ.

Điều quan trọng là sử dụng các API thích hợp để hiển thị đúng các phiên bản của CFD. Khi nói đến hiển thị CFD sử dụng . NET, nhà phát triển có thể sử dụng System.Windows.Forms.FileDialog hoặc Microsoft.Win32.FileDialog namespace.Kể từ sau này sử dụng phiên bản kế thừa của CFD,. NET nhà phát triển nên luôn luôn sử dụng WinForms. namespace để hiển thị CFD mới .

 

Hình 3.

Chỉ ra một đoạn mã đó sẽ nhắc người dùng chọn một vị trí lưu bằng cách hiển thị các hộp thoại lưu tập tin thông thường, cho phép người dùng lựa chọn thư mục hoặc thư viện.

Copy Code

System.Windows.Forms.SaveFileDialog _fd = new System.Windows.Forms. SaveFileDialog();

_fd.Title = "Please choose a location to save your file";

_fd.FileName = "[Get Folder…]";

_fd.Filter = "Library|no.files";

if (_fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)

{

string dir_path = System.IO.Path.GetDirectoryName(_fd.FileName);

if (dir_path != null && dir_path.Length > 0)

{

lblResult.Content = dir_path;

}

}

Hình 3 SaveFileDialog File

Các nhà phát triển mã Native sử dụng họ mới của IFileDialog APInative: IFileDialog, IFileOpenDialog, IFileSaveDialog, IfileDialogCustomize. Những thay thế các bản kế thừa API từ trước đó phiên bản Windows: GetOpenFileName, GetSaveFileName.

 

Hình 4

Cho thấy cách sử dụng các họ mới của IFileDialog API native nhắc nhở người dùng lưu với một hộp thoại để lưu vào thư mục / thư viện.

Copy Code

*ppsi = NULL;

IFileSaveDialog *pfod;

hr = CoCreateInstôince(

CLSID_FileSaveDialog,

NULL,

CLSCTX_INPROC,

IID_PPV_ARGS(&pfod));

if (SUCCEEDED(hr))

{

hr = pfod->SetOptions(FOS_PICKFOLDERS);

if (SUCCEEDED(hr))

{

hr = pfod->Show(hWndParent);

if (SUCCEEDED(hr))

{

hr = pfod->GetResult(ppsi);

}

}

pfod->Release();

}

Hình 4 IFileDialog Native API

Shell API có nguồn gốc là COM-based. Trước khi sử dụng bất kỳ đối tượng COM chúng tôi cần phải khởi tạo đối tượng COM bằng cách gọi CoCreateInstôince. Sau khi khởi tạo biến * IFileSaveDialog pfod, chúng tôi thiết lập các tùy chọn hộp thoại để chọn thư mục bằng cách chọn FOS_PICKFOLDERS flag đến IFileOpenDialog.SetOptions (). Đoạn mã này cho mở hộp thoại để cho phép người dùng lựa chọn thư mục hơn là các tập tin và cho phép người dùng chọn một thư viện như là một vị trí lưu. Trong trường hợp chọn một Library, các CFD sau đó sẽ trở lại mặc định thư mục lưu các vị trí đó - là liên kết với các Library đã chọn.

Hình 3 hình 4 rất đơn giản và không giới thiệu các mã mới. Tuy nhiên, điều quan trọng là thúc đẩy sự thống nhất giữa các ứng dụng chạy trên Windows 7 và hỗ trợ của Windows 7 Libraries. Các CFD được thiết kế để cung cấp một sự trải nghiệm mới phù hợp với Windows Explorer, bao gồm cả Libraries. Tất cả những cải tiến trong Windows Explorer 7 đã được chuyển sang các CFD. Trong hầu hết trường hợp, nó là cách lý tưởng cho người sử dụng để trình duyệt và tương tác với Libraries từ bên trong các ứng dụng.

Chọn và dùng Libraries giống như thư mục

Hãy tưởng tượng một trường hợp một ứng dụng trình chiếu hình ảnh đó cho người dùng. Bằng cách sử dụng Libraries, về bản chất người sử dụng nói hệ thống hình ảnh quan trọng của mình được lưu trữ trong Picture Library. Các ứng dụng có thể là điểm trực tiếp tới Picture Library và hiển thị các bộ sưu tập toàn bộ hình ảnh cho người dùng. Hơn nữa, từ điểm nhìn của các nhà phát triển, sử dụng hệ thống Library có thể loại bỏ sự cần thiết để duy trì một tập tin cấu hình riêng biệt, hoặc cơ sở dữ liệu hình ảnh, ví dụ, kể từ khi các nhà phát triển có thể dựa vào hệ thống Libraries. Trước khi chúng tôi đi sâu nghiên cứu các Shell Libraries programming API , chúng tôi cần phải hiểu rõ một số khái niệm liên quan đến Shell Programming Model.

Shell Programming Model

Một mục Shell (IShellItem), thường được gọi là một mục, phổ biến của các giao diện Shell và mô hình lập trình của nó. . Ví dụ, một số phương pháp được sử dụng cho giao diện CFDs kiểm soát việc sử dụng Shell items để đề cập đến các thư mục thay vì đường dẫn tập tin hệ thống. Điều này là quan trọng bởi vì các CFD có thể giao tiếp thông tin về cả hai thư mục hệ thống tập tin và thư mục ảo khác mà bạn tìm thấy trong Shell, chẳng hạn như Control Panel hay các thư mục máy tính.

Other important Shell COM interfaces are: Những giao diện quan trọng khác của Shell COM là :

IshellLink giao diện đại diện cho một liên kết, thường là vào một tập tin, thư mục, hoặc một tập tin thực thi

Sử dụng IShellFolder bạn có thể xem xét kỹ lưỡng các nội dung của một thư mục, lấy tên hiển thị của một mục trong một thư mục, phân tích một tên hiển thị tương đối với thư mục, và có được một mục danh sách ID

Windows 7 giới thiệu một Shell API mới, được gọi là IShellLibrary, rằng bạn có thể truy vấn từ IShellItem để làm việc và hỗ trợ Library trong Windows 7.

Bây giờ chúng tôi đã xác định các thành phần khác nhau của , chúng tôi có thể xem như thế nào Thư viện phù hợp với mô hình này.Kể từ Thư viện không phải là địa điểm tập tin hệ thống, bạn không thể sử dụng các API hệ thống tập tin cụ thể như FindFirstFile. Thay vào đó, bạn có hai lựa chọn chính để tiêu thụ nội dung của một thư viện.

Sử dụng Shell Programming Model

Bạn có thể sử dụng giao diện IShellItem và IShellFolder và một số chức năng giúp đỡ để liệt kê các nội dung của Libraries, cũng giống như khi chúng là các thư mực thường xuyên. Điều này có nghĩa là các ứng dụng có thể sử dụng nội dung của một Library mà không cần sử dụng Library API mới và với sự thay đổi rất ít để codebase tồn tại của chúng.

Hình 5 cho thấy cách sử dụng giao diện IShellFolder để liệt kê toàn bộ nội dung của Picture Library.

IShellItem *psi;

HRESULT hr = SHGetKnownFolderItem(FOLDERID_PicturesLibrary, KF_FLAG_CREATE, NULL, IID_PPV_ARGS(&psi));

if(SUCCEEDED(hr))

{

IShellFolder *psf;

hr = psi->BindToHandler(NULL, BHID_SFObject | , IID_PPV_ARGS(&psf));

if(SUCCEEDED(hr))

{

IEnumIDList *penumIDList;

psf->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS , IID_PPV_ARGS(&penumIDList));

//use penumIDList to enumerate the content of the folder

}

Tại đây bạn có thể thấy rằng bằng cách sử dụng chức năng helper SHGetKnownFolderItem chúng tôi có thể lấy vị trí chính xác của Library bằng cách thực hiện FOLDERID_PicturesLibrary. Đây là một GUID đại diện cho các thư mục được biết đến, mà trong trường hợp của chúng tôi là Picture Library. Một lệnh thành công sẽ điền vào các giao diện IShellItem * psi với các thông tin chính xác về Library, đại diện là một mục Shell. Phần còn lại của mã này là tiêu chuẩn Shell programming, nơi mà chúng tôi sử dụng BindToHandler để ràng buộc mục Shell trước đây có được vào một thư mục Shell (casting). Tiếp theo, chúng tôi liệt kê thông qua các mục khác nhau trong thư mục Shell, mà trong trường hợp của 1 Library có thể là các tập tin hoặc thư mục. SHGetKnownFolderItem là một chức năng Shell Helper và là một phần của một nhóm lớn hơn chức năng helper có thể tìm thấy trong tập tin tiêu đề shlobj.h trong Windows 7 RC SDK. Nó nói rằng các Shell folder mà chúng tôi muốn quay lại tất cả các file và thư mục trong Library. Chúng tôi có thể thực hiện SHCONTF_NAVIGATION_ENUM để có được những vị trí Library thay vì nội dung Library.

Sử dụng API IShellLibrary mới

Bạn có thể đạt được các chức năng tương tự như trong hình 5 bằng cách sử dụng Windows 7 IShellLibrary API, như trong hình 6.

Hình 6 IShellLibrary APIIShellLibrary API

Copy Code

IShellLibrary *pslLibrary;

HRESULT hr = SHLoadLibraryFromKnownFolder(FOLDERID_PicturesLibrary, STGM_READ, IID_PPV_ARGS(&pslLibrary));

if(SUCCEEDED(hr))

{

IShellItemArray *psiaFolders;

hr = pslLibrary->GetFolders(LFF_STORAGEITEMS, IID_PPV_ARGS(&psiaFolders));

IEnumShellItems *penumShellItems;

psiaFolders->EnumItems(&penumShellItems);

//work with penumShellItem to enumerate the items in the library

}

Tại đây bạn có thể thấy rằng chúng tôi sử dụng một chức năng helper, SHLoadLibraryFromKnownFolder, để tạo ra các đối tượng IShellLibrary.Từ đối tượng này chúng tôi có thể gọi phương thức GetFolders để trở về một IShellitemArray. Sự trở lại này được sử dụng sau này để có được một liệt kê để thông qua toàn bộ nội dung của Library.

Trong ví dụ cuối cùng, chúng tôi sử dụng chức năng helper, SHLoadLibraryFromKnowFolder. Như đã đề cập ở trên, chức năng này helper, và những thứ khác liên quan đến Windows 7 Libraries , có thể được tìm thấy trong các tập tin tiêu đề shlobj.h từ Windows 7 RC SDK. Dưới đây là danh sách các chức năng thư viện helper quan trọng:

  • SHAddFolderPathToLibrary (thêm một thư mục tới Library)
  • SHCreateLibrary (tạo ra một đối tượng IShellLibrary)
  • SHLoadLibraryFromItem (creates and loads an IShellLibrary object from a specified library definition file) SHLoadLibraryFromItem (tạo ra và tải một đối tượng IShellLibrary từ một Library được đinh rõ file).
  • SHLoadLibraryFromKnownFolder (tạo ra và tải một đối tượng IShellLibrary cho một KNOWNFOLDERID chỉ định)
  • SHLoadLibraryFromParsingName (tạo ra và tải một đối tượng IShellLibrary cho một Patch nào đó)
  • SHRemoveFolderPathFromLibrary (loại bỏ một thư mục từ Library)
  • SHResolveFolderPathInLibrary (nỗ lực để giải quyết các địa điểm mục tiêu của một thư mục Library đã được di chuyển hoặc đổi tên)
  • SHSaveLibraryInFolderPath (lưu một đối tượng IShellLibrary vào đĩa)

Hãy xem lại đoạn mã sau (Hình 7) - sử dụng một vài trong số các chức năng helper này để tạo ra một thư viện mới, kết hợp với một thư mục với Library đó, và "lưu" Library trong Thư mục Libraries.

Hình 7 IShellLibrary Sử dụng SHCreateLibrary Helper Function

Copy Code

IShellLibrary *pIShelLibrary;

HRESULT hr = SHCreateLibrary(IID_PPV_ARGS(&pIShelLibrary));

if (SUCCEEDED(hr))

 

{

 

IShellItem *pIShellItem;

 

SHAddFolderPathToLibrary(pIShelLibrary, L"C:\\Users\\Public\\Documents");

 

hr = pIShelLibrary->SaveInKnownFolder(FOLDERID_Libraries, L"My New Library", LSF_MAKEUNIQUENAME,

 

&pIShellItem);

 

pIShellItem->Release();

 

pIShelLibrary->Release();

 

}

Tại đây bạn có thể thấy rằng chúng tôi đang tạo một IShellLibrary mới đối tượng sử dụng chức năng helper SHCreateLibrary. NTiếp đó chúng tôi thêm các thư mục tài liệu công cộng tới đối tượng Library. Sau đó, chúng tôi lưu các Library mới trong thư mục Libraries, với phần còn lại của thư viện, gắn nó cái tên My New Library.

Trong hình 7, chúng tôi sử dụng phương pháp SaveInKnownFolder của giao diện IShellLibrary để lưu các thư viện mới, chúng tôi chỉ cần tạo ra. Hầu hết các phương pháp trong giao diện IShellLibrary được tự giải thích. Tuy nhiên, hãy xem xét một số lưu ý của chúng tôi:

Phương pháp Cam kết : cam kết thay đổi Library đến một tập tin Library hiện có. Điều này có nghĩa là bất cứ khi nào bạn lập trình thay đổi một Library, bạn cần phải gọi các cam kết phương pháp để lưu các thay đổi.

Phương pháp SetIcon :Lấy một mã nguồn DLL tên và chỉ số Icon để đặt Library icon.

SetFolderType nhận được một GUID được biết đến là thư mục kiểu mẫu giống một param đầu vào. GUID này quy định các loại hình Library, có thể là một trong những điều sau đây: Generic, ảnh, music, video, và các văn bản. Thiết lập thư mục kiểu mẫu thay đổi cách xem của Windows Explorer của Library và cho phép tìm kiếm và lựa chọn cách xem các loại Library một cách rõ ràng.

Library Libraries dưới dạng Hood

Như trong hình 7, mã này tạo một tập tin Library mới trong thư mục Libraries . Một Library trong Windows 7 được lưu giữ như là một tập tin XML được định nghĩa rằng có một phần mở rộng tập tin của library-ms. Tên tập tin là tên thực tế của Library. Ví dụ, Documents Library đặc trưng bởi một tệp tin XML được gọi là Documents.library-ms. Library mô tả được lưu trên đĩa trong %AppData% \ Microsoft \ Windows \ Libraries folder (còn gọi là FOLDERID_Libraries).

Hãy hiểu rõ trong Documents Library định nghĩa các tập tin giản đồ. Cấu trúc XML là tự giải thích, nhưng hãy giải thích một số yếu tố của nó. Như trong hình 8, ở đầu tập tin chúng tôi có thể tìm thấy các thông tin Library "header" :

Hình 8 Tài liệu Thư viện Definition File Schema

Copy Code

<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/ library">

<name>@shell32.dll,-34575</name>

<ownerSID>S-1-5-21-2127521184-1604012920-1887927527-4897363</ownerSID>

<version>4</version>

<isLibraryPinned>true</isLibraryPinned>

<iconReference>imageres.dll,-1002</iconReference>

<templateInfo>

<folderType>{7D49D726-3C21-4F05-99AA-FDC2C9474656}</folderType>

</templateInfo>

Các phần tử gốc XML là libraryDescription, chứa các phần tử con xác định Library, như sau:

  • <ownerSID> xác định Security ID của người dùng tạo ra Library này để cô lập Library và bảo vệ dữ liệu người sử dụng từ những người dùng khác.
  • <<isLibraryPinned> là một yếu tố Boolean - định nghĩa rằng nếu Library được pinned để khung bên trái chuyển hướng trong Windows Explorer và không tới các Taskbar.
  • <version> định nghĩa nội dung các phiên bản của Library này, trong đó phản ánh số lần các tập tin định nghĩa Library đã bị thay đổi.
  • <templateInfo> là một phần tử chứa tùy chọn cho phép các tác giả chỉ định kiểu thư mục (tài liệu, ảnh, video) để kiểm soát sự sắp xếp của xem trong Windows Explorer.
  • <iconReference> định nghĩa một biểu tượng sử dụng nguồn tài nguyên theo phong cách tiêu chuẩn Windows Shell. For example: Ví dụ:
  • <iconReference> C:\Windows\system32\imageres.dll,-65 </iconReference>. <iconReference> C: \ Windows \ system32 \ imageres.dll, -65 </ iconReference>.

Biểu tượng này trình bày các thư viện trong Windows Explorer.

Người sử dụng không thể thay đổi biểu tượng mặc định của Library thông qua Windows Explorer, cũng không thể chỉ định vào biểu tượng để một người sử dụng tùy biến mới-Library xác định. Tuy nhiên, điều này có thể lập trình được thực hiện bằng cách sử dụng API, mà chúng tôi sẽ giấu giếm trong tương lai những phần của loạt bài viết này.

Một phần chính của XML là danh sách các địa điểm mà các đặc trưng của Library, như trong đoạn mã sau

<searchConnectorDescriptionList>

<searchConnectorDescription publisher="Microsoft" product="Windows">

<description>@shell32.dll,-34577</description>

<isDefaultSaveLocation>true</isDefaultSaveLocation>

<isSupported>true</isSupported>

<simpleLocation>

<url>knownfolder:{FDD39AD0-238F-46AF-ADB4-6C85480369C7}</url>

<serialized>MBAAAE…. </serialized>

</simpleLocation>

</searchConnectorDescription>

  • <searchConnectorDescriptionList> chứa một hay nhiều kết nối tìm kiếm mà bản đồ đến các địa điểm vật lý có trong Library.
  • <searchConnectorDescription> chứa một yếu tố simpleLocation mô tả một trong những địa điểm có trong Library.
  • <url> defines a URL for this location. <url> định nghĩa một URL cho vị trí này. Chỉ với mục địch giúp con người dễ đọc - điều này không thể được sử dụng bởi các nhà phát triển vì nó có khả năng hết hạn.
  • <serialized> là đặc trưng thực sự của một vị trí trong một Library mà là một đối tượng ShellLink serialized.

Một lưu ý cuối cùng: Các ứng dụng không bao giờ cố gắng truy cập hoặc chỉnh sửa các tập tin mô tả Library. Thay vào đó, các ứng dụng luôn luôn sử dụng Shell programming model hay API IShellLibrary sử dụng và thao tác các nội dung Library.

Thư viện hỗ trợ đầy đủ Model

Một người sử dụng có thể thêm, xóa, và vị trí sắp xếp lại, cũng như thay đổi vị trí mặc định lưu thông qua giao diện quản lý Library. Điều này được thể hiện trong hình 9, trong đó có sẵn trực tiếp từ Windows Explorer.

ttp://i.msdn.microsoft.com/dd861346.fig09_L(en-us).gif

Hình 9 Thư viện Quản lý giao diện

Ngoài ra, các địa điểm của Library có thể được sửa đổi thông qua giao diện IShellLibrary. Bất kỳ sự thay đổi đến một cấu trúc thư viện được phản ánh trong các tập tin định nghĩa thư viện và vẫn trực tiếp nằm ở library-ms file. Bạn có thể được thông báo về các thay đổi như vậy bằng cách giám sát bất kỳ thay đổi vào Library .ms file.Giả sử ứng dụng của bạn được dựa trên nội dung của một Library, hoặc ứng dụng của bạn hiện tại đang hiển thị các nội dung của một Library cho.Bạn nhận được thông báo khi thay đổi nội dung của thư viện. Ứng dụng mà muốn được thông báo về thay đổi cho các tập tin định nghĩa Library có thể làm như vậy bằng cách sử dụng chức active SHChangeNotifyRegister Shell helper hoặc bằng cách sử dụng Managed FileSystemWatcher được tìm thấy trong System.IO namespace. Sử dụng các giao diện này là nằm ngoài phạm vi của bài viết này vì đây không phải là các API mới và tài liệu.

Một tùy chọn khác để xem xét là trường hợp trong đó nhu cầu ứng dụng của bạn để quản lý các thư mục cho người dùng, giống như thêm một thư mục mới của hình ảnh vào kho ảnh.Nếu bạn đang sử dụng Picture Library, bạn có thể sử dụng hộp thoại quản lý Library trong ứng dụng của bạn hiển thị cùng một hộp thoại quản lý mà Windows 7 cung cấp người dùng để quản lý các Library . Bằng cách đó, bạn giữ một cái nhìn nhất quán và hành vi mà người dùng tăng lên để đánh giá cao. Nếu bạn chọn sử dụng hộp thoại quản lý thư viện giao diện những thay đổi cho Library sẽ được thực hiện như khi bạn đã sửa đổi nội dung Library trực tiếp trong Windows Explorer. Hộp thoại này sẽ không trả lại bất kỳ thông tin tới ứng dụng của bạn. Trong trường hợp bạn đang hiển thị các nội dung của một Library đã cho, bạn sẽ cần phải đăng ký thông báo để nhận thông tin, như đã giải thích ở trên.

Tóm lược

Trong bài viết này, bạn đã được giới thiệu với các khái niệm và programming model của Libraries trong Windows 7. Bạn xem xét lại vai trò quan trọng là thư viện đóng vai trò như một phần của sự trải nghiệm của người dùng Windows 7. Sau đó, bạn đã đi tìm hiểu sâu vào Libraries , hiểu biết những gì đang có và khám phá hỗ trợ của kiến trúc nằm bên dưới. Sau đó, bạn thấy những cơ hội khác nhau mà các nhà phát triển có, để làm cho các ứng dụng của họ Library-nhận thức. Cuối cùng, bạn đã đi qua một tour du lịch ngắn của các mô hình có sẵn chương trình khác nhau và API.

Nguồn : MSDN Magazine

http://msdn.microsoft.com/en-us/magazine/dd861346.aspx

 

 

 

Top 10 Contributor
Female
Posts 62

tớ nghĩ là cậu có thể vào phần edit để xóa đi những câu tiếng anh.

cám ơn cậu nhé, bài này hay lém!!!

Top 10 Contributor
Male
Posts 194

Quỳnh có tư vấn gì để bài viết có highlight syntax color và có đủ cả ảnh minh họa không.


Anh thấy bài viết nào của Quỳnh cũng được trình bày cẩn thận.

Cheers

Top 10 Contributor
Female
Posts 62

Phần hình ảnh nếu đây là tài liệu trên web thì Mr Kean có thể copy luôn cả hình ảnh vào phần post của mình, tức là copy cả hình ảnh và chữ vào rùi hãy xóa để dịch. Còn nếu copy từ Word thì phải post hình ảnh đó lên web và copy lại đường dẫn.Vì khi paste từ word, đường link hình ảnh là từ máy của mình. Bạn hãy chọn nút chỉnh sửa hình để sửa lại đường dẫn là okie.

 

Thân,

Quỳnh

Top 25 Contributor
Posts 37

Cảm ơn bạn Quỳnh rất nhiều. Nhưng tại thời gian không cho phép và nhà không còn lắp mạng nữa nên tớ chưa post ảnh lên đây. Tớ sẽ chỉnh sửa sau.

Top 200 Contributor
Male
Posts 3

Xin dược góp ý một chút về cách trình bày:

Chỉ nên dùng một font chữ cho bài viết, và code nên dùng một font chữ khác.

Nên có tiêu đè cho từng đoạn văn, nhấn mạnh ý trung tâm để người đọc dễ nhìn và cảm giác bài viết sẽ không còn dài dòng.

Mặc dù trong bài viết có nêu một vài hình ảnh, nhưng mình không thấy hình nào hết. :D

Top 25 Contributor
Posts 37

Trương Quốc Hùng:

Xin dược góp ý một chút về cách trình bày:

Chỉ nên dùng một font chữ cho bài viết, và code nên dùng một font chữ khác.

Nên có tiêu đè cho từng đoạn văn, nhấn mạnh ý trung tâm để người đọc dễ nhìn và cảm giác bài viết sẽ không còn dài dòng.

Mặc dù trong bài viết có nêu một vài hình ảnh, nhưng mình không thấy hình nào hết. :D

Cảm ơn những góp ý hữu ích của bạn. Vì thời gian không cho phép mà lại không có mạng ở nhà nên tớ không thể edit bài của mình 1 cách nhanh chóng. Hiện nay tớ đã edit xong. Rất mong được nhận những lời góp ý hơn nữa.

 

Page 1 of 1 (7 items) | RSS