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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0426
魚犬マウスの感度を変更5解決


魚犬

リンク

2018/4/26(Thu) 09:29:10|NO.84160

HSPでマウスの感度を変更することは出来ないでしょうか?
標準命令に見当たらないようなのでAPIでできないかと思い調べてみたのですが、
user32.asを見てもSPI_GETMOUSESPEEDやSPI_SETMOUSESPEEDが見当たらず
どうすればいいのか分かりません。
以下のサイトを参考に調べてみました。
http://program.station.ez-net.jp/special/vcs/mouse/speed.asp

APIの使い方や調べ方の知識はないので、
他の言語で書いてあるようなAPIをHSPに移植する
基礎知識が学べるようなところがありましたら教えて下さい。



この記事に返信する


MillkeyStars

リンク

2018/4/26(Thu) 10:58:43|NO.84161


///コメントはすべてHSPに変換した場合の記載です。 using System.Runtime.InteropServices; //#module MouseSpeed public static class MouseSpeed{ //#include "user32.as" [DllImport("user32, SetLastError = true)] private static extern bool SystemParametersInfo(uint uiAction, uint uiParam, IntPtr pvVoid, uint fWinIni); //#define global SPI_GETMOUSESPEED 0x0070 private const uint SPI_GETMOUSESPEED = 0x70; //#define global SPI_SETMOUSESPEED 0x0071 private const uint SPI_SETMOUSESPEED = 0x71; //#deffunc Set int speed public static void Set(int speed){ //if (SystemParametersInfo(SPI_SETMOUSESPEED,0,speed,0) == 0){ //dialog "マウスカーソルの速度を設定できませんでした。" //} if ( ! SystemParametersInfo(SPI_SETMOUSESPEED, 0, new IntPtr(speed), 0)){ throw new Exception("マウスカーソルの速度を設定できませんでした。"); } } //return //#deffunc Get unsafe public static int Get(){ int result; //result = 0 //if (SystemParametersInfo(SPI_GETMOUSESPEED, 0, varptr(result),0) == 0){ //dialog "マウスカーソルの速度を取得できませんでした。" //} if ( ! SystemParametersInfo(SPI_GETMOUSESPEED, 0, new IntPtr((void*)&result), 0)){ throw new Exception("マウスカーソルの速度を取得できませんでした。"); } return result; } //return result } //#global

実際に使う際には、モジュール内の Set / Get という命令を使います。
下記は、完全に HSP の記載に書き換えたスクリプトです。

#module MouseSpeed #include "user32.as" #define global SPI_GETMOUSESPEED 0x0070 #define global SPI_SETMOUSESPEED 0x0071 #deffunc Set int speed if (SystemParametersInfo(SPI_SETMOUSESPEED,0,speed,0) == 0){ dialog "マウスカーソルの速度を設定できませんでした。" } return #deffunc Get result = 0 if (SystemParametersInfo(SPI_GETMOUSESPEED, 0, varptr(result),0) == 0){ dialog "マウスカーソルの速度を取得できませんでした。" } return result #global //以下実際に使ってみる Get mes "現在のマウススピードは、"+stat+" です" Set 11 //ここでスピードを 11 に設定(ここであり得ない数を指定するとエラーになる) Get //本当に設定されたのか調べる mes "マウススピードを "+stat+" に変更しました。"



魚犬

リンク

2018/4/26(Thu) 11:58:44|NO.84163

>MillkeyStarsさん
迅速な回答ありがとうございます!
無事動作しました。

ただ、自分のソフトウェアに組み込もうとすると、
#uselib "user32"を使っているため、
上のmoduleをインクルードすると競合エラーが発生してしまい組み込めませんでした。

#HSP script preprocessor ver3.5beta6 / onion software 1997-2017(c)
#Use file [hspdef.as]
#Error:定義済みの識別子は使用できません [getkeynametexta] in line 18 [プログラム.hsp]
#重大なエラーが検出されています

すでに#uselib "user32"を使っている場合、
どのように対処したらいいでしょうか?



MillkeyStars

リンク

2018/4/26(Thu) 12:54:47|NO.84164

あぁ、自分で定義しているのね。

#uselib "user32" #func global SystemParametersInfo "SystemParametersInfoA" int,int,int,int #define global SPI_GETMOUSESPEED 0x0070 #define global SPI_SETMOUSESPEED 0x0071 #module MouseSpeed #deffunc Set int speed if (SystemParametersInfo(SPI_SETMOUSESPEED,0,speed,0) == 0){ dialog "マウスカーソルの速度を設定できませんでした。" } return #deffunc Get result = 0 if (SystemParametersInfo(SPI_GETMOUSESPEED, 0, varptr(result),0) == 0){ dialog "マウスカーソルの速度を取得できませんでした。" } return result #global //以下実際に使ってみる Get mes "現在のマウススピードは、"+stat+" です" Set 11 //ここでスピードを 11 に設定(ここであり得ない数を指定するとエラーになる) Get //本当に設定されたのか調べる mes "マウススピードを "+stat+" に変更しました。"
自分で定義するならこんな感じだよ。user32.as は user32 の命令を定義するスクリプトなだけだから、user32.as を使わないで自分で定義すれば解決。
あと、
#define global 新規名称 定数値
となってるけど、新規名称の前の global ってのは、この名称は、モジュール内外どこでもこの名前を使えますって意味。
この global ってのを付けないで、モジュール内(またはモジュール外)で宣言すると、その空間でしか使えない名称ってこと。
詳しくは、#func のヘルプ参照。



MillkeyStars

リンク

2018/4/26(Thu) 13:02:23|NO.84165

追記です。
#func で実際に使用する際に関数として呼び出しができるのは、HSP 3.5 以上が必要です。
(HSP 3.5 より命令として宣言した物を関数として利用できるようになった)

HSP3.4 以下で利用する場合の関数としての呼び出しは、#cfunc に書き換えてください。



魚犬

リンク

2018/4/26(Thu) 13:32:48|NO.84166

>MillkeyStarsさん
完璧です!ありがとうございます!
#defineや#funcの説明も助かります。
#が付いている命令はなにか難しいことに使うんだなという印象しかなくて
理解できていませんでした。
今回の説明でよく分かりました。



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