*!* 即可完成程序内的转换及使用,可是个别开发工具转换起来并不轻易,甚至有些软件让用户手动改控制面板中设置。
*!* 为了不让用户手动更改,所以找了找API函数,写成在VFP中实现对区域选项的更改。
*----------------------------------------------------------------------------------
*--函 数:MySetLocalInfo(tcOption,tcChangeString)
*--参数 1:不区分大小写
* tcOption:LongDateFormat ->更改长日期格式
* :ShortDateFormat ->更改短日期格式
* :DateSeparator ->更改日期分隔符
* :TimeFormat ->更改时间格式
* :TimeSeparator ->更改时间分隔符
*--参数 2:区分大小写
* tcChangeString: ->字符串,如tcOption为DateSeparator时此处可为"-"
*--返回值:成功近回.T.,失败近回.F.
*--作 者:十豆三
*--日 期:2008/04/29
*----------------------------------------------------------------------------------
*--调用示例:
?MySetLocalInfo("LongDateFormat","yyyy'年'MM'月'dd'日'") &&更改长日期格式
?MySetLocalInfo("ShortDateFormat","yyyy-MM-dd") &&更改短日期格式
?MySetLocalInfo("DateSeparator","-") &&更改日期分隔符
?MySetLocalInfo("TimeFormat","HH:mm:ss") &&更改时间格式
?MySetLocalInfo("TimeSeparator",":") &&更改时间分隔符
Function MySetLocalInfo
Parameters tcOption,tcChangeString
If Parameters()<>2 Or Empty(tcOption) Or Empty(tcChangeString)
Return .F.
Endif
Private lnLocal,lpBuffer,lnRetVal
tcOption=Upper(tcOption)
#Define LOCALE_SSHORTDATE 0x1F &&short date format string
#Define LOCALE_SDATE 0x1D &&date separator
#Define LOCALE_SLONGDATE 0x20 &&long date format string
#Define LOCALE_STIMEFORMAT 0x1003 &&time format string
#Define LOCALE_STIME 0x1E &&time separator
#Define HWND_BROADCAST 0xFFFF
#Define WM_WININICHANGE 0x1A
#Define SPI_SETDESKWALLPAPER 20
#Define SPIF_SENDCHANGE 0x2
Declare Integer GetUserDefaultLCID In kernel32
Declare Integer GetLocaleInfo In kernel32 Integer Locale,Integer LCType,String lpLCData,Integer cchData
Declare Integer SetLocaleInfo In kernel32 Integer Locale,Integer LCType,String lpLCData
Declare Integer SendMessage In win32api Integer HWnd,Integer Msg,String wParam,String IParam
Declare Integer SystemParametersInfo In "user32" Integer uiAction,Integer uiParam,Integer pvParam,Integer fWinlni
Do Case
Case tcOption=Upper("LongDateFormat") &&更改长日期格式
lnBufferLen=50
lnType=LOCALE_SLONGDATE
Case tcOption=Upper("ShortDateFormat") &&更改短日期格式,包括日期分隔符
lnBufferLen=20
lnType=LOCALE_SSHORTDATE
Case tcOption=Upper("DateSeparator") &&更改日期分隔符,不改变日期格式
lnBufferLen=2
lnType=LOCALE_SDATE
Case tcOption=Upper("TimeFormat") &&更改时间格式,包括时间分隔符
lnBufferLen=20
lnType=LOCALE_STIMEFORMAT
Case tcOption=Upper("TimeSeparator") &&更改时间分隔符,不改变时间格式
lnBufferLen=2
lnType=LOCALE_STIME
Otherwise
Return .F.
Endcase
lnLocal=GetUserDefaultLCID()
lpBuffer=Replicate(Space(1),lnBufferLen)
lnRetVal=GetLocaleInfo(lnLocal,lnType,@lpBuffer,lnBufferLen)
If Alltrim(lpBuffer)<>tcChangeString
lnRetVal=SetLocaleInfo(lnLocal,lnType,tcChangeString)
Endif
If lnRetVal=0
Return .F.
Endif
*--更新、保存、刷新更改
lnRetVal=SendMessage(HWND_BROADCAST,WM_WININICHANGE,"","") &&该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。
lnRetVal=SystemParametersInfo(SPI_SETDESKWALLPAPER,0,0,SPIF_SENDCHANGE) &&该函数查询或设置系统级参数。该函数也可以在设置参数中更新用户配置文件。
If lnRetVal=0
Return .F.
Else
Return .T.
Endif
Endfunc