内容

名称

Win32 - 一些 Win32 API 函数的接口

说明

Win32 模块包含用于访问 Win32 API 的函数。

Win32 函数的按字母顺序排列的列表

建议在使用任何这些函数之前use Win32;;但是,为了向后兼容,标记为 [CORE] 的函数将自动为您执行此操作。

在下面的函数说明中,术语Unicode 字符串用于表示字符串可能包含系统代码页之外的字符。注意事项如果核心 Perl 版本支持通常表示 Perl 5.8.9 及更高版本,尽管一些 Unicode 路径名功能可能在早期版本上运行。

Win32::AbortSystemShutdown(MACHINE)

中止在指定的 MACHINE 上的系统关机(由 InitiateSystemShutdown 函数启动)。

Win32::BuildNumber()

[CORE] 返回 ActivePerl 构建号。此函数仅在 ActivePerl 二进制发行版中可用。

Win32::CopyFile(FROM, TO, OVERWRITE)

[核心] Win32::CopyFile() 函数将一个现有文件复制到一个新文件中。所有文件信息,如创建时间和文件属性,都将复制到新文件中。但是,它不会复制安全信息。如果目标文件已存在,则仅当 OVERWRITE 参数为 true 时才会覆盖它。但即使这样,也不会覆盖只读文件;您必须先自己取消链接(unlink())。

Win32::CreateDirectory(DIRECTORY)

创建 DIRECTORY,并在成功时返回一个 true 值。如果失败,请查看 $^E 以获取扩展错误信息。

DIRECTORY 可能包含系统代码页之外的 Unicode 字符。创建目录后,可以使用 Win32::GetANSIPathName() 获取一个可以传递给系统调用和外部程序的名称。

Win32::CreateFile(FILE)

创建 FILE,并在成功时返回一个 true 值。如果失败,请查看 $^E 以获取扩展错误信息。

FILE 可能包含系统代码页之外的 Unicode 字符。创建文件后,可以使用 Win32::GetANSIPathName() 获取一个可以传递给系统调用和外部程序的名称。

Win32::DomainName()

[核心] 返回当前 perl 进程所有者登录的 Microsoft 网络域或工作组的名称。“工作站”服务必须正在运行才能确定此信息。此函数适用于 Windows 9x。

Win32::ExpandEnvironmentStrings(STRING)

获取 STRING 并用其定义的值替换所有引用的环境变量名称。对环境变量的引用采用以下形式:%VariableName%。在环境中查找 VariableName 时,忽略大小写。如果找不到该变量,则保留原始的 %VariableName% 文本。具有与以下内容相同的效果

$string =~ s/%([^%]*)%/$ENV{$1} || "%$1%"/eg

但是,如果通过 %ENV 未分配要展开的环境变量,则此函数可能会返回一个 Unicode 字符串。对 %ENV 的访问目前始终使用字节语义。

Win32::FormatMessage(ERRORCODE)

[核心] 将提供的 Win32 错误号(例如由 Win32::GetLastError() 返回)转换为描述性字符串。类似于 perror() 标准 C 库函数。请注意,在字符串上下文中使用的 $^E 具有大致相同的效果。

C:\> perl -e "$^E = 26; print $^E;"
The specified disk or diskette cannot be accessed
Win32::FsType()

[核心] 返回当前活动驱动器的文件系统名称(如“FAT”或“NTFS”)。在列表上下文中,它返回三个值:(FSTYPE, FLAGS, MAXCOMPLEN)。FSTYPE 是文件系统类型,如前所述。FLAGS 是下表中值的组合

0x00000001  supports case-sensitive filenames
0x00000002  preserves the case of filenames
0x00000004  supports Unicode in filenames
0x00000008  preserves and enforces ACLs
0x00000010  supports file-based compression
0x00000020  supports disk quotas
0x00000040  supports sparse files
0x00000080  supports reparse points
0x00000100  supports remote storage
0x00008000  is a compressed volume (e.g. DoubleSpace)
0x00010000  supports object identifiers
0x00020000  supports the Encrypted File System (EFS)

MAXCOMPLEN 是此文件系统上文件名组件(两个反斜杠之间的部分)的最大长度。

