Что нового

Замена букв на лету

tom

Новичок
Сообщения
4
Репутация
0
Привет всем
Я хочу удивит друга :shok: :laugh: и поэтому хочу сделать программу которая откроет блокнот и будет писать какой-то разумны текст.
Я всё объясню:
У меня сын полтора года и Он любит тикать клавиатуру вот Я подумал сделать программу так чтоб не имела разницы какие буквы будет нажимать сын, в блокноте чтоб всё равно писалась разумное предложения допустим ,, Привет дядя Вася ,, но надо сделать так чтоб вес текст сразу не писался как в уроке (Урок 2: Автоматизация Notepad.) а по букве то эст нажал малыш одну клавишу написалось одна буква и.т.
Прошу помаши у профессионалов, покажите пример.
С уважением Том
 

InnI

AutoIT Гуру
Сообщения
4,649
Репутация
1,319
tom
покажите пример
Код:
#include <WinAPI.au3>
#include <WindowsConstants.au3>

OnAutoItExitRegister("Cleanup")

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

$Msg = "Привет, дядя Вася!" & @LF & _
       "Как твои дела?" & @LF & _
       "Смотри, что я умею." & @CRLF
$Text = StringSplit($Msg, "")
$Count = 1

Run("notepad.exe")
While Sleep(1000)
WEnd

Func _KeyProc($nCode, $wParam, $lParam)
  If $nCode < 0 Then
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
  EndIf
  If $wParam = $WM_KEYDOWN Then
    If WinActive("[class:Notepad]") Then
      ControlSend("[class:Notepad]", "", "Edit1", $Text[$Count], 1)
      $Count += 1
      If $Count = $Text[0] Then $Count = 1
      Return -1
    EndIf
  EndIf
  Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc

Func Cleanup()
  _WinAPI_UnhookWindowsHookEx($hHook)
  DllCallbackFree($hStub_KeyProc)
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
InnI,
А зачем Вам $tKEYHOOKS?
 
Автор
T

tom

Новичок
Сообщения
4
Репутация
0
Огромное спасибо!!!!!! :ok: :IL_AutoIt_1: Вот друг удивится..... :blink:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
OffTopic:
tom [?]
У меня сын полтора года и Он любит тикать клавиатуру вот Я подумал сделать программу так чтоб не имела разницы какие буквы будет нажимать сын, в блокноте чтоб всё равно писалась разумное предложения
У меня внучке 1 год и 10 мес. и внуку 4,5 года. Они тоже любят тюкать по клавиатуре, сидя у меня на коленях, но, ИМХО, им обоим просто нравится звук (в AkelPad`е у меня набор сопровождается звуком) и появляющиеся символы, а какие символы, им по барабану. ;D
 
Автор
T

tom

Новичок
Сообщения
4
Репутация
0
Добрый вечер

Друзья можете показать как переделать этот скрипт для Notepad++.


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

OnAutoItExitRegister("Cleanup")

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

$Msg = "Привет, дядя Вася!" & @LF & _
"Как твои дела?" & @LF & _
"Смотри, что я умею." & @CRLF
$Text = StringSplit($Msg, "")
$Count = 1

Run("notepad.exe")
While Sleep(1000)
WEnd

Func _KeyProc($nCode, $wParam, $lParam)
If $nCode < 0 Then
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndIf
If $wParam = $WM_KEYDOWN Then
If WinActive("[class:Notepad]") Then
ControlSend("[class:Notepad]", "", "Edit1", $Text[$Count], 1)
$Count += 1
If $Count = $Text[0] Then $Count = 1
Return -1
EndIf
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc

Func Cleanup()
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_KeyProc)
EndFunc
 
Последнее редактирование:

Alecsis

Осваивающий
Сообщения
43
Репутация
23
Если придерживаться Вашего стиля оформления кода :very-scare:, то как-то так:
Код:
#include <WinAPI.au3>
#include <WindowsConstants.au3>

OnAutoItExitRegister("Cleanup")

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

$Msg = "Привет, дядя Вася!" & @LF & _
"Как твои дела?" & @LF & _
"Смотри, что я умею." & @CRLF
$Text = StringSplit($Msg, "")
$Count = 1

;~ Run("notepad.exe")
;
Run("notepad++.exe")  ; !!! подставить реальное расположение Notepad++ !!!
;
While Sleep(1000)
WEnd

Func _KeyProc($nCode, $wParam, $lParam)
If $nCode < 0 Then
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndIf
If $wParam = $WM_KEYDOWN Then

;~ If WinActive("[class:Notepad]") Then
;~ ControlSend("[class:Notepad]", "", "Edit1", $Text[$Count], 1)
;
If WinActive("[class:Notepad++]") Then
ControlSend("[class:Notepad++]", "", "Scintilla1", $Text[$Count], 1)
;
$Count += 1
If $Count = $Text[0] Then $Count = 1
Return -1
EndIf
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc

Func Cleanup()
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_KeyProc)
EndFunc

PS Notepad++ может отреагировать не совсем так, как задумано — это зависит от его настроек!
 
Последнее редактирование:
  • Like
Реакции: tom
Автор
T

tom

Новичок
Сообщения
4
Репутация
0
Простите за оформления и большое спасибо Alecsis, всё работает!!!!!!!!!!!!!!!!
 
Верх