Search…

Mở File Và Đường Dẫn Bất Kỳ Với Phương Thức ShellExcute()

18/09/20203 min read
Hướng dẫn mở file trong chương trình bằng hàm ShellExcute() trong C++ Win32 API.

Mở 1 file bằng 1 ứng dụng mặc định của hệ thống ví dụ như file ảnh với Windows Viewer hay file âm thanh với Windows Media Player, đặc biệt là đường dẫn web với trình duyệt mặc định là 1 trong những việc thường hay gặp trong phát triển phần mềm.

Win32 API cung cấp 1 phương thức khá hay gọn gàng để thực hiện điều này, đó là ShellExecute().

1 số nhu cầu cụ thể có thể sử dụng ShellExecute() là:

  • Mở trình duyệt web về trang web cần quảng bá khi cung cấp 1 ứng dụng miễn phí.
  • Mở file log cho user khi ứng dụng crash hoặc cần cung cấp thông tin thêm.
  • ...

Sử dụng hàm ShellExecute()

Để sử dụng ShellExecute() cần #include <Windows.h>, prototype của hàm có dạng như sau:

ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);
  • hwnd: đại diện cho handle của cửa sổ window đang thao tác, có thể truyền NULL vào.
  • lpOperation: đại diện cho câu lện muốn thực thi dưới dạng 1 chuỗi:
    • "open": mở 1 file theo đường dẫn được cài đặt tại vế lpFile.
    • "explore": mở thư mục theo đường dẫn được cài đặt ở lpFile.
    • "edit": thử mở 1 file theo đường dẫn tại lpFile bằng 1 editor. Ví dụ với ảnh .bmp thì đó là Paint hay file text .txt thì đó là Notepad.
    • "find": mở công cụ tìm kiếm mặc định của hệ thống theo đường dẫn cài đặt tại lpDirectory.
    • "print": in file tài liệu được cài đặt tại lpFile. Nếu đường dẫn tại lpFile không phải là 1 file tài liệu (document) thì hàm này thực thi thất bại.
    • NULL: câu lệnh mặc định sẽ được sử dụng, nếu không thực thi được, câu lệnh "open" sẽ được sử dụng kế tiếp.
  • lpFile: đại diên cho đường dẫn muốn câu lệnh này thực thi, nó có thể là đường dẫn bất kỳ đến 1 file, 1 thư mục hay 1 trang web.
  • lpParameters: vế này nên được đặt là NULL.
  • lpDirectory: đường dẫn đến thư mục muốn dùng để tìm kiếm nếu câu lệnh lpOperation được gán là "find".
  • nShowCmd: 1 con số Command được định nghĩa nhằm ra lệnh cho hệ thống, các command thường dùng là:
    • SW_SHOWNORMAL: hiển thị cửa sổ ở mức bình thường.
    • SW_SHOWMAXIMIZED: hiển thị cửa sổ phóng lớn toàn màn hình.
    • SW_SHOWMINIMIZED: hiển thị cửa sổ được thu nhỏ ở dưới thanh taskbar.
    • SW_SHOW: hiển thị cửa sổ với kích thước mặc định.

Code demo sử dụng ShellExecute()

Giả sử có các file ở thư mục gốc của project và thư mục F:\NguyenPhan như sau:

Mở file bằng ShellExecute()
#include <Windows.h>

int main()
{
	ShellExecute(NULL, "open", "image.png", NULL, NULL, SW_SHOWNORMAL);
	ShellExecute(NULL, "edit", "image.png", NULL, NULL, SW_SHOWNORMAL);
	ShellExecute(NULL, "edit", "F:/NguyenPhan/text.txt", NULL, NULL, SW_SHOWNORMAL);
	ShellExecute(NULL, "open", "F:/NguyenPhan/", NULL, NULL, SW_SHOWNORMAL);
	ShellExecute(NULL, "open", "https://www.stdio.vn/", NULL, NULL, SW_SHOWMAXIMIZED);

	return 0;
}

Kết quả

Mở file với ShellExecute()
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024