Win32::FreeLibrary(HANDLE)

卸载以前加载的动态链接库。此调用后,HANDLE 不再有效。有关动态加载库的信息,请参见 LoadLibrary

Win32::GetACP()

返回操作系统当前的 Windows ANSI 代码页标识符。另请参见 GetOEMCP()、GetConsoleCP() 和 GetConsoleOutputCP()。

Win32::GetANSIPathName(FILENAME)

返回 FILENAME 的 ANSI 版本。如果系统代码页无法表示长名称,则可能是短名称。

虽然目前尚未实现,但将来此函数有可能仅将 FILENAME 路径的部分内容转换为短格式。

如果 FILENAME 不存在于文件系统中,或者文件系统不支持短 ANSI 文件名,则此函数将使用替换字符将 Unicode 名称转换为系统代码页。

Win32::GetArchName()

此函数的使用已弃用。它等效于 $ENV{PROCESSOR_ARCHITECTURE}。这可能在 Win9X 上不起作用。

Win32::GetChipName()

返回处理器类型:x86 处理器的 386、486 或 586,x64 处理器的 8664,Itanium 的 2200。对于 arm/arm64 处理器,该值在 Microsoft 文档中标记为“保留”(未指定,但通常为 0),因此最好使用 GetChipArch()。由于它返回本机处理器类型,因此即使从在 64 位 Windows 上运行的 32 位 Perl 调用,它也会返回 64 位处理器类型。

Win32::GetChipArch()

返回处理器架构:x86 处理器的 0,arm 的 5,Itanium 的 6,x64 的 9,arm64 的 12,未知架构的 0xFFFF。

Win32::GetConsoleCP()

返回调用进程关联的控制台使用的输入代码页。要设置控制台的输入代码页,请参见 SetConsoleCP()。另请参见 GetConsoleOutputCP()、GetACP() 和 GetOEMCP()。

Win32::GetConsoleOutputCP()

返回与调用进程关联的控制台使用的输出代码页。要设置控制台的输出代码页,请参阅 SetConsoleOutputCP()。另请参阅 GetConsoleCP()、GetACP() 和 GetOEMCP()。

Win32::GetCwd()

[CORE] 返回当前活动驱动器和目录。此函数不会返回 UNC 路径,因为 Windows 95 下不支持此类功能所需的功能。

如果核心 Perl 版本支持,此函数将在系统代码页中无法表示长路径名时返回当前目录的 ANSI 路径名。

Win32::GetCurrentProcessId()

返回当前进程的进程标识符。在进程终止之前,进程标识符在整个系统中唯一标识该进程。

当前进程标识符通常也可通过预定义的 $$ 变量获得。然而,在 fork() 模拟下,$$ 可能包含一个伪进程标识符,该标识符仅对 Perl kill()、wait() 和 waitpid() 函数有意义。即使从伪进程内部调用,Win32::GetCurrentProcessId() 函数也将始终返回常规 Windows 进程 ID。

Win32::GetCurrentThreadId()

返回调用线程的线程标识符。在线程终止之前,线程标识符在整个系统中唯一标识该线程。

Win32::GetFileVersion(FILENAME)

从可执行文件或 DLL 的 VERSIONINFO 资源中返回文件版本号。这是一个由四个 16 位数字组成的元组。在列表上下文中,将返回这四个数字。在标量上下文中,它们将连接成一个字符串,并用点分隔。

Win32::GetFolderPath(FOLDER [, CREATE])

返回 Windows 特殊文件夹之一的完整路径名。如果文件夹不存在,并且可选的 CREATE 参数为 true,则将创建该文件夹。Win32 模块定义了以下 FOLDER 常量,但仅按需导出

