Trouver le chemin d'accès du bloc-notes.exe et mspaint.EXE
Quelle est la meilleure façon de savoir où le bloc-notes.exe et mspaint.exe sont qui fonctionnent sur différentes versions de Windows?
si j'obtiens le répertoire Windows via SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir)
, puis parcourir tous les sous-répertoires pour chercher les deux fichiers?
(supposons que je ne suis pas intéressé par quoi que ce soit en dehors du dossier Windows.)
11 réponses
cela fonctionne sur toutes les boîtes Windows auxquelles j'ai accès (XP+).
c:\> for %i in (cmd.exe) do @echo %~$PATH:i
C:\WINDOWS\system32\cmd.exe
c:\> for %i in (python.exe) do @echo %~$PATH:i
C:\Python25\python.exe
la grande chose est, vous ne faites pas utiliser le %PATH%
, Vous pouvez substituer votre propre chemin de recherche en utilisant une variable d'environnement différente.
si vous avez installé le SDK de la plate-forme Microsoft ( la version de février 2003 est le dernier qui fonctionne avec Microsoft VC6) , vous pouvez saisir le where.exe
programme (C'est 38K, seulement 18K si vous le gzip) et exécuter
where notepad.exe
de l'aide de l' where
commande:
WHERE [/R dir] [/Q] [/F] [/T] pattern...
Description:
Displays the location of files that match the search pattern.
By default, the search is done along the current directory and
in the paths specified by the PATH environment variable.
Parameter List:
/R Recursively searches and displays the files that match the
given pattern starting from the specified directory.
/Q Returns only the exit code, without displaying the list
of matched files. (quite mode)
/F Displays the matched filename in double quotes.
/T Displays the file size, last modified date and time for all
matched files.
pattern Specifies the search pattern for the files to match.
Wildcards * and ? can be used in the pattern. The
"$env:pattern" and "path:pattern" formats can also be
specified, where "env" is an environment variable and
the search is done in the specified paths of the "env"
environment variable. These formats should not be used
with /R. The search is also done by appending the
extensions of the PATHEXT variable to the pattern.
/? Displays this help message.
NOTE: The tool returns an error level of 0 if the search is
successful, of 1 if the search is unsuccessful and
of 2 for failures or errors.
Examples:
WHERE /?
WHERE myfilename1 myfile????.*
WHERE $windir:*.*
WHERE /R c:\windows *.exe *.dll *.bat
WHERE /Q ??.???
WHERE "c:\windows;c:\windows\system32:*.dll"
WHERE /F /T *.dll
vérifiez si la touche HKEY_CLASSES_ROOT\Applications\notepad.exe est le même sur les versions localisées. Peut-être que le nom de la clé est le même et la valeur pour éditer/ouvrir des points à l'exe localisé.
Exemple:
anglais:
HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\edit\command
%SystemRoot%\system32* * NOTEPAD.EXE** %1
néerlandais:
HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\edit\command
%SystemRoot % \system32* * kladblok.exe* * % 1
si c'est le cas, alors il est sur le point de vérifier le Registre pour cette clé (même chose pour le mspaint).
Type:
%windir%\system32\bloc-notes.EXE dans la barre de chemin thinggy
ou
C:\Windows\System32 et de trouver le bloc-notes.exe
* C est le disque dur où se trouve votre OS:)
je pense que pour commencer, petite, vous devriez obtenir le windir
variable d'environnement et de regarder dans les sous-dossiers %windir%\system32\
mspaint
et notepad
.
Très probablement ils seront là.
cependant si cela échoue, alors recourez à une recherche par la force plus brutale.
normalement, vous ne feriez que les exécuter. Ils sont sur le chemin du système dans chaque version de Windows.
Vous pouvez utiliser ExpandEnvironmentStrings
. La variable d'environnement que vous voulez étendre est WINDIR
.
dans le passé, vous auriez pu utiliser GetWindowsDirectory
ou GetSystemDirectory
, mais je pense qu'ils sont obsolètes.
puisque vous avez marqué la question avec WinAPI, j'utiliserais SearchPath () par exemple, la commande suivante va remplir la variable path
avec le résultat.
//Get the full path to notepad
char path[MAX_PATH] = { 0 };
LPSTR* ptr = NULL;
DWORD dwRet = SearchPath(NULL, "notepad.exe", NULL, MAX_PATH, (LPSTR)path, ptr);
utilisez la fonction WinAPI GetWindowsDirectory() pour obtenir le dossier Windows, et GetSystemDirectory () pour obtenir le dossier Windows\System. Thely est garanti de travailler avec toutes les versions de Windows depuis au moins Win95; je pense qu'ils étaient disponibles dans Win 3.x ainsi.
essayez d'ouvrir une invite DOS, changez dans le dossier Windows et faites:
dir notepad.exe /s
vive le DOS :)
En bref, je trouve que la meilleure approche
est de vérifier l'
Windows\System32
annuaire
et le HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
clés de registre.
plus généralement, je trouve que la meilleure approche
est pour imiter ShellExecuteEx
.
tiré de:
Enregistrement De La Demande(Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs. 85).aspx
Le fichier est recherché dans les emplacements suivants:
•Le répertoire de travail courant.
•Le répertoire Windows seulement (aucun sous-répertoire n'est recherché).
* Le répertoire Windows\System32.
* Répertoires listés dans la variable D'environnement PATH.
* Recommandé: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
une autre possibilité est de vérifier Start Menu\Programs\Accessories
,
à l'aide de SHGetFolderPath
CSIDL_STARTMENU := 11
et CSIDL_COMMON_STARTMENU := 22
, et récupérer les cibles
à partir de l'lnk fichier.
allez dans le dossier System 32 et tapez " Bloc-notes.exe" dans la barre "nom de fichier".