tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルマウスの左ボタンと右ボタン制御の交換
記事No16604
投稿日: 2021/03/22(Mon) 22:05
投稿者マイメモリー
 教えて下さい。
 マウスの左ボタンと右ボタンで行っていた制御を一時的に交換したい
のですが、どのようにプログラムすれば宜しいのでしょうか。

[ツリー表示へ]
タイトルRe: マウスの左ボタンと右ボタン制御の交換
記事No16605
投稿日: 2021/03/23(Tue) 17:11
投稿者魔界の仮面弁士
> マウスの左ボタンと右ボタンで行っていた制御を一時的に交換したい
> のですが、どのようにプログラムすれば宜しいのでしょうか。

こんな感じで。

Option Explicit

#If VBA7 Then
Private Declare PtrSafe Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoW" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
#Else
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoW" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
#End If

Public Property Let SwapMouseButton(bool As Boolean)
    Const SPI_SETMOUSEBUTTONSWAP As Long = 33&
    SystemParametersInfo SPI_SETMOUSEBUTTONSWAP, IIf(bool, 1&, 0&), ByVal 0&, ByVal 1&
End Property

Public Property Get SwapMouseButton() As Boolean
    Const SM_SWAPBUTTON As Long = 23&
    SwapMouseButton = CBool(GetSystemMetrics(SM_SWAPBUTTON))
End Property

[ツリー表示へ]
タイトルRe^2: マウスの左ボタンと右ボタン制御の交換
記事No16606
投稿日: 2021/03/29(Mon) 21:10
投稿者マイメモリー
> > マウスの左ボタンと右ボタンで行っていた制御を一時的に交換したい
> > のですが、どのようにプログラムすれば宜しいのでしょうか。
>
> こんな感じで。
>
> Option Explicit
>
> #If VBA7 Then
> Private Declare PtrSafe Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoW" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
> Private Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
> #Else
> Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoW" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
> Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
> #End If
>
> Public Property Let SwapMouseButton(bool As Boolean)
>     Const SPI_SETMOUSEBUTTONSWAP As Long = 33&
>     SystemParametersInfo SPI_SETMOUSEBUTTONSWAP, IIf(bool, 1&, 0&), ByVal 0&, ByVal 1&
> End Property
>
> Public Property Get SwapMouseButton() As Boolean
>     Const SM_SWAPBUTTON As Long = 23&
>     SwapMouseButton = CBool(GetSystemMetrics(SM_SWAPBUTTON))
> End Property

魔界の仮面弁士さん、早速のご回答をありがとうございました。
ご返事が遅くなり、申し訳ございませんでした。
ただ、具体的にどのようにこのプログラムをformに配置すれば良いのか、わからないのが
正直なところです。まだまだ私自身が初心者であることを痛く感じている次第です。
このプログラム部分は、formのここに配置する。などのご指示は虫が良すぎますかね。
でも、お願いしたいです。・・・無理を承知で。

[ツリー表示へ]
タイトルRe^3: マウスの左ボタンと右ボタン制御の交換
記事No16607
投稿日: 2021/03/29(Mon) 22:12
投稿者魔界の仮面弁士
引用は適切に。
http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=msgview&no=4580
http://hanatyan.sakura.ne.jp/logbbs/wforum.cgi?mode=msgview&no=6111


> マウスの左ボタンと右ボタンで行っていた制御を一時的に交換したい

マウスボタンの交換は、Windows 全体に対して影響を与える行為です。
通常は、コントロール パネルの マウスのプロパティ ダイアログの
「主と副のボタンを切り替える」のチェックボックスを使って切り替えられます。
https://faq.nec-lavie.jp/qasearch/1007/app/servlet/relatedqa?QID=018276

先のコードは、この設定をプログラムから On/Off するためのものですね。


> このプログラム部分は、formのここに配置する。などのご指示は虫が良すぎますかね。

新規に標準モジュールを追加して、そこにこのコードを書いてください。それで準備完了です。
(標準モジュールの代わりに、Form の先頭にこれらのコードを貼ることもできます)


左右のボタンを交換したければ、
 SwapMouseButton = True
と書くことで入れ替わります。そして、
 SwapMouseButton = False
と書くことで、元の状態に戻ります。


今回の目的は「制御を一時的に交換したい」というものですから、
どのタイミングで交換を開始し、どのタイミングで元に戻したいのかは
ご自身で決めてください。

たとえばフォーム起動時に入れ替えるようにし、
フォームを閉じたときのイベント処理で、元に戻すのも良いでしょう。

あるいはフォームに CheckBox を貼っておき、
それを On/Off したタイミングで切り替えたいなら、
 Private Sub CheckBox1_Click()
  SwapMouseButton = CheckBox1.Value
 End Sub
などと書くことができます。

[ツリー表示へ]
タイトルRe^4: マウスの左ボタンと右ボタン制御の交換
記事No16608
投稿日: 2021/04/11(Sun) 13:20
投稿者マイメモリー
魔界の仮面弁士さんへ、
 
 早速のご回答をありがとうございました。無理を承知で、
虫の良すぎるお願いを致しましたが、とても参考になるご
返事をいただき感謝しております。
 私のソフトも、これでだいぶ融通のきく動きができるよ
うになりました。
 重ね重ね感謝申し上げます。

[ツリー表示へ]