文書番号: 402484
最終更新日: 1998/03/23
Sub Button_ON_OFF() Select Case IMEStatus Case 2 IMEControl 1 Case Else IMEControl 2 End Select End Sub
Option Explicit Private Declare Function lstrcpynS2M Lib "KERNEL" Alias "lstrcpyn" _ (ByVal lpszString1 As Long, ByVal lpszString2 As String, _ ByVal cChars As Integer) As Long Private Declare Function lstrcpynM2S Lib "KERNEL" Alias "lstrcpyn" _ (ByVal lpszString1 As String, ByVal lpszString2 As Long, _ ByVal cChars As Integer) As Long Private Declare Function GlobalAlloc Lib "KERNEL" _ (ByVal wFlags As Integer, ByVal dwBytes As Long) As Integer Private Declare Function GlobalFree Lib "KERNEL" (ByVal hMem As _ Integer) As Integer Private Declare Function GlobalLock Lib "KERNEL" (ByVal hMem As _ Integer) As Long Private Declare Function GlobalUnLock Lib "KERNEL" (ByVal hMem As _ Integer) As Integer Private Declare Function SendIMEMessage Lib "WINNLS" (ByVal wnd As _ Integer, ByVal wParam As Long) As Integer ' IMEControl Sub ' ' 書式: IMEControl(nMode As Integer) ' 解説: IME を制御します。 ' ' nMode ' 1 オン ' 2 オフ Public Sub IMEControl(ByVal nMode As Integer) Dim nRet As Integer Dim nMode1 As Integer Dim nMode2 As Integer Dim hMem As Integer Dim szDat As String Select Case nMode Case 1 nRet = IMEControlSub(1) Case 2 nRet = IMEControlSub(0) nMode2 = 1 Case Else nMode1 = 0 nMode2 = 1 End Select If nMode2 = 0 Then nRet = IMEControlSub(1) nRet = DoEvents() szDat = Chr$(&h10) & Chr$(0) & Chr$(nMode1) & Chr$(nMode2) hMem = GlobalAlloc(&h3002, 64) MemCopy szDat, hMem, 4 nRet = SendIMEMessage(0, hMem) MemCopy hMem, szDat, 4 nRet = GlobalFree(hMem) End If End Sub Function IMEControlSub(ByVal nFunc As Integer) As Integer Dim nRet As Integer Dim hMem As Integer Dim szDat As String nRet = DoEvents() If nFunc = -1 Then szDat = Chr$(5) & Chr$(0) & Chr$(0) & Chr$(0) ElseIf nFunc <> 0 Then szDat = Chr$(4) & Chr$(0) & Chr$(nFunc) & Chr$(0) Else szDat = Chr$(4) & Chr$(0) & Chr$(nFunc) & Chr$(0) End If hMem = GlobalAlloc(&h3002, 64) MemCopy szDat, hMem, 4 nRet = SendIMEMessage(0, hMem) MemCopy hMem, szDat, 4 nRet = GlobalFree(hMem) IMEControlSub = Asc(MidB(szDat, 3, 1)) End Function Private Sub MemCopy(vSrc As Variant, vDst As Variant, wBytes As _ Integer) Dim i As Integer Dim lAddG As Long Dim lRet As Long Dim szTmp As String If VarType(vSrc) = 8 And VarType(vDst) = 2 Then lAddG = GlobalLock(vDst) For i = 0 To wBytes - 1 szTmp = MidB(vSrc, i + 1, 1) & Chr$(0) lRet = lstrcpynS2M(i + lAddG, szTmp, 2) Next lRet = GlobalUnLock(vDst) ElseIf VarType(vSrc) = 2 And VarType(vDst) = 8 Then lAddG = GlobalLock(vSrc) vDst = "" szTmp = Chr$(0) & Chr$(0) For i = 0 To wBytes - 1 lRet = lstrcpynM2S(szTmp, lAddG + CLng(i), 2) vDst = vDst & LeftB(szTmp, 1) Next lRet = GlobalUnLock(vSrc) Else Stop End If End Sub
文書番号:
タイトル: Microsoft Excel デベロッパーズ キット」のご紹介
文書番号:
タイトル: VBA や Excel 4.0 マクロから Windows API を使用する際の注意点
Keywords: KBHOWTO KB402484
Technology: kbExcel500 kbExcelSearch kbExcelWinSearch