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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0103
トッポホットキーについての質問です8解決


トッポ

リンク

2012/1/3(Tue) 13:12:46|NO.44015


// API 使うため。 #uselib "user32.dll" #func RegisterHotKey "RegisterHotKey" int,int,int,int #func UnregisterHotKey "UnregisterHotKey" int,int #define WM_HOTKEY $0312 // 修飾子の定義 #define MOD_ALT 1 #define MOD_CONTROL 2 #define MOD_SHIFT 4 #define MOD_WIN 8 // 適当に識別子を決めよう #define EVENT1 12345 #define EVENT2 67890 oncmd gosub *onHotKey, WM_HOTKEY onexit *unregHotkey // ホットキーを登録する ウィンドウハンドル, 識別子, 修飾子(|でつなげる), キーコード(ASCII文字の場合は''で囲めばOK) RegisterHotKey hWnd, EVENT1, MOD_ALT|MOD_CONTROL, 'N' RegisterHotKey hWnd, EVENT2, MOD_ALT|MOD_CONTROL, 'P' stop *onHotKey // ホットキーが押されるとここに飛んでくる。 // この中ではgotoとstopを禁止します。gosub は ok // wParam に 指定した 識別子 が入ってるので、それを見て処理を切り分ける。 if wParam = EVENT1 : dialog "Event1が発生しました。" if wParam = EVENT2 : dialog "Event2が発生しました。" return *unregHotkey // ホットキー解除 UnregisterHotKey hWnd,EVENT1 UnregisterHotKey hWnd,EVENT2 end

このスクリプトを変更してNUMPADのキーをホットキーにすることはできないでしょうか?



この記事に返信する


Cookies

リンク

2012/1/3(Tue) 13:30:19|NO.44016

http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200701/07060021.txt
ですね。

キーを指定しているのは、"RegisterHotKey"の行でして、
その一つ上の行のコメントにあるように、一番最後の「キーコード」のところです。
'N'と'P'というのはそれぞれNのキーコード、Pのキーコードと等しいのでそうなっています。

キーコードはgetkey命令の第二引数の数値と同じです。
getkey命令をHSP Document Libraryで調べてみてください。
サンプルではキーコードを取得できるスクリプトがあります。
それでNUMPADのキーコードを調べてみてください。



トッポ

リンク

2012/1/3(Tue) 14:10:31|NO.44019

RegisterHotKey hWnd, EVENT1, MOD_ALT|MOD_CONTROL, 'N'

のどこを変更すればできるのでしょうか? 自分なりに下記のように変更してみたのですができませんでした。
RegisterHotKey hWnd, EVENT1,, '49'



fortunehill

リンク

2012/1/3(Tue) 14:33:04|NO.44020

ご参考。
#define VK_NUMPAD0 0 〜 9 60 ;〜 69 テンキーの [0] 〜 [9]
#define VK_MULTIPLY 6A ;テンキーの [ * ]
#define VK_ADD 6B ;テンキーの [ + ]
#define VK_SEPARATOR 6C ;テンキーの [Enter]
#define VK_SUBTRACT 6D ;テンキーの [ - ]
#define VK_DECIMAL 6E ;テンキーの [ . ]
#define VK_DIVIDE 6F ;テンキーの [ / ]

HSPではキャラをシングルクオーテーションで囲むと文字コードを返します。
(’1’=49)



RegisterHotKey hWnd, EVENT1, , 49 RegisterHotKey hWnd, EVENT1, , '1'



fortunehill

リンク

2012/1/3(Tue) 14:38:01|NO.44021

表がコピペで見ずらいので再度定数だけ貼ります。

$60 ;〜 $69 テンキーの [0] 〜 [9]
$6A ;テンキーの [ * ]
$6B ;テンキーの [ + ]
$6C ;テンキーの [Enter]
$6D ;テンキーの [ - ]
$6E ;テンキーの [ . ]
$6F ;テンキーの [ / ]



トッポ

リンク

2012/1/3(Tue) 14:45:39|NO.44022


#define VK_NUMPAD0 0 〜 9 60 ;〜 69 テンキーの [0] 〜 [9] #define VK_MULTIPLY 6A ;テンキーの [ * ] #define VK_ADD 6B ;テンキーの [ + ] #define VK_SEPARATOR 6C ;テンキーの [Enter] #define VK_SUBTRACT 6D ;テンキーの [ - ] #define VK_DECIMAL 6E ;テンキーの [ . ] #define VK_DIVIDE 6F ;テンキーの [ / ]



// 修飾子の定義 #define MOD_ALT 1 #define MOD_CONTROL 2 #define MOD_SHIFT 4 #define MOD_WIN 8

のところに追加して

RegisterHotKey hWnd, EVENT1, , '1'

を追加してもテンキーでEvent1が発生しました。と出てくれません。



Cookies

リンク

2012/1/3(Tue) 14:56:50|NO.44023

んー。
一応説明すると、#defineってのはマクロ定義、文字列置換みたいなものなんです。
それから
>#define VK_NUMPAD0 0 〜 9 60 ;〜 69 テンキーの [0] 〜 [9]
の行は;の位置がおかしい気がしますし、$もないし、スクリプトにあっても無意味です。
スクリプトに書かないで、掲示板での説明文書としてお読みください。

60がキー「テンキー0」に対応し、
61がテンキー1、
62がテンキー2、
69がテンキー9と対応しています。そういうことです。

ので、RegisterHotKey hWnd, EVENT1, 0, $61で動くはず。



fortunehill

リンク

2012/1/3(Tue) 14:57:54|NO.44024

ごめん俺が悪かった。

ご参考部分の#defineは貼る必要は無いです。
ナムキーの参考として乗せたので但しあっても動くハズですが
(キーボードの"1"とテンキーの"1"の違いを認識してもらう為)

'1'=49はキーボード左上の"1"なのでNUMPADが外付(USB:OEM)などの場合
キーコードが異なりますから、その装置の"1"が押された場合のキーコードを知る
何らかの方法で必要があります。

(尚上の方のぷまさんのサンプルで取得できるかどうかは判りません。)



トッポ

リンク

2012/1/3(Tue) 14:59:58|NO.44025

皆さんありがとうございます。
無事解決しました!
無知な自分ですいませんでしたw



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