请问在Delphi编程中,如何获取WINDOWS的安装目录

请问在Delphi编程中,如何获取WINDOWS的安装目录,第1张

var

S:PChar;

begin

GetMem(S, MAX_PATH);

GetWindowsDirectory(S,MAX_PATH);

ShowMessage(S);

FreeMem(S);

end;

GetSetting 函数

从 Windows 注册表中的应用程序项目返回注册表项设置值。

语法

GetSetting(appname, section, key[, default])

EnvironmentGetFolderPath(EnvironmentSpecialFolderXXX)方法

XXX如下

系统特殊文件夹是包含公共信息的文件夹,如“Program Files”、“Programs”、“System”或“Startup”。特殊文件夹在默认情况下由系统设置,或者由用户在安装 Windows 的某个版本时显式进行设置。

GetFolderPath 方法使用这些枚举常数来指定要检索的特殊文件夹路径。

成员

成员名称 说明

ApplicationData 目录,它用作当前漫游用户的应用程序特定数据的公共储存库

漫游用户在网络上的多台计算机上工作。漫游用户的配置文件保存在网络服务器上,当用户登录到某个系统上时,它会加载到该系统。

CommonApplicationData 目录,它用作所有用户使用的应用程序特定数据的公共储存库。

CommonProgramFiles 用于应用程序间共享的组件的目录。

Cookies 用作 Internet Cookie 的公共储存库的目录。

Desktop 逻辑桌面,而不是物理文件系统位置。

DesktopDirectory 用于物理上存储桌面上的文件对象的目录。

不应将此目录与桌面文件夹本身混淆,后者是虚拟文件夹。

Favorites 用作用户收藏夹项的公共储存库的目录。

History 用作 Internet 历史记录项的公共储存库的目录。

InternetCache 用作 Internet 临时文件的公共储存库的目录。

LocalApplicationData 目录,它用作当前非漫游用户使用的应用程序特定数据的公共储存库。

MyComputer “我的电脑”文件夹。

MyMusic “My Music”文件夹。

MyPictures “My Pictures”文件夹。

Personal 用作文档的公共储存库的目录。

ProgramFiles “Program files”目录。

Programs 包含用户程序组的目录。

Recent 包含用户最近使用过的文档的目录。

SendTo 包含“发送”菜单项的目录。

StartMenu 包含“开始”菜单项的目录。

Startup 对应于用户的“启动”程序组的目录。

每当用户登录、启动 Windows NT 或更高版本或启动 Windows 98 时,系统均会启动这些程序。

System “System”目录。

Templates 用作文档模板的公共储存库的目录。

@echo off & setlocal enabledelayedexpansion

title 已安装程序列表获取脚本 By 依梦琴瑶

:: 设置日志文件保存路径,不存在时会自动创建

set LogSaveDir=D:\MyLog

set UnKey=Microsoft\Windows\CurrentVersion\Uninstall

if /i "%PROCESSOR_IDENTIFIER:~,3%"=="x86" goto x86

echo 正在努力获取本机已安装程序列表,请稍后。。。

(echo Name^|^|Version^|^|Publisher^|^|InstallDate

for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>ymqy$

(for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\Wow6432Node\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

(for /f "delims=" %%i in ('reg query "HKCU\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

goto SortingList

:x86

(echo Name^|^|Version^|^|Publisher^|^|InstallDate

for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>ymqy$

(for /f "delims=" %%i in ('reg query "HKCU\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

:SortingList

for /f "skip=1 tokens=1 delims=[]" %%a in ('find /n "::SortingListVBS::" "%~0"') do set Line=%%~a

more +%Line% "%~0">SortingVBS

if not exist "%LogSaveDir%" md "%LogSaveDir%"

(cscript //nologo //e:jscript "SortingVBS" < ymqy$)>"%LogSaveDir%\%COMPUTERNAME%Log"

del /f/q ymqy$ SortingVBS

echo 本机已安装程序列表已输出至 "%LogSaveDir%\%COMPUTERNAME%Log"

pause

exit

::SortingListVBS::

var i = 0, arr = [], max = [];

var reg = /[^\x00-\xff]/g;

while(!WSHStdInAtEndOfStream){

    var strLine = WSHStdInReadLine();

    if(!/^\s$/test(strLine)) {

        arr[i] = strLinesplit('||');

        for(var j=0; j<arr[i]length; j++) {

            var len = arr[i][j]replace(reg, '')length;

            if(!max[j] || len > max[j]) max[j] = len;

        }

        i++;

    }

}

for(var i=0; i<arrlength; i++) {

    var s = '';

    for(var j=0; j<arr[i]length; j++) {

        var len = max[j] - arr[i][j]replace(reg, '')length;

        var space = ' ';

        for (var k=0; k<len; k++) space += ' ';

        s += arr[i][j] + space;

    }

    WScriptEcho(s);

}

最终的效果是这样的,比WMIC多了两个详细的项目,那就是软件发布者和安装时间。

有两个支持库可以给你解决:

1 取系统字体列表()

调用格式: 〈文本型数组〉 取系统字体列表 () - 应用接口支持库->系统处理

英文名称:GetFontList

取系统所有字体的列表。成功返回字体数组;失败返回空。本命令为初级命令。

*** 作系统需求: Windows

2 安装字体()

调用格式: 〈整数型〉 安装字体 (文本型 字体文件名) - 应用接口支持库->系统处理

英文名称:AddFont

在Windows系统中添加一种字体资源。添加完毕后,该字体即可由任何Windows应用程序调用。成功返回添加的字体数量;失败返回0。本命令为初级命令。

参数<1>的名称为“字体文件名”,类型为“文本型(text)”。字体资源文件的文件名。可以是FON,FNT,TTF或FOT文件。

*** 作系统需求: Windows

一、获取当前文件的路径

string str1=ProcessGetCurrentProcess()MainModuleFileName;//可获得当前执行的exe的文件名。

string str2=EnvironmentCurrentDirectory;//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。(备注:按照定义,如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:\”)。如果该进程在子目录中启动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径[如“C:\mySubDirectory”])。

string str3=DirectoryGetCurrentDirectory(); //获取应用程序的当前工作目录。

string str4=AppDomainCurrentDomainBaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集。

string str5=ApplicationStartupPath;//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

string str6=ApplicationExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。

string str7=AppDomainCurrentDomainSetupInformationApplicationBase;//获取或设置包含该应用程序的目录的名称。

1 SystemDiagnosticsProcessGetCurrentProcess()MainModuleFileName

获取模块的完整路径。

2 SystemEnvironmentCurrentDirectory

获取和设置当前目录(该进程从中启动的目录)的完全限定目录。

3 SystemIODirectoryGetCurrentDirectory()

获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,有可能程序放在C:\>

以上就是关于请问在Delphi编程中,如何获取WINDOWS的安装目录全部的内容,包括:请问在Delphi编程中,如何获取WINDOWS的安装目录、vb 获取已安装的程序名和路径、C#获取系统软件默认安装目录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9682993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存