zrs90さんのリンク先のpizza氏のコードがおおむね答えになっていると思いますが、
おかしいと思われる部分を一部修正させていただきました。
また、アルファベットの小文字を大文字に直す処理を追加したので、もし不要ならば
"//*"のコメントがついた行を削除してください。
#include "kernel32.as"
#include "user32.as"
#define EN_CHANGE 0x00000300
#define WM_COMMAND 0x0111
#define EM_GETSEL 0x00B0
#define EM_SETSEL 0x00B1
sdim pass,256
input pass : iInput = stat ;文字列型input
button "output", *lb_output
oncmd gosub *lb_OnCommand, WM_COMMAND
flag = 1
stop
*lb_OnCommand
if lparam != objinfo(iInput, 2) : return
if (wparam>>16&0xFFFF) == EN_CHANGE && flag {
l = strlen(pass)
sdim tmp, l+1
offset = 0
count = 0
upper = 0 //*小文字から大文字への変換が行われたフラグ(不要なら削除してください)
repeat l
c = peek(pass, cnt)
// 2byte文字か調べる
IsDBCSLeadByte c
if stat : count++ : continue cnt+2
// アルファベットと数字か調べる
IsCharAlphaNumeric c
if stat == 0 : count++ : continue cnt+1
if (c>='a')&(c<='z') : c-=0x20 : upper=1 //*小文字を大文字に変換(不要なら削除してください)
// 半角英数ならtmpに追加
poke tmp, offset, c
offset++
loop
if count|upper { //*小文字から大文字への変換が不要なら"|upper"を削除してください
// inputの更新とキャレット位置の調整
i=0 : sendmsg objinfo(iInput, 2), EM_GETSEL, varptr(i), 0
pass = tmp
flag = 0 //oncmd 0でも可
objprm iInput, pass ; 実行しなくても内部では半角英数のみになっている
flag = 1 //oncmd 1でも可
sendmsg objinfo(iInput, 2), EM_SETSEL, i-count, i-count
return 0
}
}
return
*lb_output
mes pass
stop