CSIDL_ADMINTOOLS
CSIDL_APPDATA
CSIDL_CDBURN_AREA
CSIDL_COMMON_ADMINTOOLS
CSIDL_COMMON_APPDATA
CSIDL_COMMON_DESKTOPDIRECTORY
CSIDL_COMMON_DOCUMENTS
CSIDL_COMMON_FAVORITES
CSIDL_COMMON_MUSIC
CSIDL_COMMON_PICTURES
CSIDL_COMMON_PROGRAMS
CSIDL_COMMON_STARTMENU
CSIDL_COMMON_STARTUP
CSIDL_COMMON_TEMPLATES
CSIDL_COMMON_VIDEO
CSIDL_COOKIES
CSIDL_DESKTOP
CSIDL_DESKTOPDIRECTORY
CSIDL_FAVORITES
CSIDL_FONTS
CSIDL_HISTORY
CSIDL_INTERNET_CACHE
CSIDL_LOCAL_APPDATA
CSIDL_MYMUSIC
CSIDL_MYPICTURES
CSIDL_MYVIDEO
CSIDL_NETHOOD
CSIDL_PERSONAL
CSIDL_PRINTHOOD
CSIDL_PROFILE
CSIDL_PROGRAMS
CSIDL_PROGRAM_FILES
CSIDL_PROGRAM_FILES_COMMON
CSIDL_RECENT
CSIDL_RESOURCES
CSIDL_RESOURCES_LOCALIZED
CSIDL_SENDTO
CSIDL_STARTMENU
CSIDL_STARTUP
CSIDL_SYSTEM
CSIDL_TEMPLATES
CSIDL_WINDOWS

请注意,并非所有文件夹都在所有版本的 Windows 中都定义。

请参阅 CSIDL 常量的 MSDN 文档,目前可在以下位置获得

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp

如果系统代码页中无法表示长名称,此函数将返回 ANSI 文件夹路径。如果您想要文件夹名称的 Unicode 版本,请对 Win32::GetFolderPath() 的结果使用 Win32::GetLongPathName()。

Win32::GetFullPathName(FILENAME)

[核心] GetFullPathName 将 FILENAME 与当前驱动器和目录名称结合,并返回一个完全限定(又称绝对)路径名称。在列表上下文中,它返回两个元素:(PATH, FILE),其中 PATH 是完整的路径名组件(包括尾随反斜杠),而 FILE 只是文件名部分。请注意,不会尝试将提供的 FILENAME 中的 8.3 组件转换为长名称或反之亦然。与 Win32::GetShortPathName() 和 Win32::GetLongPathName() 进行比较。

如果核心 Perl 版本支持,则当无法在系统代码页中表示完整路径名时,此函数将返回一个 ANSI 路径名。

Win32::GetLastError()

[核心] 返回对 Win32 API 函数的调用生成的最后一个错误值。请注意,在数字上下文中使用的 $^E 等于相同的值。

Win32::GetLongPathName(PATHNAME)

[核心] 返回由长名称组件(如果有)组成的 PATHNAME 的表示形式。结果不一定比 PATHNAME 长。不会尝试将 PATHNAME 转换为绝对路径。与 Win32::GetShortPathName() 和 Win32::GetFullPathName() 进行比较。

如果无法在系统代码页中表示路径名,此函数可能会以 Unicode 返回路径名。在将路径传递给系统调用或其他程序之前,请使用 Win32::GetANSIPathName()。

Win32::GetNextAvailDrive()

[核心] 以 "<d>:" 的形式返回一个字符串,其中 <d> 是第一个可用的驱动器盘符。

Win32::GetOEMCP()

返回操作系统当前的原始设备制造商 (OEM) 代码页标识符。另请参见 GetACP()、GetConsoleCP() 和 GetConsoleOutputCP()。

Win32::GetOSDisplayName()

返回正在使用的 Windows 操作系统版本的“营销”名称。它返回以下名称(随机样本)

Windows 2000 Datacenter Server
Windows XP Professional
Windows XP Tablet PC Edition
Windows Home Server
Windows Server 2003 Enterprise Edition for Itanium-based Systems
Windows Vista Ultimate (32-bit)
Windows Small Business Server 2008 R2 (64-bit)

显示名称描述了本机 Windows 版本,因此即使在 32 位 Perl 上,此函数在 64 位 Windows 上运行时也可能会返回“Windows ... (64 位)”名称。

此函数仅应用于向用户显示实际操作系统名称;不应将其用于确定此系统所属的操作系统类别。Win32::GetOSName()、Win32::GetOSVersion、Win32::GetProductInfo() 和 Win32::GetSystemMetrics() 函数提供基本信息来检查某些功能或操作系统发行系列。

