HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0425
shi-taplkey命令について6解決


shi-t

リンク

2008/4/25(Fri) 21:41:26|NO.15386

初めまして。質問させて頂きます。
aplkey命令を使ったテストをしてみようと思って、少し書いてみたはいいのですが
うんともすんとも反応してくれません。

キー情報を送信する側のソース

#include "hspext.as" aplsel "テスト用" title ""+refstr repeat aplkey 65 wait 10 loop

キー情報を受け取る側のソース

title "テスト用" repeat getkey key,65 if key=1 : end wait 1 loop

原因は一体何なのでしょうか…
ヘルプや過去ログは何度も読み返したのですが、完全に思い込んでしまったのか、間違いを見つけることができません。
どうかご教授よろしくお願いいたします。



この記事に返信する


As

リンク

2008/4/25(Fri) 22:46:04|NO.15390

恐らくタイミングが合わなかったのでしょうか、getkeyでは無理でしたが
onkeyでは取得することができました。



title "テスト用" onkey *on_key stop *on_key if iparam=65 : end stop

テスト用のほうを書き換えると可能なようです。



shi-t

リンク

2008/4/25(Fri) 23:09:21|NO.15392

レスありがとうございます。
テスト用の方に問題がありましたか…
もしgetkey命令を使ってる他人のプログラムがあれば、aplkeyでは不可能ということでしょうか?
最終的には他のプログラムを自動操作出来るようにしたいのですが…
どうすればいいでしょうか?
引き続き、どうかご教授お願いいたします。



As

リンク

2008/4/25(Fri) 23:39:14|NO.15394

もしかしたらgetkeyでも取得できる方法があるのかもしれませんが、あまり定かではありません。
恐らく、aplkeyで送られるキー情報というのはHSP側でwait,await,stopが実行されたあとに送られる
ようです。つまり、通常のプロシージャを介したメッセージの受け渡しとなるわけです。

この反面、getkeyはHSPの命令実行中にキー押下を調べているようでそのあたりで条件式のずれが生じている
ようです。(恐らくWin32APIのGetKeyStateにあたる命令)

ですので、getkeyで処理している場合はaplkeyは不可能と考えたほうが正しいのかもしれません。

ですので、getkeyでもキー押下を認識されるような関数を使う必要がありますが、現在の所そのような
機能の関数を見つけることができませんでしたが、根気をもって探してみればあるかもしれません。



As

リンク

2008/4/25(Fri) 23:43:48|NO.15395

一番有効なのが Win32APIを使った keybd_eventまたはSendInput を使う方法ですが、目的のウィンドウ以外のウィンドウに
も影響が及ぶためお勧めできませんがこれも一つの方法です。

影響が及ぶというのは、関係のないウィンドウにもキーを押したことを知らせてしまうということです。



shi-t

リンク

2008/4/26(Sat) 13:43:37|NO.15410

レスありがとうございます。

keybd_eventで無事、テスト用の方も反応しました。
…ところが、いざ他のプログラムでテストすると反応が無く…
SendInputのことについて色々調べてみた所、DirectInputの方かと思い
それも実験しましたが、なぜか反応がありませんでした。
それ以外にキー情報を送る方法も探してみましたが、どうやら無いようですね…
今回は残念ながら諦めざるを得ないようです。

Asさん、色々と教えて頂きありがとうございました。



As

リンク

2008/4/26(Sat) 22:09:17|NO.15422

蛇補足ですが、
DirectPlayによるキー認識の場合は結構特殊で、ゲームなどでマクロ目的でやろうと思っても
不可能な場合があるようです。

というのは、DirectPlayはデバイスから直接キーデータを取得しているような感じになっているので、
キーボードの仮想デバイスを作って操作する方法しない限りはだめなようです。



ONION software Copyright 1997-2023(c) All rights reserved.