全3件 (3件中 1-3件目)
1
user32.dllの「GetKeyboardState」APIを使って複数キー読み込みをしてみました。同じことは組み込み関数のGetKeyStateでできるんですが、読み込みが1回でできます。仮想キーコードはここがよくまとまっているみたい。※12・26追記ソースのコメントをもう少し丁寧に書けば良かった。getPushedKeys()は押された複数のキーのキーコードを要素として持つ配列を返す関数です。各配列の値はキーコードです。例えば、得られた配列(値の昇順で入るみたい)の中に、65と66があれば、「A」と「B」が同時に押されたということが分かる仕掛けです。getPushedKeys.uwsif get_uwsc_name="getPushedKeys.uws" while 1 pushed =getPushedKeys() keys ="キーを押すと、下にキーコードが表示されます。alt+f2で終了<#CR>" for key in pushed keys =keys + key + "," next fukidasi( keys ) wendendiffunction getPushedKeys( skipToggles=true ) def_dll GetKeyboardState( var byte[] ):bool:user32.dll result ="" if skipToggles //トグル系のキーは何もしなくても押されたことになるのでデフォルトで排除 last =239 else last =255 endif buff =safearray( 0,last ) GetKeyboardState( buff ) for i =0 to last PushedKey =buff[ i ] if PushedKey > 127 result =result + i + "," endif next //余分なコンマを外す result =copy(result, 1, length( result )-1) result =split( result, "," )fend
2018.12.25
コメント(2)
えらく遠回りでしか取得できません。2019/01/27追記バカバカバカ!status(getid(get_thisuwsc_win),st_process)で簡単ジャン。以下は恥ずかしいけど、自分の無知をさらしておきます。(1)自身のウインドウID→自身のウインドウハンドル→自身のプロセスID手間がかかっているようですが、(2)より速い。pid=-9999def_dll GetWindowThreadProcessId( dword, var dword ):dword:user32.dllGetWindowThreadProcessId( idtohnd(getid( get_thisUWSC_Win )), pid )msgbox(pid)(2)powershell起動→$pidでpowershell自身のプロセスID取得→プロセス取得→親プロセス(つまりUWSC)のプロセスID取得遅いのはpowershell起動のオーバーヘッドのせいでしょうか。msgbox(trim( powershell( "(gwmi Win32_Process -filter ProcessId=$pid).ParentProcessId" ) ))
2018.12.19
コメント(0)
しろまささんブログに触発され、N進変換を書いてみました。siromasa進数には未対応。ChangeRadix.uwsif Get_UWSC_Name="ChangeRadix.uws" //1121を36進法で表示→v5 msgbox( NumbertoRadix( 1121, 36 ) ) //36進数「v5」の10進表示→1121 msgbox( RadixToNumber( "v5", 36 ) ) //36進を超えるとエラー→空文字 msgbox( NumbertoRadix( 1121, 38 ) )endiffunction NumbertoRadix( n, r ) com_err_ign with createoleobj( "ScriptControl" ) .language="JScript" .addCode( "function f(x,y){ return x.toString(y)}" ) result=.CodeObject.f(n,r) endwith com_err_ret if com_err_flg result="" endiffendfunction RadixToNumber( str, r ) com_err_ign with createoleobj( "ScriptControl" ) .language="JScript" .addCode( "function f(x,y){ return parseInt( x, y )}" ) result=.CodeObject.f(str,r) endwith com_err_ret if com_err_flg result="" endiffend
2018.12.19
コメント(0)
全3件 (3件中 1-3件目)
1

![]()