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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0408
だいちょ非アクティブでもクリック割り込み18未解決


だいちょ

リンク

2012/4/8(Sun) 10:44:13|NO.45952

onclickでクリック時に割り込みは出来るのですが、HSPのウィンドウがアクティブでないと割り込めません。
アクティブでなくても割り込みする方法はありますか?
キーの割り込みは
http://tu3.jp/0524
があったので、クリックだけでも良いのでですが、出来ればクリックもキーも両方の割り込みが出来たほうがいいです。



この記事に返信する


cats

リンク

2012/4/8(Sun) 18:17:34|NO.45955

キーの取得ならキーフックを使うとできます。
http://tu3.jp/0524
DLLはここでダウンロードできます。

#include "keyhook.hsp" khHook *onKeyHook if stat=0 : dialog "フック失敗" : end stop *onKeyHook if khStat = 0 : mes "Code:"+ khKeyCode + " Name:" +khKeyName return



だいちょ

リンク

2012/4/8(Sun) 18:22:32|NO.45956

質問にもあるように、キーフックはもう使っています。



cats

リンク

2012/4/8(Sun) 18:26:38|NO.45958

あ、本当だ。
すみませんでした;



だいちょ

リンク

2012/4/9(Mon) 07:29:35|NO.45975


repeat // (何らかのマウス(キーも出来れば含めて)が押されているか取得する命令) if (↑の結果) = (押されている値) : goto *start wait 1 loop
見たいのでもいいです。



kamep

リンク

2012/4/9(Mon) 12:30:03|NO.45977

一応getkeyでも、ウィンドウがアクティブでない時に取得できるようですが..

repeat getkey key,1 :if key :goto *start ;左クリック getkey key,13 :if key :goto *start2 ;Enter wait 1 loop



だいちょ

リンク

2012/4/9(Mon) 16:52:09|NO.45978

そのことはもう知っているのですが、何らかのキーが押されていればジャンプするという風にしたいのです。



pizza

リンク

2012/4/10(Tue) 18:25:11|NO.46009

悪用しなければ自由に使って良いって書いてあるから、
KeyHook.cの中のWH_KEYBOARDをWH_MOUSEに変えてマウスフック用の
DLLをもうひとつ作るのが楽かな?

その場合はoncmdのジャンプ先でwparamにWM_LBUTTONUP等が入ってます。

ただ、lparamのMOUSEHOOKSTRUCTのアドレスは他プロセスのを読むのに
一手間要りそうです。(位置情報等は別手段で取得できるから別にいいかな?)



だいちょ

リンク

2012/4/10(Tue) 20:43:28|NO.46013

具体的にどうやればいいのでしょうか。
まだそういう知識はないもので・・・



pizza

リンク

2012/4/11(Wed) 13:43:16|NO.46033

VC++ 2010 Expressで説明すると

KeyHook.cをコピー改名して28行目のWH_KEYBOARDをWH_MOUSEに変更して保存

IDEを起動

空のwin32dllプロジェクトを作る

ソルーションエクスプローラのソースに追加->既存の項目で
修正済みのCソースを追加してビルド

keyhook.hspをコピー改名して1行目のifndefの文字列を変更
14行目の読み込むdll名を変更
16行目のoncmdで使うメッセージを別の値に(0x8000から0xBFFFの中で)

ん、関数名も変えとかなきゃまずいかな?
Cの方は変えなくても#funcの新規名称を変更すればいけるはず。
keyname関係の命令はいらないので消して良いです。

dllが使える状態になったらジャンプ先のラベルでwparamを調べて
判断します。


//マウスメッセージ #define WM_MOUSEMOVE 0x0200 #define WM_LBUTTONDOWN 0x0201 #define WM_LBUTTONUP 0x0202 #define WM_LBUTTONDBLCLK 0x0203 #define WM_RBUTTONDOWN 0x0204 #define WM_RBUTTONUP 0x0205 #define WM_RBUTTONDBLCLK 0x0206



