Что нового

Как выделить слово

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Нужна помощь не получается выделить слово с помощью
Код:
_GuiCtrlRichEdit_SetSel

Суть вот в чем , нужно выделить слово дом или ljv если оно набрано в английской раскладке и заменить его на 123
скрипт понимает что это слово набрано перехватывая с клавиатуры при помощи
Код:
_WinAPI_SetWindowsHookEx()

а выделить три символа не получается, может для такого случая есть проще способ ведь слово известно, помогите пожалуйста.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
general66
Ну смотря где ты хочешь выделить это слово.

Можешь в принципе банально отправить три раза Backspace с помощью Send.
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
firex [?]
Ну смотря где ты хочешь выделить это слово.

по замыслу это любое поле ввода, текст и т.д хотелось бы заменить его автоматом :(
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
Send("+{LEFT "& $len &"}")

Попробуй примерно так...
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
Код:
Send("{CTRLDOWN}{SHIFTDOWN}{LEFT}{SHIFTUP}{CTRLUP}")
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
alex33 [?]

удаляет вторую букву с конца ну по аналогии можно добиться результата ;D


InnI [?]
Send("{CTRLDOWN}{SHIFTDOWN}{LEFT}{SHIFTUP}{CTRLUP}")

оставляет последнюю букву что тоже не понятно почему :-[

вот скрипт с примерами обоими

Код:
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>

Opt('MustDeclareVars', 1)

Global $hHook, $hStub_KeyProc, $buffer = ""

_Main()

Func _Main()
    OnAutoItExitRegister("Cleanup")

    Local $hmod

    $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    $hmod = _WinAPI_GetModuleHandle(0)
    $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)

    While 1
        Sleep(10)
    WEnd
EndFunc   ;==>_Main

Func EvaluateKey($keycode)
	;Local $len="Jon"
	;Local $len1="AutoIt"
    If (($keycode > 64) And ($keycode < 91)) _ ; a - z
            Or (($keycode > 96) And ($keycode < 123)) _ ; A - Z
            Or (($keycode > 47) And ($keycode < 58)) Then ; 0 - 9
        $buffer &= Chr($keycode)
        Switch $buffer
            Case "Jon"
                ToolTip("What can you say?")
				;Send("+{LEFT "& $len &"}")
				Send("{CTRLDOWN}{SHIFTDOWN}{LEFT}{SHIFTUP}{CTRLUP}")
            Case "AutoIt"
                ToolTip("AutoIt Rocks")
				;Send("+{LEFT "& $len1 &"}")
				Send("{CTRLDOWN}{SHIFTDOWN}{LEFT}{SHIFTUP}{CTRLUP}")
        EndSwitch
    ElseIf ($keycode > 159) And ($keycode < 164) Then
        Return
    ElseIf ($keycode = 27) Then ; esc key
        Exit
    Else
        $buffer = ""
    EndIf
EndFunc   ;==>EvaluateKey

;===========================================================
; callback function jonautoit
;===========================================================
Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Then
        Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf
    If $wParam = $WM_KEYDOWN Then
        EvaluateKey(DllStructGetData($tKEYHOOKS, "vkCode"))
    Else
        Local $flags = DllStructGetData($tKEYHOOKS, "flags")
        Switch $flags
            Case $LLKHF_ALTDOWN
                ConsoleWrite("$LLKHF_ALTDOWN" & @CRLF)
            Case $LLKHF_EXTENDED
                ConsoleWrite("$LLKHF_EXTENDED" & @CRLF)
            Case $LLKHF_INJECTED
                ConsoleWrite("$LLKHF_INJECTED" & @CRLF)
            Case $LLKHF_UP
                ConsoleWrite("$LLKHF_UP: scanCode - " & DllStructGetData($tKEYHOOKS, "scanCode") & @TAB & "vkCode - " & DllStructGetData($tKEYHOOKS, "vkCode") & @CRLF)
        EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc   ;==>_KeyProc

Func Cleanup()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
EndFunc   ;==>Cleanup

в этой теме
AZJIO сказал(а):
Text Correction - исправление текста набранного в неправ. раскладке клавиатуры
пользователь AZJIO решил эту проблему только я по неопытности не магу правильно эту функцию правильно вырезать , получается ерунда какаето :-[ помогите пожалуйстся
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
general66 [?]
оставляет последнюю букву
Не оставляет, а не успевает напечатать. Точнее - заменяет выделение на последнюю букву. Сделайте переменную, которая бы сообщала о необходимости выделения, а само выделение перенесите в главный цикл. Примерно так
Код:
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>

Opt('MustDeclareVars', 1)

Global $hHook, $hStub_KeyProc, $buffer = "", $Select

_Main()

Func _Main()
    OnAutoItExitRegister("Cleanup")

    Local $hmod

    $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    $hmod = _WinAPI_GetModuleHandle(0)
    $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)

    While 1
        If $Select Then
          Send("{CTRLDOWN}{SHIFTDOWN}{LEFT}{SHIFTUP}{CTRLUP}")
          $Select = False
        EndIf
        Sleep(10)
    WEnd
EndFunc   ;==>_Main

Func EvaluateKey($keycode)
    ;Local $len="Jon"
    ;Local $len1="AutoIt"
    If (($keycode > 64) And ($keycode < 91)) _ ; a - z
            Or (($keycode > 96) And ($keycode < 123)) _ ; A - Z
            Or (($keycode > 47) And ($keycode < 58)) Then ; 0 - 9
        $buffer &= Chr($keycode)
        Switch $buffer
            Case "Jon"
                ToolTip("What can you say?")
                ;Send("+{LEFT "& $len &"}")
                $Select = True
            Case "AutoIt"
                ToolTip("AutoIt Rocks")
                ;Send("+{LEFT "& $len1 &"}")
                $Select = True
        EndSwitch
    ElseIf ($keycode > 159) And ($keycode < 164) Then
        Return
    ElseIf ($keycode = 27) Then ; esc key
        Exit
    Else
        $buffer = ""
    EndIf
EndFunc   ;==>EvaluateKey

;===========================================================
; callback function jonautoit
;===========================================================
Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Then
        Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf
    If $wParam = $WM_KEYDOWN Then
        EvaluateKey(DllStructGetData($tKEYHOOKS, "vkCode"))
    Else
        Local $flags = DllStructGetData($tKEYHOOKS, "flags")
        Switch $flags
            Case $LLKHF_ALTDOWN
                ConsoleWrite("$LLKHF_ALTDOWN" & @CRLF)
            Case $LLKHF_EXTENDED
                ConsoleWrite("$LLKHF_EXTENDED" & @CRLF)
            Case $LLKHF_INJECTED
                ConsoleWrite("$LLKHF_INJECTED" & @CRLF)
            Case $LLKHF_UP
                ConsoleWrite("$LLKHF_UP: scanCode - " & DllStructGetData($tKEYHOOKS, "scanCode") & @TAB & "vkCode - " & DllStructGetData($tKEYHOOKS, "vkCode") & @CRLF)
        EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc   ;==>_KeyProc

Func Cleanup()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
EndFunc   ;==>Cleanup
 
Верх