Win32::GetOSName()

在标量上下文中返回正在使用的 Win32 操作系统的名称。在列表上下文中,返回一个包含操作系统名称和已知特定版本(适用于 Win9X 系统)以及已安装的任何服务包的两个元素列表。后者大致相当于 GetOSVersion() 在列表上下文中返回的第一项。

该说明还将包括其他特别版本的标签,如“R2”、“媒体中心”、“平板电脑”或“入门版”。

在 Windows 10/Server 半年频道时代,说明中可能包含相关的 ReleaseId 值,但这仅从内部版本号推断而来,而不是绝对确定的。

当前操作系统名称的可能值为

WinWin32s
Win95
Win98
WinMe
WinNT3.51
WinNT4
Win2000
WinXP/.Net
Win2003
WinHomeSvr
WinVista
Win2008
Win7
Win8
Win8.1
Win10
Win2016
Win2019
WinSAC

此例程只是 GetOSVersion() 的一个简单接口。更具体或要求更高的场景应使用该接口。另一个选择是使用 POSIX::uname(),但后者似乎仅报告操作系统系列名称,而不报告具体操作系统。在标量上下文中,它仅返回 ID。

名称“WinXP/.Net”仅出于历史原因使用,以保持 Win32 模块的向后兼容性。Windows .NET Server 在最终发布前已更名为 Windows 2003 Server,并且使用与 Windows XP 不同的主/次版本号。

类似地,名称“WinWin32s”应为“Win32s”,但出于向后兼容性原因也保持原样。

Win32::GetOSVersion()

[CORE] 返回列表 (STRING, MAJOR, MINOR, BUILD, ID),其中元素分别为:操作系统的任意描述性字符串、主版本号、次版本号、内部版本号和指示实际操作系统的数字。对于 ID,Win32s 的值为 0,Windows 9X/Me 的值为 1,Windows NT/2000/XP/2003/Vista/2008/7 的值为 2。在标量上下文中,它仅返回 ID。

当前已知的 ID MAJOR MINOR 和 BUILD 值如下

OS                      ID    MAJOR   MINOR   BUILD
Win32s                   0      -       -       -
Windows 95               1      4       0       -
Windows 98               1      4      10       -
Windows Me               1      4      90       -

Windows NT 3.51          2      3      51       -
Windows NT 4             2      4       0       -

Windows 2000             2      5       0       -
Windows XP               2      5       1       -
Windows Server 2003      2      5       2       -
Windows Server 2003 R2   2      5       2       -
Windows Home Server      2      5       2       -

Windows Vista            2      6       0       -
Windows Server 2008      2      6       0       -
Windows 7                2      6       1       -
Windows Server 2008 R2   2      6       1       -
Windows 8                2      6       2       -
Windows Server 2012      2      6       2       -
Windows 8.1              2      6       2       -
Windows Server 2012 R2   2      6       2       -

Windows 10               2     10       0       -
Windows Server 2016      2     10       0   14393
Windows Server 2019      2     10       0   17677

在 Windows NT 4 SP6 及更高版本上,此函数返回以下其他值:SPMAJOR、SPMINOR、SUITEMASK、PRODUCTTYPE。

Windows 2003 和 Windows 家庭服务器的版本号相同;必须使用 SUITEMASK 字段来区分它们。

Windows Vista 和 Windows Server 2008 的版本号相同;必须使用 PRODUCTTYPE 字段来区分它们。

Windows 7 和 Windows Server 2008 R2 的版本号相同;必须使用 PRODUCTTYPE 字段来区分它们。

Windows 8 和 Windows Server 2012 的版本号相同;必须使用 PRODUCTTYPE 字段来区分它们。

对于现代 Windows 版本,主版本号和次版本号相同。必须使用 PRODUCTTYPE 字段来区分 Windows 10 和服务器版本。BUILD 字段用于区分 Windows Server 版本:当前为 2016、2019 和半年频道版本。

SPMAJOR 和 SPMINOR 是最新安装的服务包的版本号。(在 Windows 10 时代,这些版本号未使用。)

