Что нового

[Процессы] [Api]Отправка нажатий клавиш в неактивное окно средствами DllCall

Black_Hole

Знающий
Сообщения
126
Репутация
11
Русские символы отображаются не правильно, подскажите как исправить?

Код:
$Dll = DllOpen('user32.dll')
$hwnd = ControlGetHandle('Безымянный', '', 'Edit1')

$s = 'qWeRT#ЯЯяяя'

for $i=1 to StringLen($s)
$x = Binary(StringMid($s,$i,1))
if ($x = 0x23) then
DllCall($Dll, "long", "PostMessage", "hwnd", $hwnd, "int", 0x0102,'int',0x0d,'int',0)
else
DllCall($Dll, "long", "PostMessage", "hwnd", $hwnd, "int", 0x0102,'int',$x,'int',0)
endif
next
DllClose($Dll)
msgbox(0,0,"End")
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
А если так:
Код:
#include <Encoding.au3>

$Dll = DllOpen('user32.dll')
$hwnd = ControlGetHandle('Безымянный', '', 'Edit1')

$s = 'qWeRT#ЯЯяяя'
$s = _Encoding_CyrillicTo1251($s)

for $i=1 to StringLen($s)
$x = Binary(StringMid($s,$i,1))
if ($x = 0x23) then
DllCall($Dll, "long", "PostMessage", "hwnd", $hwnd, "int", 0x0102,'int',0x0d,'int',0)
else
DllCall($Dll, "long", "PostMessage", "hwnd", $hwnd, "int", 0x0102,'int',$x,'int',0)
endif
next
DllClose($Dll)
msgbox(0,0,"End")


Encoding.au3 тут
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
Astel064
Ниже урощеный код в одну строку:

Код:
DllCall('user32.dll', "long", "PostMessage", "hwnd", ControlGetHandle('Безымянный', '', 'Edit1'), "int", 0x0102,'int',0xff,'int',0)


Ps. 0xff = я, но печатается ÿ, я уверен проблема в функции "PostMessage", ее надо заменить на какую-то другую.
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
lirikmel

Возможно в будущем эта часть кода будет перенесена в DLL, ControlSend - отличный вариант но не API функция которую можно реализовать практически на любом языке, думаю лучше сразу избежать ошибок по возможности, 'PostMessage' из 'user32.dll' справляется со всем кроме русских символов
 
Верх