注册 登录
编程论坛 VB6论坛

VB6获取汉字的五笔编码

yuma 发布于 2023-03-16 18:44, 930 次点击
这是ChatGPt给我写的,为什么无法获取到五笔编码啊?


在 VB6 中使用 Windows API 函数 ImmGetConversionList 来获取汉字的五笔编码,需要先声明该函数,然后调用它来获取五笔编码。
以下是一个示例代码,可以获取指定汉字的五笔编码:

Option Explicit

Private Declare Function ImmGetConversionList Lib "imm32.dll" Alias "ImmGetConversionListA" (ByVal hIMC As Long, ByVal dwSrc As Long, ByVal dwDst As Long, ByVal lpSrc As String, ByVal lpDst As Long, ByVal uBufLen As Long, ByVal uFlag As Long) As Long

Private Const GCL_REVERSECONVERSION = &H2
Private Const GCL_REVERSE_LENGTH = 256

Public Function GetWbCode(ByVal str As String) As String
    Dim hIMC As Long
    Dim dwSrc As Long
    Dim dwDst As Long
    Dim lpSrc As String
    Dim lpDst As Long
    Dim uBufLen As Long
    Dim uFlag As Long
    Dim lRet As Long
    Dim sWbCode As String
   
    ' 初始化参数
    hIMC = 0
    dwSrc = 0
    dwDst = GCL_REVERSECONVERSION
    lpSrc = str
    lpDst = StrPtr(sWbCode)
    uBufLen = GCL_REVERSE_LENGTH
    uFlag = 0
   
    ' 调用 ImmGetConversionList 函数
    lRet = ImmGetConversionList(hIMC, dwSrc, dwDst, lpSrc, lpDst, uBufLen, uFlag)
   
    ' 如果返回值大于 0,则表示获取成功
    If lRet > 0 Then
        ' 截取五笔编码
        sWbCode = Left(sWbCode, lRet)
        ' 返回五笔编码
        GetWbCode = sWbCode
    Else
        ' 获取失败,返回空字符串
        GetWbCode = ""
    End If
End Function

Private Sub Form_Load()
Dim sWbCode As String
sWbCode = GetWbCode("汉")
MsgBox sWbCode
End Sub

5 回复
#2
独木星空2023-03-16 22:34
回复 楼主 yuma
这种专业性很强的内容,不是非专业人能解决的问题。五笔编码,学都学不来,怎么会出源码?
#3
风吹过b2023-03-17 11:01
代码测试结果:错误的 DLL 调用约定
查了一下 API  的说明,没看出毛病。
然后想到,是不是 与系统 有关。我测试用的系统  是  XP+VB6,只有一个输入法,极品五笔,未开其他输入法编码查询 。
猜测:需要安装二个输入法以上,其中一个是 微软全拼,另一个是 微软五笔,然后 微软全拼 里需要开 编码查询:微软五笔 ,OS 应该只能是 WINXP 和 WIN7,WIN8、WIN10、WIN11应该不行。
理由:记得只有 微软全拼 WINXP版和 WIN7版有编码查询,并且要另一个输入法也安装了才能查询样的。
#4
apull2023-03-17 11:11
查看 https://learn.
ImmGetConversionListA函数原型参数数量跟你上面代码中的对不上。
DWORD ImmGetConversionListA(
        HKL             unnamedParam1,
        HIMC            unnamedParam2,
  [in]  LPCSTR          lpSrc,
  [out] LPCANDIDATELIST lpDst,
  [in]  DWORD           dwBufLen,
  [in]  UINT            uFlag
);
#5
mrexcel2023-03-19 16:51
五筆編碼可以自己下载一个对照表,或者五笔输入法的数据文件自己读写即可
#6
风吹过b2023-03-19 22:54
以下是引用apull在2023-3-17 11:11:16的发言:

查看 https://learn.
ImmGetConversionListA函数原型参数数量跟你上面代码中的对不上。
DWORD ImmGetConversionListA(
        HKL             unnamedParam1,
        HIMC            unnamedParam2,
    LPCSTR          lpSrc,
  [out] LPCANDIDATELIST lpDst,
    DWORD           dwBufLen,
    UINT            uFlag
);



这里我看了,英文看不懂,所以不知道他哪里对不上。
1