SUITEMASK 是一个位域,用于标识系统上可用的产品套件。已知位有

VER_SUITE_SMALLBUSINESS             0x00000001
VER_SUITE_ENTERPRISE                0x00000002
VER_SUITE_BACKOFFICE                0x00000004
VER_SUITE_COMMUNICATIONS            0x00000008
VER_SUITE_TERMINAL                  0x00000010
VER_SUITE_SMALLBUSINESS_RESTRICTED  0x00000020
VER_SUITE_EMBEDDEDNT                0x00000040
VER_SUITE_DATACENTER                0x00000080
VER_SUITE_SINGLEUSERTS              0x00000100
VER_SUITE_PERSONAL                  0x00000200
VER_SUITE_BLADE                     0x00000400
VER_SUITE_EMBEDDED_RESTRICTED       0x00000800
VER_SUITE_SECURITY_APPLIANCE        0x00001000
VER_SUITE_STORAGE_SERVER            0x00002000
VER_SUITE_COMPUTE_SERVER            0x00004000
VER_SUITE_WH_SERVER                 0x00008000
VER_SUITE_MULTIUSERTS               0x00020000

VER_SUITE_xxx 名称在此处列出,以便交叉引用 Microsoft 文档。Win32 模块不为这些常量提供符号名称。

PRODUCTTYPE 提供有关系统的其他信息。它应该是以下整数值之一

1 - Workstation (NT 4, 2000 Pro, XP Home, XP Pro, Vista, etc)
2 - Domaincontroller
3 - Server (2000 Server, Server 2003, Server 2008, etc)

请注意,既是服务器又是域控制器的服务器报告为 PRODUCTTYPE 2(域控制器),而不是 PRODUCTTYPE 3(服务器)。

Win32::GetShortPathName(PATHNAME)

[CORE] 返回 PATHNAME 的表示形式,该表示形式由短(8.3)路径组件(如果可用)组成。对于文件系统尚未生成短形式的路径组件,返回的路径将使用长形式,因此此函数仍可能返回包含空格的路径。当 PATHNAME 不存在时返回 undef。与 Win32::GetFullPathName() 和 Win32::GetLongPathName() 进行比较。

Win32::GetSystemMetrics(INDEX)

检索指定的系统指标或系统配置设置。有关可用 INDEX 值的参考,请参阅 GetSystemMetrics() 函数的 Microsoft 文档。所有系统指标都返回整数值。

Win32::GetProcAddress(INSTANCE, PROCNAME)

返回加载的库中函数的地址。有关如何使用此地址的信息已在时间的迷雾中丢失。使用 Win32::API 模块,而不是此已弃用的函数。

Win32::GetProcessPrivileges([PID])

返回对保存指定进程所持有的权限的信息的哈希的引用。键是权限名称,值是布尔值,指示给定的权限当前是否已启用。

如果省略可选的 PID 参数,则该函数会查询当前进程。

示例返回值

{
    SeTimeZonePrivilege => 0,
    SeShutdownPrivilege => 0,
    SeUndockPrivilege => 0,
    SeIncreaseWorkingSetPrivilege => 0,
    SeChangeNotifyPrivilege => 1
}
Win32::GetProductInfo(OSMAJOR, OSMINOR, SPMAJOR, SPMINOR)

检索本地计算机上操作系统的产品类型,并将该类型映射到指定操作系统支持的产品类型。有关参数和返回值的更多信息,请参阅 GetProductInfo() 函数的 Microsoft 文档。此函数需要 Windows Vista 或更高版本。

另请参阅 Win32::GetOSName() 和 Win32::GetOSDisplayName() 函数,它们提供了此函数返回的数据的更高级别的抽象。

Win32::GetTickCount()

[CORE] 返回自上次系统启动以来经过的毫秒数。分辨率受限于系统计时器滴答(在 WinNT 上约为 10 毫秒,在 Win9X 上约为 55 毫秒)。

Win32::GuidGen()

创建全局唯一的 128 位整数,可在分布式设置中用作持久标识符。此函数在极大程度上返回唯一值。在同一系统或任何其他系统(无论是否联网)上,没有其他调用应返回相同的值。

