QZhi 发表于 2024-7-7 16:27:16

直接运行您提供的 getime.exe 要闪退啊,在 IDE 中运行会抛出一个下标越界的错误,然后闪退。

测试环境:
Microsoft Windows [版本 10.0.19045.4529]
微软拼音

tlwh163 发表于 2024-7-7 18:06:21

学学习习

tlwh163 发表于 2024-7-8 22:06:59

本帖最后由 tlwh163 于 2024-7-8 22:49 编辑

    '候选词结构体的缓冲区
    Dim CandListBuffer() As Byte
    ReDim CandListBuffer(CandListSize - 1)
这个缓存区不管3721 多分配4字节 是不是就可以应对 dwStyle=IME_CAND_CODE And (CandListCount = 1) 的情况?
只要把最后的数据 向后移动4字节 然后把dwOffset(0)改成偏移 dwStyle改成IME_CAND_READ


    n = ImmGetCandidateListA(hImc, 0, 0, 0)
    If n Then m = malloc(n + SizeOf(DWORD))
    If m Then
      ImmGetCandidateListA(hImc, 0, m, n)
      If m->dwStyle = IME_CAND_CODE AndAlso m->dwCount = 1 Then
            memmove(@m->dwOffset(1), @m->dwOffset(0), n + SizeOf(DWORD) - SizeOf(CANDIDATELIST))
            m->dwOffset(0) = SizeOf(CANDIDATELIST) : m->dwStyle = IME_CAND_READ
      End If
页: 1 [2]
查看完整版本: 【VB6】获取输入法候选词列表