WIN API-VFP更改Windows的区域选项:(长)日期格式(分隔符),时间格式(分隔符)[参考:控制面板-区域和语言选项-区域选项]

*!* 其实在VFP中,此方法可以说是多余的,因为VFP本身的命令SET DATE .../SET CENTURY .../Time()等
*!* 即可完成程序内的转换及使用,可是个别开发工具转换起来并不轻易,甚至有些软件让用户手动改控制面板中设置。
*!* 为了不让用户手动更改,所以找了找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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值