返回值按照 OLE 约定进行格式化,即带有周围大括号的十六进制数字组。例如

{09531CF1-D0C7-4860-840C-1C8C8735E2AD}
Win32::HttpGetFile(URL, FILENAME [, IGNORE_CERT_ERRORS])

使用 WinHttp 库将 URL 参数指定的文件下载到 FILENAME 指定的本地文件。如果为 true,则可选的第三个参数表示要忽略 https 连接的证书错误;请在安全环境中谨慎使用,例如在使用自签名证书在本地测试时。

仅支持 http 和 https 协议。不支持身份验证。在使用早于 4.8.0 的 gcc 进行构建时,此函数不可用,因为 WinHttp 库不可用。

在标量上下文中返回布尔值成功或失败,在列表上下文中除了布尔状态外,还返回第二个值,其中包含与状态相关的消息文本。

如果调用失败,Win32::GetLastError() 将返回一个数字错误代码,该代码可能是系统错误、WinHttp 错误或由 1e9 加上 HTTP 状态代码组成的用户定义错误。

标量上下文示例

print Win32::GetLastError()
    unless Win32::HttpGetFile('http://example.com/somefile.tar.gz',
                              '.\file.tgz');

列表上下文示例

my ($ok, $msg) = Win32::HttpGetFile('http://example.com/somefile.tar.gz',
                                    '.\file.tgz');
if ($ok) {
    print "Success!: $msg\n";
}
else {
    print "Failure!: $msg\n";
    my $err = Win32::GetLastError();
    if ($err > 1e9) {
        printf "HTTP status: %d\n", ($err - 1e9);
    }
}
Win32::InitiateSystemShutdown

(MACHINE, MESSAGE, TIMEOUT, FORCECLOSE, REBOOT)

在指定的 TIMEOUT 时间间隔内关闭指定的 MACHINE,使用提供的 MESSAGE 通知用户。如果 FORCECLOSE 为 true,则强制关闭所有文档,而不提示用户,如果 REBOOT 为 true,则重新启动计算机。此函数仅适用于 WinNT。

Win32::IsAdminUser()

如果正在运行当前进程/线程的安全上下文的帐户属于内置系统域中的 Administrators 本地组,则返回非零值;如果不属于,则返回 0。在 Windows Vista 中,只有当进程实际以提升的权限运行时,它才会返回非零值。如果发生错误,则返回 undef 并打印警告。此函数在 Win9X 中始终返回 1。

Win32::IsDeveloperModeEnabled()

如果当前启用了开发人员模式,则返回 true。它在低于 Windows 10 的 Windows 版本中始终返回 false。

Win32::IsSymlinkCreationAllowed()

如果允许当前进程创建符号链接,则返回 true。此函数是 Win32::GetProcessPrivileges() 和 Win32::IsDeveloperModeEnabled() 的便捷包装器。

Win32::IsWinNT()

[CORE] 如果 Win32 子系统是 Windows NT,则返回非零值。

Win32::IsWin95()

[CORE] 如果 Win32 子系统是 Windows 95,则返回非零值。

Win32::LoadLibrary(LIBNAME)

将动态链接库加载到内存中并返回其模块句柄。此句柄可与 Win32::GetProcAddress() 和 Win32::FreeLibrary() 一起使用。此函数已弃用。请改用 Win32::API 模块。

Win32::LoginName()

[CORE] 返回当前 perl 进程所有者的用户名。返回值可能是 Unicode 字符串。

Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID, SIDTYPE)

在 SYSTEM 上查找 ACCOUNT 并返回域名称 SID 和 SID 类型。

Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE)

在 SYSTEM 上查找 SID 并返回帐户名称、域名称和 SID 类型。

Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]])

创建一个包含 MESSAGE 的对话框。FLAGS 根据下表指定所需的图标和按钮

0 = OK
1 = OK and Cancel
2 = Abort, Retry, and Ignore
3 = Yes, No and Cancel
4 = Yes and No
5 = Retry and Cancel

MB_ICONSTOP          "X" in a red circle
MB_ICONQUESTION      question mark in a bubble
MB_ICONEXCLAMATION   exclamation mark in a yellow triangle
MB_ICONINFORMATION   "i" in a bubble

