Điều này có vẻ giống như một câu hỏi phổ biến nhưng sau khi thực hiện một số tìm kiếm, tôi đã không thực sự có thể tìm thấy câu trả lời của mình. Có một bài báo trên đây này:Làm cách nào để viết phần mở rộng vỏ trong C++?
http://www.codeproject.com/KB/shell/shellextguide1.aspx
Nhưng đó là cho một phiên bản rất cũ của Visual Studio. Tôi đang sử dụng VS 2008, vì vậy các hướng dẫn và giao diện dường như không khớp với những gì tôi thấy.
Tôi muốn tạo tiện ích mở rộng vỏ đơn giản bằng cách sử dụng C++ tạo trình đơn ngữ cảnh cho các tệp có phần mở rộng .GZ. Khi nhấp chuột phải vào các tệp này, tôi sẽ có thể nhấp vào mục menu ngữ cảnh của mình và có một cuộc gọi lại trong mã để thực hiện một số thao tác trên tệp đó.
Các mục menu ngữ cảnh khác sẽ thực hiện những việc như hộp thoại không mod đẻ trứng để chấp nhận đầu vào của người dùng trước khi thực hiện một số thao tác.
Từ những gì tôi đã thấy, ATL được sử dụng cho điều này nhưng tôi chưa bao giờ sử dụng ATL, vì vậy tất cả các loại đối tượng và giao diện rất khó hiểu với tôi. Nó sẽ không được như vậy xấu nếu tôi đã có một hướng dẫn thích hợp hoặc tài liệu để đọc.
Có ai có thể giúp tôi không? Không phải là có một số loại hướng dẫn ra khỏi đó mà không phải là 10 tuổi?
Đây thực sự là một điều đặc biệt khó làm. Tôi đã phát triển một mục trình đơn ngữ cảnh khi người dùng nhấp chuột phải vào máy in. Mặc dù mã của tôi chỉ có 40 dòng hoặc hơn, có khoảng 1.000 dòng mã được tạo. Tôi ước tôi có thể hữu ích hơn nhưng tôi không thể chia sẻ bất kỳ mã nào tôi có. Như một mẹo, phần mở rộng shell của bạn phải nằm trong một DLL, và nó phải có GUID riêng của nó, và DLL cần phải được đăng ký với regsvr32. Bạn muốn thực hiện ** CẢ ** IContextMenu và giao diện COM IShellExtInit. Có một cách để có được VS để tạo ra hầu hết nó cho bạn, nhưng tôi không thể nhớ làm thế nào. – dreamlax
[IContextMenu] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb776095 (v = vs.85) .aspx) doc, và cũng [IShellExtInit] (http: // MSDN. microsoft.com/en-us/library/windows/desktop/bb775096(v=vs.85).aspx) doc. – dreamlax
@dreamlax Tôi đã sử dụng thuật sĩ dự án cho dự án ATL, nhưng khi tôi tạo một lớp mới, nó cũng tạo ra một giao diện cho nó - Tôi không muốn một giao diện, nhưng nó không dễ dàng loại bỏ chức năng đó. Plus Tôi không chắc chắn lý do tại sao cần phải được tạo ra mã. –