Win32 - 與一些 Win32 API 函數的介面
Win32 模組包含存取 Win32 API 的函數。
建議在使用任何這些函數之前use Win32;
;不過,為了向後相容性,標示為 [CORE] 的函數會自動為您執行此動作。
在下列函數說明中,術語Unicode 字串用於表示字串可能包含系統編碼頁以外的字元。注意事項如果核心 Perl 版本支援通常表示 Perl 5.8.9 及更新版本,儘管某些 Unicode 路徑名稱功能可能可以在較早版本上運作。
中斷在指定 MACHINE 上的系統關機(由 InitiateSystemShutdown 函數啟動)。
[CORE] 傳回 ActivePerl 建置編號。此函數僅在 ActivePerl 二進位發行版中提供。
[核心] Win32::CopyFile() 函數會將現有檔案複製到新檔案。所有檔案資訊,例如建立時間和檔案屬性,都會複製到新檔案。然而,它不會複製安全性資訊。如果目標檔案已存在,只有在 OVERWRITE 參數為 true 時才會覆寫。但即使如此,也不會覆寫唯讀檔案;您必須先自行解除連結()。
建立 DIRECTORY 並在成功時傳回 true 值。如果失敗,請檢查 $^E 以取得延伸錯誤資訊。
DIRECTORY 可能包含系統編碼頁以外的 Unicode 字元。建立目錄後,您可以使用 Win32::GetANSIPathName() 取得可以傳遞給系統呼叫和外部程式碼的名稱。
建立 FILE 並在成功時傳回 true 值。如果失敗,請檢查 $^E 以取得延伸錯誤資訊。
FILE 可能包含系統編碼頁以外的 Unicode 字元。建立檔案後,您可以使用 Win32::GetANSIPathName() 取得可以傳遞給系統呼叫和外部程式碼的名稱。
[核心] 傳回目前 perl 程序擁有者所登入的 Microsoft 網路網域或工作群組名稱。「工作站」服務必須執行才能判斷此資訊。此函數不適用於 Windows 9x。
取得 STRING 並將所有參考的環境變數名稱替換為其定義的值。對環境變數的參考採用 %變數名稱%
的形式。在環境中查詢變數名稱時,會忽略大小寫。如果找不到變數,則保留原始的 %變數名稱%
文字。具有下列效果
$string =~ s/%([^%]*)%/$ENV{$1} || "%$1%"/eg
然而,如果未透過 %ENV 指派要擴充的環境變數,此函數可能會傳回 Unicode 字串。目前對 %ENV 的存取總是使用位元組語意。
[核心] 將提供的 Win32 錯誤號碼 (例如由 Win32::GetLastError() 傳回) 轉換為描述性字串。類似於標準 C 函式庫函數 perror()。請注意,在字串內容中使用的 $^E
具有非常相似的效果。
C:\> perl -e "$^E = 26; print $^E;"
The specified disk or diskette cannot be accessed
[核心] 傳回目前活動磁碟機的檔案系統名稱 (例如「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 是此檔案系統上檔案名稱元件 (兩個反斜線之間的部分) 的最大長度。
卸載先前載入的動態連結函式庫。在呼叫此函式後,HANDLE 將不再有效。有關動態載入函式庫的資訊,請參閱 LoadLibrary。
傳回作業系統目前的 Windows ANSI 程式碼頁識別碼。另請參閱 GetOEMCP()、GetConsoleCP() 和 GetConsoleOutputCP()。
傳回 FILENAME 的 ANSI 版本。如果無法在系統程式碼頁中表示長檔名,則可能是短檔名。
雖然目前尚未實作,但未來此函式可能會將 FILENAME 路徑的某些部分轉換為短格式。
如果 FILENAME 不存在於檔案系統中,或是檔案系統不支援短 ANSI 檔名,則此函式會使用取代字元將 Unicode 名稱轉換為系統程式碼頁。
此函式的使用已不建議。它等於 $ENV{PROCESSOR_ARCHITECTURE}。這可能無法在 Win9X 上運作。
傳回處理器類型:x86 處理器的 386、486 或 586,x64 處理器的 8664,以及 Itanium 的 2200。對於 arm/arm64 處理器,其值在 Microsoft 文件中標示為「保留」(未指定,但通常為 0),因此最好使用 GetChipArch()。由於它傳回原生處理器類型,因此即使從 64 位元 Windows 上執行的 32 位元 Perl 呼叫,它也會傳回 64 位元處理器類型。
傳回處理器架構:x86 處理器的 0,arm 的 5,Itanium 的 6,x64 的 9,arm64 的 12,以及未知架構的 0xFFFF。
傳回呼叫處理序相關聯主控台使用的輸入程式碼頁。若要設定主控台的輸入程式碼頁,請參閱 SetConsoleCP()。另請參閱 GetConsoleOutputCP()、GetACP() 和 GetOEMCP()。
傳回呼叫處理序相關聯主控台使用的輸出程式碼頁。若要設定主控台的輸出程式碼頁,請參閱 SetConsoleOutputCP()。另請參閱 GetConsoleCP()、GetACP() 和 GetOEMCP()。
[核心] 傳回目前活動的磁碟機和目錄。此函數不會傳回 UNC 路徑,因為 Windows 95 不支援此功能所需的功能。
如果核心 Perl 版本支援,此函數會傳回目前目錄的 ANSI 路徑名稱,如果無法在系統代碼頁中表示長路徑名稱。
傳回目前程序的程序識別碼。在程序終止之前,程序識別碼會在整個系統中唯一識別該程序。
目前程序識別碼通常也可以透過預先定義的 $$ 變數取得。但在 fork() 模擬下,$$ 可能包含一個偽程序識別碼,而這個識別碼只對 Perl 的 kill()、wait() 和 waitpid() 函數有意義。Win32::GetCurrentProcessId() 函數會永遠傳回一般的 Windows 程序識別碼,即使從偽程序內部呼叫也是如此。
傳回呼叫執行緒的執行緒識別碼。在執行緒終止之前,執行緒識別碼會在整個系統中唯一識別該執行緒。
從可執行檔或 DLL 的 VERSIONINFO 資源傳回檔案版本號碼。這是四個 16 位元數字的組。在清單內容中,會傳回這四個數字。在純量內容中,它們會串接成一個字串,並以點號分隔。
傳回 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()。
[核心] GetFullPathName 將 FILENAME 與目前的磁碟機和目錄名稱結合,並傳回一個完全限定 (又稱絕對) 路徑名稱。在清單內容中,它會傳回兩個元素:(PATH, FILE),其中 PATH 是完整的路徑名稱元件 (包括尾隨反斜線),而 FILE 只是檔案名稱部分。請注意,不會嘗試將提供的 FILENAME 中的 8.3 元件轉換成長檔名或反之亦然。請與 Win32::GetShortPathName() 和 Win32::GetLongPathName() 進行比較。
如果核心 Perl 版本支援,此函式會傳回 ANSI 路徑名稱,如果無法在系統代碼頁中表示完整的路徑名稱。
[核心] 傳回呼叫 Win32 API 函式所產生的最後一個錯誤值。請注意,在數字內容中使用的 $^E
等於相同的值。
[核心] 傳回由長檔名元件 (如果有) 組成的 PATHNAME 表示。結果不一定會比 PATHNAME 長。不會嘗試將 PATHNAME 轉換為絕對路徑。請與 Win32::GetShortPathName() 和 Win32::GetFullPathName() 進行比較。
如果無法在系統代碼頁中表示此函式,它可能會傳回 Unicode 中的路徑名稱。在將路徑傳遞給系統呼叫或其他程式之前,請使用 Win32::GetANSIPathName()。
[核心] 傳回 "<d>:" 形式的字串,其中 <d> 是第一個可用的磁碟機代號。
傳回作業系統目前的原始設備製造商 (OEM) 代碼頁識別碼。另請參閱 GetACP()、GetConsoleCP() 和 GetConsoleOutputCP()。
傳回所使用的 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 作業系統名稱。在清單內容中,傳回作業系統名稱和已知特定建置版本(適用於 Win9X 電腦)的任何版本資訊,以及已安裝的任何服務套件。後者大致等於 GetOSVersion() 在清單內容中傳回的第一個項目。
說明中也會包含其他特別版本標籤,例如「R2」、「Media Center」、「Tablet PC」或「Starter Edition」。
在 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」,但出於向下相容性考量,仍維持原樣。
[核心]傳回清單 (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 Home Server 的版本號碼相同;必須使用 SUITEMASK 欄位來區分它們。
Windows Vista 和 Windows Server 2008 的版本號碼相同;必須使用 PRODUCTTYPE 欄位來區分它們。
Windows 7 和 Windows Server 2008 R2 的版本號碼相同;必須使用 PRODUCTTYPE 欄位來區分它們。
Windows 8 和 Windows Server 2012 的版本號碼相同;必須使用 PRODUCTTYPE 欄位來區分它們。
對於現代 Windows 版本,主要和次要版本號碼相同。必須使用 PRODUCTTYPE 欄位來區分 Windows 10 和 Server 版本。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 (Domaincontroller),而不是 PRODUCTTYPE 3 (Server)。
[核心] 傳回 PATHNAME 的表示形式,其中包含短 (8.3) 路徑組件(如果可用)。對於檔案系統尚未產生短格式的路徑組件,傳回的路徑將使用長格式,因此此函數可能仍會傳回包含空格的路徑。當 PATHNAME 不存在時傳回 undef
。與 Win32::GetFullPathName() 和 Win32::GetLongPathName() 比較。
擷取指定的系統指標或系統組態設定。請參閱 GetSystemMetrics() 函數的 Microsoft 文件,以取得可用的 INDEX 值參考。所有系統指標都傳回整數值。
傳回已載入函式庫中函數的位址。關於您可以使用此位址執行的資訊已隨著時間流逝而遺失。請改用 Win32::API 模組,而非此已棄用的函數。
傳回一個參考,持有指定程序所擁有的權限資訊。金鑰是權限名稱,而值是布林值,表示特定權限目前是否已啟用。
如果省略選用的 PID 參數,函數會查詢目前的程序。
範例傳回值
{
SeTimeZonePrivilege => 0,
SeShutdownPrivilege => 0,
SeUndockPrivilege => 0,
SeIncreaseWorkingSetPrivilege => 0,
SeChangeNotifyPrivilege => 1
}
擷取本機電腦上作業系統的產品類型,並將類型對應到指定作業系統支援的產品類型。有關參數和傳回值的詳細資訊,請參閱 GetProductInfo() 函數的 Microsoft 文件。此函數需要 Windows Vista 或更新版本。
另請參閱 Win32::GetOSName() 和 Win32::GetOSDisplayName() 函數,它們提供此函數傳回資料的較高層次抽象。
[核心] 傳回自上次系統開機以來經過的毫秒數。解析度受限於系統計時器滴答 (WinNT 約 10 毫秒,Win9X 約 55 毫秒)。
建立一個 128 位元全域唯一整數,可用於分散式設定中的持續識別碼。此函數在極高程度上傳回唯一值。在相同或任何其他系統 (無論是否為網路) 上的其他呼叫都不應傳回相同的值。
傳回值會根據 OLE 慣例格式化,為一組十六進位數字,並以大括號包圍。例如
{09531CF1-D0C7-4860-840C-1C8C8735E2AD}
使用 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);
}
}
(MACHINE, MESSAGE, TIMEOUT, FORCECLOSE, REBOOT)
關閉指定的 MACHINE,在指定的 TIMEOUT 間隔內使用提供的 MESSAGE 通知使用者。如果 FORCECLOSE 為 true,則強制關閉所有文件,而不提示使用者,如果 REBOOT 為 true,則重新開機機器。此功能僅在 WinNT 上執行。
如果執行目前程序/執行緒的安全性環境中的帳戶屬於內建系統網域中的 Administrators 本機群組,則傳回非零值;如果不是,則傳回 0。在 Windows Vista 上,只有當程序實際上以提升的權限執行時,才會傳回非零值。如果發生錯誤,則傳回 undef
並印出警告。此功能在 Win9X 上總是傳回 1。
如果目前已啟用開發人員模式,則傳回 true。在 Windows 10 以前的 Windows 版本中,它總是傳回 false。
如果允許目前程序建立符號連結,則傳回 true。此功能是 Win32::GetProcessPrivileges() 和 Win32::IsDeveloperModeEnabled() 的便利包裝器。
[核心] 如果 Win32 子系統為 Windows NT,則傳回非零值。
[核心] 如果 Win32 子系統為 Windows 95,則傳回非零值。
將動態連結程式庫載入記憶體並傳回其模組控制代碼。此控制代碼可用於 Win32::GetProcAddress() 和 Win32::FreeLibrary()。此功能已過時。請改用 Win32::API 模組。
[核心] 傳回目前 perl 程序擁有者的使用者名稱。傳回值可能是 Unicode 字串。
在 SYSTEM 上查詢 ACCOUNT,並傳回網域名稱、SID 和 SID 類型。
在 SYSTEM 上查詢 SID,並傳回帳戶名稱、網域名稱和 SID 類型。
建立一個包含 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
[核心] 傳回目前電腦的 Microsoft 網路節點名稱。
將字串傳送至應用程式或系統偵錯程式以顯示。如果沒有啟動偵錯程式,函式不會執行任何動作。
或者,可以使用 Debug Viewer 應用程式來觀看 OutputDebugString() 輸出
http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx
載入 DLL LIBRARYNAME 並呼叫函式 DllRegisterServer。
[核心] 設定 system() 所啟動子程序的 ShowMode。如果 Perl 本身不是從主控台執行,預設情況下,system() 會為子程序建立一個新的主控台視窗。呼叫 SetChildShowWindow(0) 會讓這些新的主控台視窗隱藏。呼叫 SetChildShowWindow() 而沒有參數會將 system() 還原為預設行為。SetChildShowWindow() 的傳回值為前一個設定或 undef
。
Win32 模組提供下列 SHOWWINDOW 的符號常數(但未匯出):SW_HIDE、SW_SHOWNORMAL、SW_SHOWMINIMIZED、SW_SHOWMAXIMIZED 和 SW_SHOWNOACTIVATE。
設定呼叫處理序關聯主控台使用的輸入代碼頁。SetConsoleCP() 的傳回值在成功時為非零,失敗時為零。若要取得主控台的輸入代碼頁,請參閱 GetConsoleCP()。
設定呼叫處理序關聯主控台使用的輸出代碼頁。SetConsoleOutputCP() 的傳回值在成功時為非零,失敗時為零。若要取得主控台的輸出代碼頁,請參閱 GetConsoleOutputCP()。
[核心] 設定目前活動磁碟機和目錄。此函式無法使用 UNC 路徑,因為 Windows 95 不支援此類功能所需的功能。
[核心] 將遇到的最後一個錯誤值設定為 ERROR。這是 Win32::GetLastError() 函式將傳回的值。
[核心] 暫停 TIME 毫秒。時間區段會提供給其他處理序和執行緒。
[核心] 使用提供的 COMMAND 產生新的處理序,並傳入 ARGS 字串中的引數。新處理序的 PID 會儲存在 PID 中。此函式已棄用。請改用 Win32::Process 模組。
載入 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 字元都已替換為問號字元的檔名。