TITLE 指定可选窗口标题。默认值为“Perl”。

该函数返回所选按钮的菜单 ID

0  Error

1  OK
2  Cancel
3  Abort
4  Retry
5  Ignore
6  Yes
7  No
Win32::NodeName()

[CORE] 返回当前计算机的 Microsoft Network 节点名称。

Win32::OutputDebugString(STRING)

将字符串发送到应用程序或系统调试器以显示。如果没有活动调试器,该函数将不执行任何操作。

或者,可以使用调试查看器应用程序来查看 OutputDebugString() 输出

http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx

Win32::RegisterServer(LIBRARYNAME)

加载 DLL LIBRARYNAME 并调用函数 DllRegisterServer。

Win32::SetChildShowWindow(SHOWWINDOW)

[CORE] 设置由 system() 启动的子进程的ShowMode。如果 Perl 本身不是从控制台运行,则 system() 默认情况下会为子进程创建一个新的控制台窗口。调用 SetChildShowWindow(0) 将使这些新的控制台窗口不可见。在没有参数的情况下调用 SetChildShowWindow() 会使 system() 恢复为默认行为。SetChildShowWindow() 的返回值是之前的设置或undef

以下 SHOWWINDOW 符号常量可从 Win32 模块获取(但未导出):SW_HIDE、SW_SHOWNORMAL、SW_SHOWMINIMIZED、SW_SHOWMAXIMIZED 和 SW_SHOWNOACTIVATE。

Win32::SetConsoleCP(ID)

设置与调用进程关联的控制台使用的输入代码页。SetConsoleCP() 的返回值在成功时为非零,在失败时为零。要获取控制台的输入代码页,请参见 GetConsoleCP()。

Win32::SetConsoleOutputCP(ID)

设置与调用进程关联的控制台使用的输出代码页。SetConsoleOutputCP() 的返回值在成功时为非零,在失败时为零。要获取控制台的输出代码页,请参见 GetConsoleOutputCP()。

Win32::SetCwd(NEWDIRECTORY)

[核心] 设置当前活动驱动器和目录。此函数不适用于 UNC 路径,因为 Windows 95 下不提供此类功能所需的功能。

Win32::SetLastError(ERROR)

[核心] 将遇到的最后一个错误的值设置为 ERROR。这是 Win32::GetLastError() 函数将返回的值。

Win32::Sleep(TIME)

[核心] 暂停 TIME 毫秒。将时间片提供给其他进程和线程。

Win32::Spawn(COMMAND, ARGS, PID)

[核心] 使用提供的 COMMAND 生成一个新进程,在字符串 ARGS 中传递参数。新进程的 pid 存储在 PID 中。此函数已弃用。请改用 Win32::Process 模块。

Win32::UnregisterServer(LIBRARYNAME)

加载 DLL LIBRARYNAME 并调用函数 DllUnregisterServer。

注意事项

短路径名

在许多情况下,现代 Windows 系统将不会为长文件名提供 短路径名(也称为 8.3 或 MS-DOS)别名。

可以通过注册表在系统范围内配置短路径支持,但现代系统上的默认设置是按卷配置短路径使用情况。可以通过多种方式查询卷的配置,但这些方式可能不可靠或需要提升的(管理员)权限。

通常,可以使用 fsutil 实用程序查询卷的配置,例如 fsutil 8dot3name query d:。在 C 级,可以使用 FSCTL_QUERY_PERSISTENT_VOLUME_STATE 请求向 DeviceIOControl API 调用进行查询,如 本文 所述。但是,这两种方法都需要管理员权限才能工作。

Win32 模块不执行任何按卷检查,并且只以其使用的底层 Windows API 调用相同的方式获取短路径名:如果禁用短路径名,调用仍会成功,但实际上会返回长名称。

请注意,在发生这种情况的卷上,通常无法使用GetANSIPathName为包含 Unicode 字符的文件返回有用的文件名。(在代码页 65001 中,这可能仍然有效。)以这种旧方式处理 Unicode 文件名依赖于GetShortPathName返回 8.3 文件名,但如果没有短名称支持,它将返回所有 Unicode 字符都替换为问号字符的文件名。