【已解决】有什么函数可以把字符串中的大小写字母互换吗?
本帖最后由 fybhwsx 于 2026-3-22 09:51 编辑如:1+dfeBCSD-ssaBB^!Vs
换成:1+DFEbcsd-SSAbb^!vS
只换字母,其它字符不变。
用它https://chat.deepseek.com/解决了,这东西真有点用。哈哈。。
其实我想要实现的是用大写锁定,来解决中文输入法输入英文被干扰无法输入的问题。
deepseek给的函数:
Func CAPSLOCKSwap($zfc)
Local $sResult = ""
For $i = 1 To StringLen($zfc)
Local $char = StringMid($zfc, $i, 1)
Local $asc = Asc($char)
If $asc >= 65 And $asc <= 90 Then ; A-Z
$sResult &= Chr($asc + 32) ; 转小写
ElseIf $asc >= 97 And $asc <= 122 Then; a-z
$sResult &= Chr($asc - 32) ; 转大写
Else
$sResult &= $char ; 不变
EndIf
Next
Return $sResult
EndFunc
再自定义_send函数就行了,这下什么中文输入法都不影响输入了吧。
Func _Send($AJ, $BZ = 0)
Send('{CAPSLOCK on}') ;开启大写锁定
Send(CAPSLOCKSwap($AJ), $BZ) ;大小写互转输入
Send('{CAPSLOCK oFF}') ;关闭大写锁定
EndFunc
autoit 有字符串处理函数 不过无法实现你描述的功能,只能挨个字符转换。
Example()
Func Example()
Local $aArray = StringToASCIIArray("1+dfeBCSD-ssaBB^!Vs")
For $s = 0 To UBound($aArray) - 1
If $aArray[$s] > 64 and $aArray[$s] < 91 Then
$aArray[$s] += 32
ElseIf $aArray[$s] > 96 and $aArray[$s] < 123 Then
$aArray[$s] -= 32
EndIf
Next
; 把数组转换成字串.
Local $sString = StringFromASCIIArray($aArray)
MsgBox(0, "", $sString)
EndFunc ;==>Example 实际对创口输出字符串的时候可以直接关闭输入法。不需要做这种转换。
#include <WinAPI.au3>
Opt("SendCapslockMode", 0)
Sleep(500)
Global $Win_MemberActive = WinGetHandle("")
WinActivate($Win_MemberActive)
WinAPI_SetKeyboardLayout($Win_MemberActive) ;切换输入法到英文
ControlSend($Win_MemberActive, "", "", "AAbbccDD")
;输入法切换到英文
Func WinAPI_SetKeyboardLayout($hWnd, $iFlags = 0)
Local $hLocale, $iLanguage
If @OSVersion = "WIN_10" Then
$iLanguage = 0xd0000804
Else
$iLanguage = 0x00000804
EndIf
If Not _WinAPI_IsWindow($hWnd) Then Return SetError(@error + 10, @extended, 0)
Local $hLocale = 0
If $iLanguage Then
$hLocale = _WinAPI_LoadKeyboardLayout($iLanguage, $KLF_SUBSTITUTE_OK)
If Not $hLocale Then Return SetError(10, 0, 0)
EndIf
Local Const $WM_INPUTLANGCHANGEREQUEST = 0x0050
DllCall('user32.dll', 'none', 'SendMessage', 'hwnd', $hWnd, 'uint', $WM_INPUTLANGCHANGEREQUEST, 'uint', $iFlags, 'uint_ptr', $hLocale)
If @error Then Return SetError(@error, @extended, 0)
_WinAPI_ActivateKeyboardLayout($hLocale)
Return $hLocale
EndFunc ;==>WinAPI_SetKeyboardLayout
页:
[1]