GetXxxFormat Functions (National Language Support Functions) (msdn-docs)
- GetCurrencyFormat & GetCurrencyFormatEx (Formats a number string as a currency string)
- GetNumberFormat & GetNumberFormatEx (Formats a number string as a number string)
- GetDurationFormat & GetDurationFormatEx (Formats a duration of time as a time string)
- GetDateFormat & GetDateFormatEx (Formats a date as a date string)
- GetTimeFormat & GetTimeFormatEx (Formats time as a time string)
[WinAPI] GetXxxFormat Functions
[WinAPI] GetXxxFormat Functions
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: WinAPI GetXxxFormat Functions
GetCurrencyFormat (msdn-docs)
GetCurrencyFormatEx (Vista or later) (msdn-docs)
Code: Select all
; ===============================================================================================================================
; Function ...: GetCurrencyFormat
; Return .....: Formats a number string as a currency string for a locale specified by identifier.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getcurrencyformata
; ===============================================================================================================================
GetCurrencyFormat(Value, Locale := 0x0400)
{
if (Size := DllCall("GetCurrencyFormat", "uint", Locale, "uint", 0, "str", Value, "ptr", 0, "ptr", 0, "int", 0)) {
VarSetCapacity(CurrencyStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetCurrencyFormat", "uint", Locale, "uint", 0, "str", Value, "ptr", 0, "str", CurrencyStr, "int", Size))
return CurrencyStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetCurrencyFormat(1149.99) ; -> 1.149,99 € ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetCurrencyFormat(1149.99, 0x0409) ; -> $1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetCurrencyFormat(1149.99, 0x0809) ; -> £1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_UK )
MsgBox % GetCurrencyFormat(1149.99, 0x0407) ; -> 1.149,99 € ( LANG_GERMAN | SUBLANG_GERMAN )
GetCurrencyFormatEx (Vista or later) (msdn-docs)
Code: Select all
; ===============================================================================================================================
; Function ...: GetCurrencyFormatEx
; Return .....: Formats a number string as a currency string for a locale specified by name.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getcurrencyformatex
; ===============================================================================================================================
GetCurrencyFormatEx(Value, LocaleName := "!x-sys-default-locale")
{
if (Size := DllCall("GetCurrencyFormatEx", "str", LocaleName, "uint", 0, "str", Value, "ptr", 0, "ptr", 0, "int", 0)) {
VarSetCapacity(CurrencyStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetCurrencyFormatEx", "str", LocaleName, "uint", 0, "str", Value, "ptr", 0, "str", CurrencyStr, "int", Size))
return CurrencyStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetCurrencyFormatEx(1149.99) ; -> 1.149,99 € ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetCurrencyFormatEx(1149.99, "en-US") ; -> $1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetCurrencyFormatEx(1149.99, "en-GB") ; -> £1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetCurrencyFormatEx(1149.99, "de-DE") ; -> 1.149,99 € ( LANG_GERMAN | SUBLANG_GERMAN )
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: WinAPI GetXxxFormat Functions
GetNumberFormat (msdn-docs)
GetNumberFormatEx (Vista or later) (msdn-docs)
Code: Select all
; ===============================================================================================================================
; Function ...: GetNumberFormat
; Return .....: Formats a number string as a number string customized for a locale specified by identifier.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getnumberformata
; ===============================================================================================================================
GetNumberFormat(Value, Locale := 0x0400)
{
if (Size := DllCall("GetNumberFormat", "uint", Locale, "uint", 0, "str", Value, "ptr", 0, "ptr", 0, "int", 0)) {
VarSetCapacity(NumberStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetNumberFormat", "uint", Locale, "uint", 0, "str", Value, "ptr", 0, "str", NumberStr, "int", Size))
return NumberStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetNumberFormat(1149.99) ; -> 1.149,99 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetNumberFormat(1149.99, 0x0409) ; -> 1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetNumberFormat(1149.99, 0x0809) ; -> 1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_UK )
MsgBox % GetNumberFormat(1149.99, 0x0407) ; -> 1.149,99 ( LANG_GERMAN | SUBLANG_GERMAN )
GetNumberFormatEx (Vista or later) (msdn-docs)
Code: Select all
; ===============================================================================================================================
; Function ...: GetNumberFormatEx
; Return .....: Formats a number string as a number string customized for a locale specified by name.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getnumberformatex
; ===============================================================================================================================
GetNumberFormatEx(Value, LocaleName := "!x-sys-default-locale")
{
if (Size := DllCall("GetNumberFormatEx", "str", LocaleName, "uint", 0, "str", Value, "ptr", 0, "ptr", 0, "int", 0)) {
VarSetCapacity(NumberStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetNumberFormatEx", "str", LocaleName, "uint", 0, "str", Value, "ptr", 0, "str", NumberStr, "int", Size))
return NumberStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetNumberFormatEx(1149.99) ; -> 1.149,99 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetNumberFormatEx(1149.99, "en-US") ; -> 1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetNumberFormatEx(1149.99, "en-GB") ; -> 1,149.99 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetNumberFormatEx(1149.99, "de-DE") ; -> 1.149,99 ( LANG_GERMAN | SUBLANG_GERMAN )
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: WinAPI GetXxxFormat Functions
GetDurationFormat (msdn-docs)
GetDurationFormatEx (Vista or later) (msdn-docs)
Possible Format Values
Code: Select all
; ===============================================================================================================================
; Function ...: GetDurationFormat
; Return .....: Formats a duration of time as a time string for a locale specified by identifier.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getdurationformat
; ===============================================================================================================================
GetDurationFormat(Duration, Format := "", Locale := 0x0400)
{
if (Size := DllCall("GetDurationFormat", "uint", Locale, "uint", 0, "ptr", 0, "int64", Duration * 10000000, "ptr", (Format ? &Format : 0), "ptr", 0, "int", 0)) {
VarSetCapacity(DurationStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetDurationFormat", "uint", Locale, "uint", 0, "ptr", 0, "int64", Duration * 10000000, "ptr", (Format ? &Format : 0), "str", DurationStr, "int", Size))
return DurationStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetDurationFormat(43170) ; -> 11:59:30
MsgBox % GetDurationFormat(43170, "mm' Minutes") ; -> 719 Minutes
MsgBox % GetDurationFormat(43170, "hh' Hours and 'mm' Minutes") ; -> 11 Hours and 59 Minutes
GetDurationFormatEx (Vista or later) (msdn-docs)
Code: Select all
; ===============================================================================================================================
; Function ...: GetDurationFormatEx
; Return .....: Formats a duration of time as a time string for a locale specified by name.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getdurationformatex
; ===============================================================================================================================
GetDurationFormatEx(Duration, Format := "hh:mm:ss", LocaleName := "!x-sys-default-locale")
{
if (Size := DllCall("GetDurationFormatEx", "str", LocaleName, "uint", 0, "ptr", 0, "int64", Duration * 10000000, "ptr", (Format ? &Format : 0), "ptr", 0, "int", 0)) {
VarSetCapacity(DurationStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetDurationFormatEx", "str", LocaleName, "uint", 0, "ptr", 0, "int64", Duration * 10000000, "ptr", (Format ? &Format : 0), "str", DurationStr, "int", Size))
return DurationStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetDurationFormatEx(43170) ; -> 11:59:30
MsgBox % GetDurationFormatEx(43170, "mm' Minutes") ; -> 719 Minutes
MsgBox % GetDurationFormatEx(43170, "hh' Hours and 'mm' Minutes") ; -> 11 Hours and 59 Minutes
Possible Format Values
Code: Select all
d -> days
h or H -> hours
hh or HH -> hours; if less than ten, prepend a leading zero
m -> minutes
mm -> minutes; if less than ten, prepend a leading zero
s -> seconds
ss -> seconds; if less than ten, prepend a leading zero
f -> fractions of a second
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: WinAPI GetXxxFormat Functions
GetDateFormat (msdn-docs)
GetDateFormatEx (Vista or later) (msdn-docs)
Possible Format Values
Defined in Day, Month, Year, and Era Format Pictures.
Code: Select all
; ===============================================================================================================================
; Function ...: GetDateFormat
; Return .....: Formats a date as a date string for a locale specified by the locale identifier.
; The function formats either a specified date or the local system date.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/datetimeapi/nf-datetimeapi-getdateformata
; ===============================================================================================================================
GetDateFormat(Date, Format := "", Locale := 0x0400)
{
VarSetCapacity(SYSTEMTIME, 16, 0)
NumPut(SubStr(Date, 1, 4), SYSTEMTIME, 0, "ushort") ; Year
NumPut(SubStr(Date, 5, 2), SYSTEMTIME, 2, "ushort") ; Month
NumPut(SubStr(Date, 7, 2), SYSTEMTIME, 6, "ushort") ; Day
NumPut(SubStr(Date, 9, 2), SYSTEMTIME, 8, "ushort") ; Hour
NumPut(SubStr(Date, 11, 2), SYSTEMTIME, 10, "ushort") ; Minutes
NumPut(SubStr(Date, 13, 2), SYSTEMTIME, 12, "ushort") ; Seconds
if (Size := DllCall("GetDateFormat", "uint", Locale, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "ptr", 0, "int", 0)) {
VarSetCapacity(DateStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetDateFormat", "uint", Locale, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "str", DateStr, "int", Size))
return DateStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetDateFormat(A_Now) ; -> 01.09.2020 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetDateFormat(A_Now, "dddd',' dd. MMMM yyyy") ; -> Dienstag, 01. September 2020 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetDateFormat(A_Now, "", 0x0409) ; -> 09/01/2020 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetDateFormat(A_Now, "yyyy, gg") ; -> 2020, n. Chr. ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
GetDateFormatEx (Vista or later) (msdn-docs)
Code: Select all
; ===============================================================================================================================
; Function ...: GetDateFormatEx
; Return .....: Formats a date as a date string for a locale specified by name.
; The function formats either a specified date or the local system date.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/datetimeapi/nf-datetimeapi-getdateformatex
; ===============================================================================================================================
GetDateFormatEx(Date, Format := "", LocaleName := "!x-sys-default-locale")
{
VarSetCapacity(SYSTEMTIME, 16, 0)
NumPut(SubStr(Date, 1, 4), SYSTEMTIME, 0, "ushort") ; Year
NumPut(SubStr(Date, 5, 2), SYSTEMTIME, 2, "ushort") ; Month
NumPut(SubStr(Date, 7, 2), SYSTEMTIME, 6, "ushort") ; Day
NumPut(SubStr(Date, 9, 2), SYSTEMTIME, 8, "ushort") ; Hour
NumPut(SubStr(Date, 11, 2), SYSTEMTIME, 10, "ushort") ; Minutes
NumPut(SubStr(Date, 13, 2), SYSTEMTIME, 12, "ushort") ; Seconds
if (Size := DllCall("GetDateFormatEx", "str", LocaleName, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "ptr", 0, "int", 0, "ptr", 0)) {
VarSetCapacity(DateStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetDateFormatEx", "str", LocaleName, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "str", DateStr, "int", Size, "ptr", 0))
return DateStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetDateFormatEx(A_Now) ; -> 01.09.2020 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetDateFormatEx(A_Now, "dddd',' dd. MMMM yyyy") ; -> Dienstag, 01. September 2020 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetDateFormatEx(A_Now, "", "en-US") ; -> 09/01/2020 ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetDateFormatEx(A_Now, "yyyy, gg", "en-US") ; -> 2020, A.D. ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
Possible Format Values
Defined in Day, Month, Year, and Era Format Pictures.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: WinAPI GetXxxFormat Functions
GetTimeFormat (msdn-docs)
GetTimeFormatEx (Vista or later) (msdn-docs)
Possible Format Values
Code: Select all
; ===============================================================================================================================
; Function ...: GetTimeFormat
; Return .....: Formats time as a time string for a locale specified by identifier.
; The function formats either a specified time or the local system time.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/datetimeapi/nf-datetimeapi-gettimeformata
; ===============================================================================================================================
GetTimeFormat(Time, Format := "", Locale := 0x0400)
{
VarSetCapacity(SYSTEMTIME, 16, 0)
NumPut(SubStr(Time, 1, 4), SYSTEMTIME, 0, "ushort") ; Year
NumPut(SubStr(Time, 5, 2), SYSTEMTIME, 2, "ushort") ; Month
NumPut(SubStr(Time, 7, 2), SYSTEMTIME, 6, "ushort") ; Day
NumPut(SubStr(Time, 9, 2), SYSTEMTIME, 8, "ushort") ; Hour
NumPut(SubStr(Time, 11, 2), SYSTEMTIME, 10, "ushort") ; Minutes
NumPut(SubStr(Time, 13, 2), SYSTEMTIME, 12, "ushort") ; Seconds
if (Size := DllCall("GetTimeFormat", "uint", Locale, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "ptr", 0, "int", 0)) {
VarSetCapacity(TimeStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetTimeFormat", "uint", Locale, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "str", TimeStr, "int", Size))
return TimeStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetTimeFormat(A_Now) ; -> 11:46:49 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetTimeFormat(A_Now, "", 0x0409) ; -> 11:46:58 AM ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetTimeFormat(A_Now, "HH':'mm") ; -> 11:46 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetTimeFormat(A_Now, "hh':'mm':'ss tt", 0x0409) ; -> 11:46:58 AM ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
GetTimeFormatEx (Vista or later) (msdn-docs)
Code: Select all
; ===============================================================================================================================
; Function ...: GetTimeFormatEx
; Return .....: Formats time as a time string for a locale specified by name.
; The function formats either a specified time or the local system time.
; Link .......: https://docs.microsoft.com/en-us/windows/win32/api/datetimeapi/nf-datetimeapi-gettimeformatex
; ===============================================================================================================================
GetTimeFormatEx(Time, Format := "", LocaleName := "!x-sys-default-locale")
{
VarSetCapacity(SYSTEMTIME, 16, 0)
NumPut(SubStr(Time, 1, 4), SYSTEMTIME, 0, "ushort") ; Year
NumPut(SubStr(Time, 5, 2), SYSTEMTIME, 2, "ushort") ; Month
NumPut(SubStr(Time, 7, 2), SYSTEMTIME, 6, "ushort") ; Day
NumPut(SubStr(Time, 9, 2), SYSTEMTIME, 8, "ushort") ; Hour
NumPut(SubStr(Time, 11, 2), SYSTEMTIME, 10, "ushort") ; Minutes
NumPut(SubStr(Time, 13, 2), SYSTEMTIME, 12, "ushort") ; Seconds
if (Size := DllCall("GetTimeFormatEx", "str", LocaleName, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "ptr", 0, "int", 0)) {
VarSetCapacity(TimeStr, Size << !!A_IsUnicode, 0)
if (DllCall("GetTimeFormatEx", "str", LocaleName, "uint", 0, "ptr", &SYSTEMTIME, "ptr", (Format ? &Format : 0), "str", TimeStr, "int", Size))
return TimeStr
}
return false
}
; ===============================================================================================================================
MsgBox % GetTimeFormatEx(A_Now) ; -> 11:46:49 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetTimeFormatEx(A_Now, "", "en-US") ; -> 11:46:58 AM ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
MsgBox % GetTimeFormatEx(A_Now, "HH':'mm") ; -> 11:46 ( LANG_USER_DEFAULT | SUBLANG_DEFAULT )
MsgBox % GetTimeFormatEx(A_Now, "hh':'mm':'ss tt", "en-US") ; -> 11:46:58 AM ( LANG_ENGLISH | SUBLANG_ENGLISH_US )
Possible Format Values
Code: Select all
h -> Hours with no leading zero for single-digit hours; 12-hour clock
hh -> Hours with leading zero for single-digit hours; 12-hour clock
H -> Hours with no leading zero for single-digit hours; 24-hour clock
HH -> Hours with leading zero for single-digit hours; 24-hour clock
m -> Minutes with no leading zero for single-digit minutes
mm -> Minutes with leading zero for single-digit minutes
s -> Seconds with no leading zero for single-digit seconds
ss -> Seconds with leading zero for single-digit seconds
t -> One character time marker string, such as A or P
tt -> Multi-character time marker string, such as AM or PM
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: WinAPI - GetXxxFormat Functions
Thank You!
It works fine.
Do you still intend to supplement with "GetDateFormatEx" and "GetTimeFormatEx"?
It works fine.
Do you still intend to supplement with "GetDateFormatEx" and "GetTimeFormatEx"?
Last edited by Albireo on 16 Sep 2020, 15:54, edited 1 time in total.
Re: WinAPI - GetXxxFormat Functions
@Albireo: jNizM did do a GetDateFormat example here:
Convert .NET DateTime ticks to AHK YYYYMMDDHH24MISS timestamp - AutoHotkey Community
https://autohotkey.com/boards/viewtopic ... 935#p49935
I was looking forward to some date/time format examples! But when I got there, the cupboard was bare.
I was trying to find out if GetTimeFormat can handle milliseconds, the answer appears to be no. Although I have some date/time and milliseconds examples here:
jeeswg's documentation extension tutorial - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=7&t=33596
@jNizM: You're welcome to adapt any of these examples.
Another useful link:
Language Identifier Constants and Strings (Windows)
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Here are some examples with GetDateFormat and GetTimeFormat:
Convert .NET DateTime ticks to AHK YYYYMMDDHH24MISS timestamp - AutoHotkey Community
https://autohotkey.com/boards/viewtopic ... 935#p49935
I was looking forward to some date/time format examples! But when I got there, the cupboard was bare.
I was trying to find out if GetTimeFormat can handle milliseconds, the answer appears to be no. Although I have some date/time and milliseconds examples here:
jeeswg's documentation extension tutorial - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=7&t=33596
@jNizM: You're welcome to adapt any of these examples.
Another useful link:
Language Identifier Constants and Strings (Windows)
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Here are some examples with GetDateFormat and GetTimeFormat:
Code: Select all
q:: ;date format: dddd, dd MMMM yyyy
vDate := A_Now
vFormat := "dddd',' dd MMMM yyyy"
VarSetCapacity(SYSTEMTIME, 16, 0)
vDate := RegExReplace(vDate, "(....)(..)(..)(..)(..)(..)", "$1,$2,,$3,$4,$5,$6")
Loop, Parse, vDate, % ","
NumPut(A_LoopField, &SYSTEMTIME, A_Index*2-2, "UShort")
;LANG_USER_DEFAULT := 0x400
vSize := DllCall("GetDateFormat", UInt,0x400, UInt,0, Ptr,&SYSTEMTIME, Ptr,&vFormat, Ptr,0, Int,0)
VarSetCapacity(vDate2, vSize*(A_IsUnicode?2:1), 0)
if !(DllCall("GetDateFormat", UInt,0x400, UInt,0, Ptr,&SYSTEMTIME, Ptr,&vFormat, Str,vDate2, Int,vSize))
return
MsgBox, % vDate2
return
w:: ;time format: HH:mm:ss
vDate := A_Now
VarSetCapacity(SYSTEMTIME, 16, 0)
vDate := RegExReplace(vDate, "(....)(..)(..)(..)(..)(..)", "$1,$2,,$3,$4,$5,$6")
Loop, Parse, vDate, % ","
NumPut(A_LoopField, &SYSTEMTIME, A_Index*2-2, "UShort")
;LANG_USER_DEFAULT := 0x400
vSize := DllCall("GetTimeFormat", UInt,0x400, UInt,0, Ptr,&SYSTEMTIME, Ptr,0, Ptr,0, Int,0)
VarSetCapacity(vDate2, vSize*(A_IsUnicode?2:1), 0)
if !(DllCall("GetTimeFormat", UInt,0x400, UInt,0, Ptr,&SYSTEMTIME, Ptr,0, Str,vDate2, Int,vSize))
return
MsgBox, % vDate2
return
e:: ;time format: hh:mm:ss tt
vDate := A_Now
vFormat := "hh':'mm':'ss tt"
VarSetCapacity(SYSTEMTIME, 16, 0)
vDate := RegExReplace(vDate, "(....)(..)(..)(..)(..)(..)", "$1,$2,,$3,$4,$5,$6")
Loop, Parse, vDate, % ","
NumPut(A_LoopField, &SYSTEMTIME, A_Index*2-2, "UShort")
;LANG_USER_DEFAULT := 0x400
vSize := DllCall("GetTimeFormat", UInt,0x400, UInt,0, Ptr,&SYSTEMTIME, Ptr,&vFormat, Ptr,0, Int,0)
VarSetCapacity(vDate2, vSize*(A_IsUnicode?2:1), 0)
if !(DllCall("GetTimeFormat", UInt,0x400, UInt,0, Ptr,&SYSTEMTIME, Ptr,&vFormat, Str,vDate2, Int,vSize))
return
MsgBox, % vDate2
return
homepage | tutorials | wish list | fun threads | donate
WARNING: copy your posts/messages before hitting Submit as you may lose them due to CAPTCHA
WARNING: copy your posts/messages before hitting Submit as you may lose them due to CAPTCHA
Re: WinAPI - GetXxxFormat Functions
It might be worth including this here. StrFormatByteSize64 to display a file size in a friendly format.
Link:
FormatBytes() - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=6&t=3567
[EDIT:] Changed from StrFormatByteSize to StrFormatByteSize64. StrFormatByteSize handles UInt, StrFormatByteSize64 handles Int64.
Code: Select all
q:: ;friendly display file size
vText := ""
vSizeFile := 123456789
VarSetCapacity(vText, vSize := 260*2, 0) ;(no suggested size in MSDN)
DllCall("shlwapi\StrFormatByteSize64", Int64,vSizeFile, Str,vText, UInt,vSize, Ptr)
MsgBox, % vText ;117 MB
return
FormatBytes() - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=6&t=3567
[EDIT:] Changed from StrFormatByteSize to StrFormatByteSize64. StrFormatByteSize handles UInt, StrFormatByteSize64 handles Int64.
Last edited by jeeswg on 19 Dec 2017, 06:36, edited 1 time in total.
homepage | tutorials | wish list | fun threads | donate
WARNING: copy your posts/messages before hitting Submit as you may lose them due to CAPTCHA
WARNING: copy your posts/messages before hitting Submit as you may lose them due to CAPTCHA
Re: WinAPI - GetXxxFormat Functions
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: WinAPI - GetXxxFormat Functions
Regarding the above:
@ jNizM: At your github, the StrFormatByteSize64() function is still called StrFormatByteSizeEx(). Is that intended or just a copy/paste leftover?
Has anyone noticed the huge stupid change M$ did in these byte-formatting APIs?
StrFormatKBSize
StrFormatByteSizeA
StrFormatByteSizeW
StrFormatByteSize64
StrFormatByteSizeEx
Quote from MSDN:
Maybe M$ intend to make the BYTE 10 bits long instead of 8. Maybe they want to move everything to decimal base…
Forgot to say thank you for these GetXxxFormat functions, I needed them so many times in the past and never stumbled into these APIs. Or maybe I did and just forgot. Anyways, thank you jNizM!
@ jNizM: At your github, the StrFormatByteSize64() function is still called StrFormatByteSizeEx(). Is that intended or just a copy/paste leftover?
Has anyone noticed the huge stupid change M$ did in these byte-formatting APIs?
StrFormatKBSize
StrFormatByteSizeA
StrFormatByteSizeW
StrFormatByteSize64
StrFormatByteSizeEx
Quote from MSDN:
Imagine the confusion when any two people, one using Win10 and the other anything else, try to compare results of the same whatever code (AHK, C/C++/C#, etc) that's using those APIs.In Windows 10, size is reported in base 10 rather than base 2. For example, 1 KB is 1000 bytes rather than 1024.
Maybe M$ intend to make the BYTE 10 bits long instead of 8. Maybe they want to move everything to decimal base…
Forgot to say thank you for these GetXxxFormat functions, I needed them so many times in the past and never stumbled into these APIs. Or maybe I did and just forgot. Anyways, thank you jNizM!
Part of my AHK work can be found here.
Re: WinAPI - GetXxxFormat Functions
@Drugwash: Yes, the changes are very confusing.
FormatBytes() - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=6&t=3567
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
FormatBytes() - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=6&t=3567
StrFormatByteSize64 function (Windows)No, the documentation is clearly wrong. On Windows 10.0.10586, SKAN's example code and Explorer itself both show 1GB as 1024*1024*1024 bytes.
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
StrFormatByteSize64 can be used for either ANSI or Unicode characters. However, while StrFormatByteSize64A can be called directly, StrFormatByteSize64W is not defined. When StrFormatByteSize64 is called with a Unicode value, StrFormatByteSizeW is used.
homepage | tutorials | wish list | fun threads | donate
WARNING: copy your posts/messages before hitting Submit as you may lose them due to CAPTCHA
WARNING: copy your posts/messages before hitting Submit as you may lose them due to CAPTCHA
Re: WinAPI - GetXxxFormat Functions
Ah, thanks, I was beating a dead horse.
Anyway, the documentation is even worse as it doesn't mention terabytes, petabytes, exabytes as possible result but only maximum gigabytes.
Second quote hides a catch: the automatic switch to StrFormatByteSizeW() is not done in AHK but only in C code.
Calling "shlwapi\StrFormatByteSize64" with either a Unicode or ANSI buffer returns zero but doesn't set A_LastError.
Well, that's about it, we're kinda off-topic here.
Anyway, the documentation is even worse as it doesn't mention terabytes, petabytes, exabytes as possible result but only maximum gigabytes.
Second quote hides a catch: the automatic switch to StrFormatByteSizeW() is not done in AHK but only in C code.
Calling "shlwapi\StrFormatByteSize64" with either a Unicode or ANSI buffer returns zero but doesn't set A_LastError.
Well, that's about it, we're kinda off-topic here.
Part of my AHK work can be found here.
Re: WinAPI - GetXxxFormat Functions
I forgot to finish that. I hope I have everything ready now and have not missed anything.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Return to “Scripts and Functions (v1)”
Who is online
Users browsing this forum: No registered users and 114 guests