windows客戶端開發--通過ShellExecute函式開啟瀏覽器
在我們的客戶端中常常會有一些link,點選後希望通過瀏覽器導航到該連結。
我們是通過ShellExecute函式來實現的。
ShellExecute的功能是執行一個外部程式(或者是開啟一個已註冊的檔案、開啟一個目錄、列印一個檔案等等),並對外部程式有一定的控制。
注意,要使用這個函式,要引入標頭檔案:
#include <shellapi.h>
看看函式原型:
ShellExecute(
hWnd: HWND; {指定父視窗控制代碼}
Operation: PChar; {指定動作, 譬如: open、runas、print、edit、explore、find[2] }
FileName: PChar; {指定要開啟的檔案或程式}
Parameters: PChar; {給要開啟的程式指定引數; 如果開啟的是檔案這裡應該是 nil}
Directory: PChar; {預設目錄}
ShowCmd: Integer {開啟選項}
)
可以通過ShellExecute開啟windows系統自帶的記事本、計算器等等。
我們這裡需要的是開啟一個連結,如www.baidu.com
更進一步,我們如何指定瀏覽器來開啟www.baidu.com.
我們應該再一次關於一下這個函式的引數:
lpFile [in]
Type: LPCTSTR
A pointer to a null-terminated string that specifies the file or object on which to execute the specified verb. To specify a Shell namespace object, pass the fully qualified parse name. Note that not all verbs are supported on all objects. For example, not all document types support the “print” verb. If a relative path is used for the lpDirectory parameter do not use a relative path for lpFile.
lpParameters [in, optional]
Type: LPCTSTR
If lpFile specifies an executable file, this parameter is a pointer to a null-terminated string that specifies the parameters to be passed to the application. The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.
lpDirectory [in, optional]
Type: LPCTSTR
A pointer to a null-terminated string that specifies the default (working) directory for the action. If this value is NULL, the current working directory is used. If a relative path is provided at lpFile, do not use a relative path for lpDirectory.
所以,我們可以這樣使用:
#include<iostream>
#include<Windows.h>
#include<shellapi.h>
int main()
{
//使用IE瀏覽器開啟www.baidu.com
ShellExecute(NULL, L"open", L"iexplore.exe", L"www.baidu.com", NULL, SW_MAXIMIZE);
//使用搜狗瀏覽器開啟www.baidu.com
ShellExecute(NULL, L"open", L"SogouExplorer.exe", L"www.baidu.com", NULL, SW_MAXIMIZE);
//使用預設瀏覽器開啟www.baidu.com,我用的是chrome
ShellExecute(NULL, L"Open", L"www.baidu.com", 0, 0, SW_SHOWNORMAL);
return 0;
}