Comment les API du shell WinAPI diffèrent-elles des fonctions API et CRT de base?

Je lisais les API de processus Windows et je me suis retrouvé avec trois questions:

  1. Quelle est la différence entre les API de base et les API shell? J’ai lu que les API shell enveloppent les API de base, par exemple ShellExecute () et ShellExecuteEx (), enveloppent CreateProcess (), mais ne parviennent pas à comprendre la distinction.

  2. Comment les API de base et les API Shell sont-elles différentes des fonctions CRT (C Runtime)? Comme toujours, les fonctions exec () et spawn () CRT enveloppent CreateProcess () de l’API de base.

  3. Je comprends que je peux utiliser les API de base et les fonctions CRT directement à partir du code en compilant et en reliant les fichiers d’en-tête corrects. Comment utiliser les API Shell?

1) Quelle est la différence entre les API de base et les API de shell?

Ils font des choses différentes. La famille ShellExecute fait les choses de la même manière que le shell, c’est-à-dire de la même manière que l’explorateur Windows. Ce n’est pas simplement un wrapper autour de CreateProcess. Par exemple, si vous passez à ShellExecute le chemin d’access à un document Word, ShellExecute recherchera dans le registre la méthode appropriée pour ouvrir un document Word.

ShellExecute peut également faire les autres “verbes” que vous voyez dans le menu contextuel de Windows, tels que edit, print, etc.

2) Comment les API de base et les API Shell sont-elles différentes des fonctions CRT?

Les fonctions CRT sont implémentées sous Windows pour être compatibles avec le standard C. Ce sont des wrappers autour de CreateProcess, mais leur raison d’être est d’être compatible pour ne pas offrir de fonctionnalités supplémentaires.

3) Comment puis-je utiliser les API de Shell?

Pour utiliser les API du shell, il vous suffit d’inclure les fichiers d’en-tête et de lier la bibliothèque correcte, comme avec toute autre API.

Par exemple, ShellExecute:

Comme vous le voyez au bas de la page, il vous indique le fichier à inclure et la bibliothèque à associer.

Exigences

Client minimum pris en charge: Windows XP [applications de bureau uniquement]

Serveur minimum pris en charge: Windows 2000 Server [applications de bureau uniquement]

En-tête: Shellapi.h

Bibliothèque: Shell32.lib

DLL: Shell32.dll (version 3.51 ou ultérieure)

Noms Unicode et ANSI: ShellExecuteW (Unicode) et ShellExecuteA (ANSI)

Le shell (également appelé Windows Explorer) ajoute une couche supplémentaire de fonctionnalités. Il gère les associations de fichiers , il sait quel EXE doit être démarré lorsque vous lui demandez d’exécuter un document. Si vous transmettez le nom, par exemple, d’un fichier .html, ShellExecuteEx () peut déterminer qu’un navigateur doit être démarré. Il prend également en charge les verbes , différentes choses que vous pouvez faire avec un document. A part “open”, le verbe par défaut, les verbes “print” et “edit” sont communs par exemple.

Cela manque dans CreateProcess (), il sait seulement comment démarrer un fichier exécutable. Toujours avec de nombreuses options, consultez les documents MSDN pour les atsortingbuts de sécurité et les options d’indicateur de création.

Beaucoup de ces sifflets sont absents des fonctions CRT, ils fonctionnent sur n’importe quel système d’exploitation, vous ne pouvez donc pas faire beaucoup plus que spécifier le nom de l’exécutable et les arguments de la ligne de commande.