だいちょ

リンク

2012/4/11(Wed) 16:36:59|NO.46037

本当にすいませんのですが、IDEってなんでしょうか?
総合開発環境とかなんとか出てきたのですが、起動ってどうやってするのでしょうか?
あと調べてはみるのですが、空のwin32dllプロジェクトを作るも念のため教えていただけると嬉しいです。



pizza

リンク

2012/4/12(Thu) 13:17:41|NO.46049

VC++のインストールはしてありますか?
http://www.microsoft.com/japan/msdn/vstudio/express/
IDEはVC++がインストールできてればスタートメニューから起動できます。

プロジェクトはメニューのファイル->新規作成でプロジェクトをクリック。

出てきたウィザードの下の方にプロジェクトの名前を入力。

テンプレートのwin32プロジェクトをダブルクリック。

次へをクリックしてアプリケーションの種類でDLLを選択、
空のプロジェクトにチェックを入れて完了をクリック。

こんな感じです。
ソースは出来てるやつを使うから、C言語がわからなくてもDLLが作れます。



だいちょ

リンク

2012/4/12(Thu) 19:02:05|NO.46053

本当にすいません。
VC++はインストールしてあるんですが、IDEというそれらしきものはありません。
スタートメニューのすべてのプログラムのMicrosoft Visual Studio 2010 Expressというところにあるんですか?
頭悪くてすいません・・・



晩御飯

リンク

2012/4/13(Fri) 00:40:45|NO.46056

IDEは知っての通り統合開発環境のことでこの場合はMicrosoft Visual Studioのこと
IDE起動してねはVisual Studio起動してねってこと



だいちょ

リンク

2012/4/13(Fri) 18:48:14|NO.46061

Visual Studioっていうソフトがあるのですか?
Microsoft Visual Studio 2010というフォルダの中にはそんなのありませんでしたけど・・・
本当に本当にすいませんっ



暇人

リンク

2012/4/13(Fri) 22:09:44|NO.46066

これじゃだめ?

dim key_code,10 ldim key_label,256 repeat 256 key_label(cnt)=*キーコード表示 loop key_label(1)=*左クリック key_label(2)=*右クリック key_label(27)=*Esc終了 key_label(32)=*スペースキー *キー監視 key_cnt=0 repeat wait 1 repeat 125,1 getkey key,cnt if key = 1 { key_code(key_cnt)=cnt : key_cnt+1 } loop if key_cnt>0 {break} loop color 255,255,255 boxf color pos 0,0 mes "同時に押された数 = "+key_cnt mes "↓押されてるキーコード" repeat key_cnt code=key_code(cnt) gosub key_label( code ) loop goto *キー監視 *キーコード表示 mes code return *左クリック mes str(code)+" = 左クリック" return *右クリック mes str(code)+" = 右クリック" return *スペースキー mes str(code)+" = スペースキー" return *Esc終了 mes "終了します" wait 1000 end return



GrapeColor(DION)

リンク

2012/4/13(Fri) 23:15:23|NO.46067

>>暇人さん
それで何で動くんだろう・・・と疑問に思ってしまった・・・
突っ込ませてください><
ラベルに日本語を使うのはちょっと・・・



だいちょ

リンク

2012/4/14(Sat) 00:19:13|NO.46071

ありがとうございます。
分かりやすいように日本語にしてくれたんですよね。

片っ端からキー判定をしていくという手がありましたか・・・
参考にさせて頂きます。



pizza

リンク

2012/4/14(Sat) 03:33:51|NO.46072

>スタートメニューのすべてのプログラムのMicrosoft Visual Studio 2010 Expressというところにあるんですか?
そこにあるMicrosoft Visual C++ 2010 Expressをクリックしてください。
ファイル名はVCExpress.exeです。

フック以外で望みの動作が実現できそうだったら、DLLを作る必要はないですけどね。



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