📜  了解ShellExecute函数及其应用程序,以使用C++代码打开文件中存在的URL列表

📅  最后修改于: 2021-05-30 04:00:23             🧑  作者: Mango

给定URL作为字符串,在Microsoft Windows OS中使用C++代码将其打开。
例子:

Input : https://www.geeksforgeeks.org/
Output : The site opened in your browser.
// C++ program to open a URL in browser.
// This program is written on for Microsoft
// Windows OS
#include 
#include 
using namespace std;
  
int main()
{
    char url[100] = "http:// www.geeksforgeeks.org/";
    ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL);
    return 0;
}

输出:

GeeksforGeeks site opened in Google Chrome in a new tab.

ShellExecute是相当于用户双击文件图标的代码。它使Windows找出文档文件与哪个应用程序相关联,启动程序并使其加载文档文件。

通过使用ShellExecute ,您无需知道已注册到特定文件类型的程序的名称或位置。 Windows会帮您解决这个问题。例如,您可以ShellExecute .PDF文件,只要安装了Reader,Acrobat或其他一些PDF阅读应用程序,Windows就会启动它并为您加载PDF。

ShellExecute的参数及其含义:

HINSTANCE ShellExecute(
_In_opt_ HWND hwnd,
_In_opt_ LPCTSTR lpOperation,
_In_ LPCTSTR lpFile,
_In_opt_ LPCTSTR lpParameters,
_In_opt_ LPCTSTR lpDirectory,
_In_ INT nShowCmd
);

参数:

类型: HWND

父窗口的句柄,用于显示UI或错误消息。如果操作未与窗口关联,则此值可以为NULL。

类型: LPCTSTR

指向以null结尾的字符串的指针,在这种情况下称为动词,用于指定要执行的操作。可用动词集取决于特定的文件或文件夹。通常,对象快捷菜单中可用的动作是可用动词。在我们的例子中,使用“ open”打开由lpFile参数指定的项目。该项目可以是文件或文件夹。

类型: LPCTSTR
指向以空字符结尾的字符串的指针,该字符串指定要在其上执行指定动词的文件或对象。要指定Shell名称空间对象,请传递完全限定的解析名称。请注意,并非所有对象都支持所有动词。例如,并非所有文档类型都支持“打印”动词。如果将相对路径用于lpDirectory参数,则不要对lpFile使用相对路径。在我们的例子中,它是一个字符数组“ url”,在其上执行操作。

类型: LPCTSTR
如果lpFile指定一个可执行文件,则此参数是指向以空字符结尾的字符串的指针,该字符串指定要传递给应用程序的参数。此字符串的格式由要调用的动词确定。如果lpFile指定一个文档文件,则lpParameters应该为NULL。

类型: LPCTSTR
指向以空字符结尾的字符串的指针,该字符串指定操作的默认(工作)目录。如果此值为NULL,则使用当前工作目录。如果在lpFile中提供了相对路径,请不要对lpDirectory使用相对路径。

类型: INT
用于指定在打开应用程序时如何显示的标志。如果lpFile指定一个文档文件,则将该标志简单地传递到关联的应用程序。由应用程序决定如何处理它。这些值在Winuser.h中定义。在我们的情况下,使用SW_SHOWNORMAL激活并显示一个窗口。如果窗口最小化或最大化,Windows会将其还原到其原始大小和位置。首次显示窗口时,应用程序应指定此标志。

返回值
类型: HINSTANCE
如果函数成功,则返回大于32的值。如果函数失败,则返回指示失败原因的错误值。返回值强制转换为HINSTANCE,以便与16位Windows应用程序向后兼容。但是,这不是真正的阻碍。

例子:

Input : A list of URLs stored in a text file.
Output : All the URLs opened in different tabs.
// C++ program to list URLs in a text file and
// open them.
// This program is written only for Microsoft
// Windows OS
#include 
#include 
using namespace std;
  
int main()
{
    long long int s, i, x, c = 0;
    char temp[1000];
  
    // Name of the text file which contains all the
    // URLs separated by end line.
    ifstream all_lines("urls.txt");
    string line; // To get each line of the file as a string.
  
    while (getline(all_lines, line, 'n'))
    {
        x = 0; // For getting each character of a string.
        s = line.size(); // Measuring size of each string.
  
        // Here we limit number of tabs to 10, we can
        // change the value of c according to your
        // requirement.
        for (i = 0; i <= s && c < 10; i++) {
            if (line[i] != 't' && line[i] != '\0')
            {
                temp[x] = line[i];
                x++;
            }
            else
            {
                temp[x] = '\0'; ShellExecute(NULL, "open", temp, NULL,
                                                  NULL, SW_SHOWNORMAL);
  
                // Keeping a count of number of tabs
                // getting opened.
                c++;
            }
        }
    }
    system("pause");
    return 0;
}

输出:

List of all urls present in the urls.txt file opened in different tabs.

注意:在某些C++编辑器(如代码块)中运行上述代码,文本文件和代码应位于同一文件夹中。

参考: https : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb762153(v=vs.85).aspx

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”