Powered by SmartDoc

�C���^���N�V�����Z�p�̎��H�I�J���v���Z�X

2009�N5��17������-(�{����4�͂ň����Ă���)-6/2-(�h�����X)-6/11-(Mouse������1�{��)-6/13�E���e
����ŕF+���␒�V
http://akihiko.shirai.as/projects/WiiRemote/

�ڎ�

���̏͂ł͑�4�͂Ŋw��WiimoteLib�ɂ��ԊO���Z���T�[�@�\������ɂ����߂āA.NET�ɂ��}�E�X����v���O�����uWiiRemoteMouse�v���J�����܂��B���H�I�ȊJ���v���Z�X��ʂ��āA���p�ł���WiiRemote���p�C���^���N�e�B�u�Z�p��̌����A���͂́u���K���v�ւ̃X�e�b�v�Ƃ��܂��B

�Ƃ���Ń}�E�X�Ƃ����΁A���ɑ�3�͂ŁuGlovePIE�v���g���č��@�\�ȃ}�E�X���X�N���v�e�B���O�Ŏ������܂����B�����ł͂�����v���g�^�C�v�Ƃ��āA.NET�‹��ɂ����鍂�x�ȃA�v���P�[�V�����J�����X�e�b�v��ǂ��ĉ�����Ă����܂��B�P��GlovePIE�łł��邱�Ƃ�.NET�ɈڐA���Ă��ʔ����Ȃ��ł�����A���ɁA�����ł͑�4�͂ł͈���Ȃ�����.NET�̊J����@��Ǝ��N���X�̍쐬�A�O��DLL�̎�荞�݁A�O���t�B�b�N�X�⃆�[�U�r���e�B�����コ����`���[�j���O�Ȃǂ����ۂ̊J����ʂ��ĉ�����܂��B

�d�l�ƊJ���̗���̐���

����J������}�E�X����v���O�����uWiiRemoteMouse�v�ŗ��p�����{�Z�p�̑����́A���܂܂Ŋw�񂾋Z�p�̑g�ݍ��킹�ł��B�ŏI�I�ɂ́A�F����ŐV�����@�\��lj��������Ȃ�悤�ɂł��Ă���A��ׂđ傫�ȃv���O�����ɂȂ��Ă������Ƃł��傤�B��4�͂ł́A�����ȋ@�\�̊m�F�̂��߂ɓ�����������R�[�h�������Ă��܂������A���̃R�[�f�B���O�X�^�C���̂܂ܑ傫�ȃv���O�����ɂȂ��Ă����ƁA�“ǐ��������A�����፬���ɂȂ����v���O�����R�[�h�ɂȂ��Ă������Ƃ��\�z����܂��B���̂悤�ȃv���O�����͑��́u�X�p�Q�e�B�R�[�h�v�ƌĂ΂�܂��B�l�ł̊J���͂Ƃ������Ƃ��āA�`�[���ł̊J���ɂ����ẮA�“ǐ���f�o�b�O�̂��Â炳����A�v���W�F�N�g�̐i�s������ɂ��錴���ɂ��Ȃ�܂��B

������g�ށuWiiRemoteMouse�v�̂悤�Ɂu��C�ɏ����グ�邱�Ƃ��ł��Ȃ����K�́`��K�͂̃v���O�����v���J������Ƃ��́A�܂��͈�U�A�v���O���~���O���痣��A��肽�����Ƃ�A�����������C���^���N�V�����A�ۑ�ȂǁA�u�d�l�v���ȒP�ɏ����o���܂��B���������������P�ʂ⏇�Ԃ�\�Ȃǂ܂Ƃ߁A�֐���N���X�Ƃ������܂Ƃ܂��������̒P�ʂŊJ����i�߂Ă����Ɣ�r�I���܂������܂��B

�͂��߂Ďg���Z�p�̊J���ł���΁u�s���l�܂��Ă���d�l���čl�v�Ƃ�����@�ł��ǂ��̂ł����A����͊��ɑ�3��4�߁uGlovePIE�ł‚���w���@�\�}�E�X�x�v��A��4��9�߁u�ԊO���Z���T�[���g���v�ɂ����Ċ�{�ƂȂ�Z�p�͎����ς݂ł��̂ŁA����́uWiiRemoteMouse�v�̊J���ł́A���Ɏ�������@�\�Ɨ���A�v���C�I���e�B(�D�揇��)���A�ȉ��̂悤�ɂ܂Ƃ߂Ă݂邱�Ƃ��ł���̂ł͂Ȃ��ł��傤���B

�uWiiRemoteMouse�v�̊T�v�݌v
�v���C�I���e�B WiiRemote������ �@�\
1 �ԊO���ƃ{�^���̏�� �t�H�[���ɕ`��
2 �ԊO���|�C���^�̈ړ� �}�E�X�|�C���^�̈ړ�
3 [A]�{�^�� �}�E�X���{�^��
4 [A]�{�^�������� �}�E�X�E�{�^��
5 �o�b�e���[�c�� LED�ɓd�r�c�ʃ��x���\��

�����Ƃ����ƁA���荞�݂����@�\������Ƃ������܂��B�Ⴆ�΃����`���[��A�L�[���͂̑���ȂǁA���Ɋw�K�����@�\�𑼂̃{�^���Ɋ��蓖�ĂĂ݂Ă��ǂ��ł��傤�B�\�̉��̕��Ƀv���C�I���e�B�ƂƂ��ɏ��������Ă݂Ă��������B���̍�Ƃ���ʓI�Ɂu�T�v�݌v�v�Ƃ����܂��B�ǂ��������Ƃ��������A�Ƃ����u�T�v�v�����̂����ɐ݌v���Ă����܂��B

�l�Ԓ��S�F�C���^���N�e�B�u�Z�p�݌v�̃q���g

�@�{���̓v���O���~���O�̖{�Ȃ̂ł����u�C���^���N�e�B�u�Z�p�v�ɂ‚��Ă͏��������[���A�̌n�I�ɂ��‚����Ă��܂��B

�@���̃Z�N�V�����ōs���u�T�v�݌v�v�Ƃ́A�܂��ɃC���^���N�e�B�u�Z�p�̊j�ƂȂ�d�v�ȃ|�C���g�ł��B����́u�����������@�\�v��\�ɏ����o���āA�v���C�I���e�B���‚���c�Ƃ������@���̗p���܂������A����͑S�Ă̏ꍇ�ɂ����Đ�����������ł͂Ȃ��A�ނ���u����̂��߂Ɏd���Ȃ��v��ʓI�ȃ\�t�g�E�F�A�J����@�̗�����Ƃ�܂����B

�@�C���^���N�e�B�u�Z�p�ɂ�����T�v�݌v�ɏd�v�Ȃ��Ƃ́u�z�����邱�Ɓv�ł��B�@�\�I�Ȑ�����uWiiRemote�ɂ��������@�\�����邩��...�v�Ƃ������u�@�\�w��(functionally-oriented)�v�̐݌v�ł͂Ȃ��A���ꂩ��u�J�����鉽��(something)�v���A�u�ǂ�ȑ̌�(experience)�v�����[�U�[�ɗ^���A���̑̌���ʂ��āu�ǂ�ȉ”\��(possibilities)�v�������āA�u�ǂ�ȃ��A�N�V����(reaction)�v�ɂ‚Ȃ���̂��B�܂��͂����ɑz���͂��g���w�͂����Ă��������B�‚܂�A���Ԃ������Ă��������B

�@��������Łu���[�U�[�C���^�[�t�F�[�X�f�U�C���v�Ƃ����l����������܂��B�l�Ԓ��S�f�U�C��(HCD:Human Centered Design)�⃆�[�U�r���e�B����̂��߂̕]����@��݌v��@�Ȃǂ́A�ߔN��Web��GUI(Graphical User Interface)�̃C���^�[�t�F�[�X�݌v�Ȃǂ𒆐S�ɁA�ȑO�����͂邩�ɑ̌n�I�ɐ�������Ă��Ă��܂��B�Ⴆ�΍��ەW���K�i�uISO13407�v�ɁuHuman-centred design processes for interactive systems(�C���^���N�e�B�u�V�X�e���̐l�Ԓ��S�݌v�ߒ�)�v�Ƃ��ċK�肳��Ă��܂��B

�@���ۋK�i�Ƃ����ƁA��������邩������܂��񂪏�ŏ������Ƃ���A�u�@�\�ł͂Ȃ��l�Ԓ��S�v�ɍl���邱�Ƃł��B�݌v�̏����ŋ�̓I�ȃ��[�U�[��A�����ŋN���肤��̌����u�z���v���A�����Ď��ۂɍ�������m�ƃ��[�U�[�̏󋵂��ώ@���A�J��Ԃ��݌v���s���c�Ƃ����v���Z�X�ɂȂ�܂��B

�@�������������[�U�[�C���^�[�t�F�[�X�f�U�C���̉��ǂ���ƂƂ��Ď��H���A���ʂ��グ�Ă����Ƃ�����܂��B�������Web�T�C�g�ɂ́A���̘b��Ɋւ��Ė��ɗ��������Ȗ{����R�Љ��Ă��܂��B

���\�V�I���f�B�A��

�@https://www.sociomedia.co.jp/category/books

���ۂɎ�������@�\�Ƃ��̏��Ԃ����܂�܂����̂ŁA���͏����̒P�ʂ��ƂɊJ���̗�����l���܂��B�������ʓI�ɂ́u�v��v�ƌ����܂��B�������n�߂đ̌�����l�ɂƂ��āA��̂��Ƃ͌��ʂ����‚��܂��񂩂�u���ܑz�肵�Ă��闬��v�ł��܂��܂���B�����o���Ă݂܂��B

  1. �v���W�F�N�g�̐V�K�쐬�ƃt�H�[���f�U�C��
  2. �����R�[�h�̍쐬
  3. �t�H�[���̃C�x���g����
  4. �ԊO���Ń}�E�X�J�[�\���ړ�
  5. �����ꂽ�{�^���ɑ΂��鏈��
  6. �t�H�[����LED�ɂ�鑕��

�u�T�v�݌v�v��u�v��v���ق�̏����ӎ�����K�����‚��邾���ŁA�v���W�F�N�g�̐i�s�͑傫���ς��܂��B�����ł́u�T�v�݌v�v�ƊȒP�Ȍv����쐬���܂����B���ۂ̃v���W�F�N�g�ł́A�����Ɂu�����v�A�u���ʂ��̂‚��Ă��Ȃ��Z�p�v�A�u�����ƕ]���v�A�u�݌v�̌������v�Ȃǂ𐷂荞��ł����ƁA���v���W�F�N�g�炵���Ȃ��Ă����܂��B�u�T�v�݌v�v�����ڍׂȉ�ʃC���[�W��@�\�A���������ł̃p�����[�^�[�A���Ƃ��΁u�������v�����b�������ƂȂ̂��A�Ȃǂ𐷂荞��ł����Ɓu�ڍא݌v�v�ɂȂ�܂��B

�{����WiiRemote�ɂ�����v���O���~���O����Ƃ��̓ƏK���ړI�Ȃ̂ł����܂ł̃��x���ɂƂǂ߂Ă����܂��B�����̂���l�́u�v���W�F�N�g�}�l�W�����g�v�ɂ‚��ď��X�̎��p���R�[�i�[��T���Ă݂�Ɨǂ��ł��傤�B�v���O���~���O����Ɩ��̃v���W�F�N�g�܂ł��܂��܂Ȏ��p��������͂��ł�(���莎��������܂�)�B����IT�p��̃v���W�F�N�g�}�l�W�����g�ƁA�r�W�l�X�p��̃v���W�F�N�g�}�l�W�����g�͈Ӗ�����Ƃ���ƈ������e�������Ԃ�ƈقȂ�܂����A������ɂ���u�����ǂ݂��Ă݂Ė��ɗ��Ž��p���v�Ȃ�A�����ēǂ�ł݂Ă����͂Ȃ��ł��傤�B

�v���W�F�N�g�̐V�K�쐬�ƃt�H�[���f�U�C��

�܂��͕��K�����˂āA�V�����v���W�F�N�g���쐬���܂��B�ԊO���Z���T�[�̓��͂���M���ăt�H�[���ɕ`�悷��v���O���������܂��傤�B��4��9��3�ŏЉ���ԊO��4�_���o�ɂ��u���W�̕`��v�v���O�������x�[�X�ɂ��āA���ς��Ă��ǂ��̂ł����A���K�����˂ă|�C���g�𗬂�Ő������܂��̂Ŏ��ۂɎ�𓮂����Ă݂Ă��������B

�܂�C#.NET2008�ŐV�K�v���W�F�N�g���쐬���܂��B�uVisual C#�v���uWindows�t�H�[���A�v���P�[�V�����v�Ńv���W�F�N�g�����uWiiRemoteMouse�v�Ƃ��܂��B�\�����[�V�����G�N�X�v���[���[�ɂ���u�Q�Ɛݒ�v���E�N���b�N���A�Q�Ƃ̒lj��Łu�ŋߎg�p�����t�@�C���v����uWiimoteLib.dll�v(�o�[�W����1.7.0.0)��I�����܂��B�u�\���v���u�c�[���{�b�N�X�v��I�сA�uForm1�v�ɑ΂���2�‚̃{�^����z�u��Text�v���p�e�B���u�ڑ��v�A�u�ؒf�v�Ƃ��܂��B�z�u�����{�^��2�‚����ꂼ��_�u���N���b�N���āA�{�^�����������Ƃ��̃C�x���g�������������܂��B�܂��uForm1�v��PictureBox��z�u���T�C�Y���u256, 128�v�ɐݒ肵�܂��B�f�o�b�O�p�̕������\������ꏊ�Ƃ��āuLabel1�v��z�u���܂��B

Form1�̃f�U�C����

�܂��̓X�^�[�g�n�_�ƂȂ�u�ŏ��̏�ԁv�ɂȂ�܂ŃR�[�h�𐮗����܂��傤�B�R�[�h�̏�ʼnE�N���b�N���uusing�̐����v���u���g�p��using�v�̍폜�Ƃ��邱�ƂŁAusing�錾�ɂ���K�v�Ȃ��N���X�͍폜���邱�Ƃ��ł��܂��B�K�v�ȃN���X�uWiimoteLib�v�����������܂��B������ŏ��̈���Ƃ��܂��B

�ŏ��R�[�h(Form1.cs)[C#]
using System;
using System.Drawing;
using System.Windows.Forms;
using WiimoteLib;

namespace WiiRemoteMouse {
 public partial class Form1 : Form {
  public Form1() {
    InitializeComponent();
  }
  private void button1_Click(object sender, EventArgs e) {
  
  }
  private void button2_Click(object sender, EventArgs e) {
  }
 }
}

�����܂ł̃X�e�b�v�ŊԈႢ�͋N���Ȃ��͂��ł����A�m�F�̂��߈�x[F5]�L�[�Ŏ��s���Ă����Ȃ��‚��Ă����Ɨǂ��ł��傤�B�������t�H�[�����\�����ꂽ��I�����A�v���W�F�N�g�S�̂�ۑ����܂��B�u�t�@�C���v���u�S�Ă̕ۑ��v�Ƃ��āuC:\WiiRemote�v�Ƀ\�����[�V�������uWiiRemoteMouse�v�ŕۑ����܂��傤�B

�v���W�F�N�g�̕ۑ���Y�ꂸ��

��{�R�[�h

����ł́A��4��9�߁u�ԊO���Z���T�[���g���v�ŊJ�������R�[�h���Q�l�ɂ��āA�ȉ��̂悤�Ȋ�{�R�[�h���쐬���܂��傤�B

��{�R�[�h(Form1.cs)[C#]
using System;
using System.Drawing;
using System.Windows.Forms;
using WiimoteLib;  //WimoteLib�̎g�p��錾
namespace WiiRemoteMouse {
 public partial class Form1 : Form {
  Wiimote wm = new Wiimote();      //Wiimote�N���X���쐬
  Boolean isConnected = false;     //WiiRemote���ڑ����ꂽ��
  public Form1()  {
    InitializeComponent();
   //���X���b�h����̃R���g���[���Ăяo������
   Control.CheckForIllegalCrossThreadCalls = false; 
  }
  //WiiRemote�̏�Ԃ��ω������Ƃ��ɌĂ΂��֐�
  void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args) {
    WiimoteState ws = args.WiimoteState;  //WiimoteState�̒l���擾 
    DrawForms(ws); //�t�H�[���`�ʊ֐���
  }
  //�t�H�[���`�ʊ֐�
  public void DrawForms(WiimoteState ws) {
    //�O���t�B�b�N�X���擾
    Graphics g = this.pictureBox1.CreateGraphics();
    g.Clear(Color.Black);//��ʂ����F�ɃN���A
    g.Dispose();//�O���t�B�b�N�X�̉��
  }
  //�ڑ��{�^���������ꂽ��
  private void button1_Click(object sender, EventArgs e) {
    wm.Connect();                            //WiiReote�̐ڑ�
    wm.WiimoteChanged += wm_WiimoteChanged;  //�C�x���g�֐��̓o�^
    //���|�[�g�^�C�v�̐ݒ�
    wm.SetReportType(InputReport.IRAccel, true);
  }
  //�ؒf�{�^���������ꂽ��
  private void button2_Click(object sender, EventArgs e) {
    wm.WiimoteChanged -= wm_WiimoteChanged; //�C�x���g�֐��̓o�^����
    wm.Disconnect();  //WiiRemote�ؒf
    wm.Dispose();     //�I�u�W�F�N�g�̔j��
  }
 } 
}

�R���p�C�����ē���m�F�����܂��BForm1�̖`����WiiRemote�̐ڑ���Ԃ��Ǘ�����ϐ��uBoolean isConnected�v��錾���Ă��܂��B���񃌃|�[�g�^�C�v�́uIRAccel�v�A�‚܂�w�ԊO���{�����x�Z���T�[�x�Ƃ��܂��B�uIRExtensionAccel�v�ł��ǂ��̂�������܂��񂪁A�����ł͊g���[�q���g���\��͂���܂���̂ŁA�œK�ȃ��[�h��I�����Ă����܂��傤�B

�R�[�h�̃u���b�N���Ɗ֐���

�����ŁA�����K�͂ɂȂ��Ă����ł��낤���̃v���O�����̑S�̂̍\���𐮗����Ă��������Ƃ������܂��B���̒i�K�ł̃R�[�f�B���O�͏������ȂNJ�{�I�ȂƂ��낾���ɂƂǂ߁A�X�̋@�\�̎����ɓ���O�ɁA�ꔏ�����܂��傤�B�܂��̓f�B�[�v�ȃR�[�f�B���O���n�߂�O�ɁA�ȒP�ȃR�����g�������Ă��������Ƃ��厖�ł��B����Ɏ��O�Ɂu���������@�\�������������A����\��v�Ƃ����u���b�N��֐��ɂ܂Ƃ߂Ă������ƂŁA�S�̂̌��ʂ���ǂ����܂��B

#region�ɂ�鏈���̃u���b�N��

�܂������̃u���b�N�����w�т܂��傤�BVisual Studio�ł́A�v���O�����R�[�h���Ɂu#region�`#endregion�v�Ə������ƂŁA�R�[�h���u���b�N(=�ЂƂ‚̃J�^�}��)���Ƃɂ킯�邱�Ƃ��ł��܂��B���̃u���b�N���Ƃ�Visual Studio�R�[�h�G�f�B�^�̃A�E�g���C���@�\���g�p���āA�W�J��܂肽���݂��ł���悤�ɂȂ�܂��B

�u�u���b�N�̑}���v����#region

�g�������ȒP�ŁA�u���b�N��}���������v���O�����̍s�ʼnE�N���b�N���āu�u���b�N�̑}���v�Łu#region�v��I�����邾���ł��B�����ł͏�L�̊�{�R�[�h�ɂ�����A�t�H�[���̐ڑ��{�^���Ɛؒf�{�^���̃u���b�N�ɑ΂��āu�t�H�[���̃{�^������(�ڑ��E�ؒf)�v�Ƃ������O���‚��܂��傤�u#region�v��I��ŁA���O���‚��܂��B

�u�u���b�N�̑}���v��I�сA�����ݒ肵�Ȃ��Ɖ��̂悤�ȃR�[�h���}������܂��B

  #region MyRegion
  
  #endregion

���O���‚��ԈႦ�Ă��A�ꏊ���ԈႦ�Ă����ł͂���܂���B�u#region�v�͂����܂�C#�̃v���O�����ɏ����ꂽ�u�⑫�I�ȏ��v�ł���A�r���h���A�ŏI�I�ɂ͖�������܂�����A�C�y�Ɏg���ėǂ��̂ł��B�ł́u�t�H�[���̃{�^������(�ڑ��E�ؒf)�v���܂Ƃ߂邽�߂ɐ������ꏊ�ɏ����Ă݂܂��傤�B

�u�t�H�[���̃{�^������(�ڑ��E�ؒf)�v�̃u���b�N��(Form1.cs)[C#]
  #region �t�H�[���̃{�^������(�ڑ��E�ؒf)
  //�ڑ��{�^���������ꂽ��
  private void button1_Click(object sender, EventArgs e) {
    wm.Connect();                            //WiiRemote�̐ڑ�
    wm.WiimoteChanged += wm_WiimoteChanged;  //�C�x���g�֐��̓o�^
    //���|�[�g�^�C�v�̐ݒ�
    wm.SetReportType(InputReport.IRAccel, true);
  }

  //�ؒf�{�^���������ꂽ��
  private void button2_Click(object sender, EventArgs e) {
    wm.WiimoteChanged -= wm_WiimoteChanged; //�C�x���g�֐��̓o�^����
    wm.Disconnect();  //WiiRemote�ؒf
    wm.Dispose();     //�I�u�W�F�N�g�̔j��
  }
  #endregion

 } 
}

�\����܂肽���ނɂ́A�R�[�h�̍���(�s��)�ɂ��鏬���ȁu�|�v���N���b�N����ƁA�R�[�h�u���b�N���B�����Ƃ��ł��܂��B

�R�[�h�u���b�N��܂肽���񂾂Ƃ���

�Ȃ��u#endregion�v��}������ꏊ�ɒ��ӂ��Ă��������B�ߏ��ɂ���u}�v(�֐��̏I���)�̈ʒu���ԈႦ�Ă��v���O�����͓����܂����A�R�[�h�u���b�N��܂肽���ނƂ����S���G���[�͋N���܂��񂪁A���������ƂŃR�[�h��ǂނƂ��ɑ�ςȂ̂ŁA�K���Ƃ��ċC�������܂��傤�B

�����̊֐���

�u���b�N���̊�{���w�񂾂�A����WiiRemote�̏�Ԃ��X�V���ꂽ�Ƃ��ɌĂ΂��R�[���o�b�N�֐��uwm_WiimoteChanged()�v�����ꂩ��������鏈���̒P�ʂŃu���b�N�ɕ������Ă����܂��B���ꂼ��̋@�\�P�ʂŊ֐������A�u���b�N�Ƌ�(�J��)�̊֐���p�ӂ��Ă����܂��B�ȉ��̒ʂ�ɃR�[�h���u���b�N�����Ă݂Ă��������B

�v���O�����̊֐����ƃu���b�N��(Form1.cs)[C#]
���O����
#region WiiRemote�̏�Ԃ��ω������Ƃ��ɌĂ΂��֐�
  void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args) {
    if (isConnected == true) {
      WiimoteState ws = args.WiimoteState;  //WiimoteState�̒l���擾 
      DrawForms(ws);  // �t�H�[���`��֐���
      IR_Cursor(ws);  // �ԊO���Ń}�E�X�J�[�\���ړ�
      Events(ws);     //�{�^���C�x���g����(�_�~�[�֐�)
      EffectsOut(ws); // LED�E����
      } else {
      //�ؒf
       this.wm.SetLEDs(0);       // LED����
       this.wm.SetRumble(false); // �o�C�u���[�^�[��~
       this.wm.Disconnect();     // WiiRemote�Ɛؒf
       this.wm.Dispose();        // �I�u�W�F�N�g�̔p��
    }
  }
#endregion

#region �{�^���C�x���g�J���p
public void Events(WiimoteState ws) {
}
#endregion

#region �t�H�[���`��֐�
  public void DrawForms(WiimoteState ws) {
    //�O���t�B�b�N�X���擾
    Graphics g = this.pictureBox1.CreateGraphics();
    g.Clear(Color.Black);//��ʂ����F�ɃN���A
    g.Dispose();//�O���t�B�b�N�X�̉��
  }
#endregion

#region �ԊO���Ń}�E�X�J�[�\���ړ�
  public void IR_Cursor(WiimoteState ws)
  {
  }
#endregion

#region LED�E����
  public void EffectsOut(WiimoteState ws) {
  }
#endregion
  
#region �t�H�[���̃{�^������(�ڑ��E�ؒf)
���ȉ�����

����ۂ̊֐��������͕̂s�������邩������܂��񂪁A����ł����Ȃ��r���h�͒ʂ�܂��B�m�F���Ă����܂��傤�B

�r���uEvents(ws);�v�ɂ‚��āu�_�~�[�֐��v�ƃR�����g���Ă����܂����B�����WiiRemote�����‚��ꂼ��̃{�^���C�x���g����������֐���z�肵�Ă��܂��B��X��K�͂ɂȂ邱�Ƃ��\�z�����̂ƁA�N���X�Ƃ��Ă��Ƃōė��p�ł������Ȃ̂ŁAForm1.cs�ł͂Ȃ��A�ʂɐV�����N���X�I�u�W�F�N�g���쐬���Ď�������\��ł��B���̒i�K�ł́w�ʃN���X�ɂ����炢�����A���ʂ��‚��Ȃ���I�x�Ƃ�����ԂȂ̂ŁuEvents()�v�Ƃ������̊֐��Ŏ������A���Ƃŕʂ̃N���X�ɈڐA���Ă����܂��B

�u#region�v���g�����ƂŁA�R�����g�Ɠ����ł��āA���₷���Ȃ�܂����BVisual Studio�ł͊֐��P�ʂ��s���ɂ���u�|�v���N���b�N���邱�ƂʼnB�������ł��܂����A�{���̈ȉ��̉���ł̓u���b�N�P�ʂʼn�����܂��̂ŁA#region�`#endregion�̈ʒu�͂�������ݒ肵�Ă����Ă��������B

�u�l�Ԓ��S�R�[�f�B���O�v�𗿗��ɂ��Ƃ���Ɓc

�@�Q�[���J���Ȃǂɂ���\����鑽���̃C���^���N�V�����Z�p���g�����v���O�����́u�X�p�Q�e�B�R�[�h�v�ɂȂ肪���ł��B�������{�l�ɕ����ƁA��ȗ��R�́u(����Ɋւ���)���ȏ��Ƃ��Ȃ����c�v�Ƃ����񓚂������̂ł����A�O�̃R�����ł��Љ���Ƃ���A���ȏ��͑�R�o�Ă��܂��B

�@�|�C���g�́u���[�U�[�C���^�[�t�F�[�X�f�U�C���ɂ͊J���̃��[�v������v�Ƃ������Ƃ����ɂ߂Ă��邩�ǂ����A��������܂���B���슴��̌��̈�ۂɒ�������u�l�Ԓ��S�v�̋@�\����������̂ł�����A�R�[�f�B���O���e�X�g���`���[�j���O���lj��@�\�Ƃ������[�v�̒��Ɂu�l�Ԓ��S�v�������Ă��܂��B

�@���̂悤�ɃC���^���N�e�B�u�Z�p�Ƃ́u�l�ԁv���Ԃɓ���Z�p�ł��B���̂��߁u�@�\�v�����S�ɂȂ�Ɩ��A�v���P�[�V�����̈�ʓI�J����@�̂悤�Ɂu���ꂾ�v�ƌ��ߑł��Ŏd�l�����A���̒ʂ�ɍ���Ă��A���ۂɂł��オ�������̂�l�Ԃ��G���āA�������������x�A���z�I�ȃC���^���N�V�����ɂȂ�悤�A���r���[�Ɛ݌v�A�t�B�[�h�o�b�N���J��Ԃ��Ȃ���΁A�����x�̍����̌���A�\�����������E�͂Ȃ��Ȃ��`���܂���(�Ƃ͂����Ɩ��A�v���P�[�V�������u��s��ATM�v�̂悤�ɐl�Ԓ��S�ōl����ׂ��v�f�͑����ɂ���܂�)�B

�@�Ȃ�ƂȂ��v���O���~���O���Ă���Ǝ��R�ƃX�p�Q�e�B������C���^���N�V�����Z�p���A���������R�[�h�ɗ��Ƃ����߂�悤�A�{���ł͌܌�墂����炢�ɒ��J�ɐ������Ă��܂�(�����v���O���}�ɂƂ��Ă͉�肭�ǂ������邱�Ƃł��傤�I)�B�{���ʼn�����Ă���R�[�f�B���O�X�^�C�����u�����v�Ƃ������̂ł͂���܂��񂵁A�����ʼn�����Ă���u���b�N����N���X�����A������������΂����Ƃ������̂ł�����܂���B

�@���Ȃ��Ƃ������邱�Ƃ́A���̂悤�ȃC���^���N�V�����J���v���W�F�N�g�̌��ʂ���ǂ�����ɂ́A��C�ɍ�����X�p�Q�e�B���u䥂ő�����v�����A�����������@�\������ۂ̂܂ܔz�u���āA�ЂƂ‚ЂƂŽ����ƕ]�������Ȃ��珇�ɉ������Ă������@�����ɗ��A�Ƃ������Ƃł��B���傤�ǃR�[�X�����́u�M�̍\���v���ɍl���āA��������w�ǂ��������Ԃŗ�������ׂ����H�x���l����悤�Ȃ��̂ł��傤�B�ꍇ�ɂ���Ă̓R�[�X�̓r���ŁA���q����̔��������ė����������ւ��邱�Ƃ��l���Ȃ���΂Ȃ�܂���B

�@���������Ӗ��ł́A���[�U�[�ɑ΂��āw���܍��ׂ������́A�X�p�Q�e�B���R�[�X�������H�f�U�[�g�͂���̂��H�x���A�܂����肪�������Ă���K�v������܂��B�����Ɏ��Ԃ������Ȃ��ƁA�X�p�Q�e�B�ǂ��납�A���q����̊�����Ȃ��œˑR�u�h���u���ɐ������œ�v���łĂ��邱�ƂɂȂ邩������܂���B

�t�H�[���̃{�^������

�u���b�N�����邱�ƂŃR�[�h�����₷���Ȃ�܂����B���������̏�ԂŃv���O���������s����ƁA�l�X�ȕs����c���Ă���͂��ł��B�Q�Ă��A�ЂƂ‚•Еt���Ă����܂��傤�B

�܂��̓v���O�������N���������Ƃ̃t�H�[���̃C�x���g�����𐮗����Ȃ���������Ă����܂��傤�B���݂̏�Ԃł�WiiRemote�ւ́u�ڑ��v�Ɓu�ؒf�v�����J�ł͂Ȃ��̂ŁA�uisConnected�v�Ƃ���bool�^�̕ϐ���p�ӂ��āA�ڑ���Ԃ��Ǘ����Ă����܂�(WiimoteLib�ɂ�����ɂ�����v���p�e�B�������Ă��悳�����Ȃ��̂Ȃ̂ł����A�����WiimoteLib�̐݌v�ł͌X�̃A�v���P�[�V�������Ŏ�����������悳�����ł�)�B

�t�H�[���̃{�^������(Form1.cs)[C#]
#region �t�H�[���̃{�^������(�ڑ��E�ؒf)
  //�ڑ��{�^���������ꂽ��
  private void button1_Click(object sender, EventArgs e) {
   if (this.isConnected == false) {
    this.wm = new Wiimote(); //WiiRemote�̏�����
    this.wm.Connect();       //WiiRemote�ڑ�
    this.wm.SetReportType(InputReport.IRAccel, true); //���|�[�g�^�C�v�̐ݒ�
    this.wm.SetLEDs(0); //LED ������
    this.wm.SetRumble(false); //�o�C�u���[�^�X�g�b�v
    this.button1.Enabled = false;  //�ڑ��{�^���𖳌�
    this.button2.Enabled = true;   //�ؒf�{�^����L��
    this.wm.WiimoteChanged += wm_WiimoteChanged; //�R�[���o�b�N��o�^
    this.isConnected = true; //�ڑ���Ԃ�true
   }
  }

  //�ؒf�{�^���������ꂽ��
  private void button2_Click(object sender, EventArgs e) {
   if (this.isConnected == true) {
    this.wm.WiimoteChanged -= wm_WiimoteChanged;  //�R�[���o�b�N���폜
    this.button1.Enabled = true;  //�ڑ��{�^����L��
    this.button2.Enabled = false;  //�ؒf�{�^���𖳌�
    this.isConnected = false; //�ڑ���Ԃ�false
   }
  }
#endregion

�t�H�[���̃{�^���������ꂽ�Ƃ��A�uisConnected�v���m�F���A�����܂��ڑ�����Ă��Ȃ��Ȃ�A�ڑ������A���|�[�g�^�C�v�̐ݒ�A�����ăR�[���o�b�N�֐���o�^���āA�ϐ��uisConnected�v��true�ɂ��܂��B

���l�Ɂu�ؒf�v�{�^���������ꂽ�Ƃ��͊��ɐڑ�����Ă���WiiRemote�I�u�W�F�N�g(wm)�ɓo�^���ꂽ�R�[���o�b�N�֐����폜���Ă��܂��B

�t�H�[����́u�ڑ��v��u�ؒf�v�{�^���́uEnabled=false�v�Ƃ��邱�ƂŖ������A�‚܂�u�����Ȃ���ԁv�ɂ��邱�Ƃ��ł��܂��B���̂悤�ɂǂ��炩�������ƁA�ǂ��炩�̒l���r���I�ɕς��A�����̏Ɩ��̂悤�ȃ{�^�����u�g�O��(toggle)�v�Ƃ����܂����A������\�t�g�E�F�A�Ŏ������Ă��邱�ƂɂȂ�܂��B

�t�H�[���{�^���̃g�O����
�u�͂��܂�v�Ɓu�����v�������Z�b�g��

�@�{���ł͌����⓮��𒆐S�ɉ�����Ă��܂��̂ŁA���[�U�[�̕s�ӂ̏I����WiiRemote�̓d�r�؂�A���̑��G���[�����Ȃǂ�(�v���v���Ő������Ă͂��܂���)���S�ɂ͈����؂�Ă��܂���B�F���񂪃t���[�E�F�A�ȂǁA�����̃v���O�������w���L���A�N���x�Ɏg���Ă��炤�ɂ͓��ɋC�������������ǂ��ł��傤�B

�@�K���Ƃ��āu������-�I���v�A�u�I�u�W�F�N�g�̒lj�-�폜�v�̓����Z�b�g�ŃR�[�f�B���O���Ă����Ǝv��ʃ~�X�̌y���ɖ𗧂��܂��B����C#�̏ꍇ�́A���[�U�[�t�����h���[�ɐ݌v���ꂽ����‹��Ȃ̂ŁA�폜�������Ŏ��{���Ă����d�g�݂�����܂��B�ӎ����Ďg�����Ƃ��ł���΃G���K���g�Ȃ̂ł����A�t�Ɂu�����ςȂ��A�폜�́c���������v�Ƃ����v���O���~���O�X�^�C�����‚ɂ‚��ƁA�I�u�W�F�N�g�̃X�R�[�v(��������)�������Â炭�Ȃ�A�v���O�����̓��쎩�̂͊������Ă���̂ɁA�c������I�u�W�F�N�g�̂������ŕs���̃G���[�����s���ɋN��������A�����ԋN�����Ă����ƃ��������[�N(�������R��)���N�����A�������ˑR�x���Ȃ�����A�N���b�V�������肷��w���Ƃ��Ǝ�̂�����v���O�����x�𐶂ݏo���܂��B

�@���ɃI�u�W�F�N�g�̏I����j���͖Y�ꂪ���ł��BWiimoteLib�̂悤�ɒN������������C�u�����̏ꍇ�͒P�Ɂu�I���v�Ƃ���API�������Ă��A�����ʼn�������Ă��邩�킩��Ȃ��ꍇ������܂��B�R�[�f�B���O�̗����u���܂����ŏI�����ėǂ����킩��Ȃ��v�Ƃ������Ƃ�������ł��傤�B����ȂƂ��́u//To���F�����Ŕj���H�v�Ȃǁw�����̎������x�ɃR�����g�����Ă������ƂŁA��X�̃R�[�h�����̎��Ɍ����ɖ��ɗ������肵�܂��B

�ԊO���Z���T�[�ɂ��}�E�X�|�C���^�ړ�

���͐ԊO���Z���T�[�𗘗p���āA�}�E�X�|�C���^�𓮂��������̎��������܂��B�����Ȃ�}�E�X�𓮂����������������Ă������̂ł����A�ԊO���̏󋵂������Ȃ��ƊJ������q���܂��̂ŁA�܂��̓t�H�[���`��֐��uDrawForms()�v�Ɏ�������ĐԊO����WiiRemote�̎��E�ɓ�������A�O���t�B�b�N�X�ƕ����ő���l��\������悤�ɂ��܂��B

�t�H�[���`��֐�DrawForms(Form1.cs)[C#]
#region �t�H�[���`��֐�
  public void DrawForms(WiimoteState ws)
  {
    //�O���t�B�b�N�X���擾
    Graphics g = this.pictureBox1.CreateGraphics();
    g.Clear(Color.Black);//��ʂ����F�ɃN���A
    //�����ԊO�����P�‚ł�����������
    if (ws.IRState.IRSensors[0].Found)
    {
      //�ԐF�Ń}�[�J0��`��
      g.FillEllipse(Brushes.Red,
        ws.IRState.IRSensors[0].Position.X * 256 ,
        ws.IRState.IRSensors[0].Position.Y * 128 , 5, 5);
      //�F�Ń}�[�J1��`��
      g.FillEllipse(Brushes.Blue,
        ws.IRState.IRSensors[1].Position.X * 256,
        ws.IRState.IRSensors[1].Position.Y * 128,  5, 5);
    }
    g.Dispose();//�O���t�B�b�N�X�̉��
    label1.Text = "IR[0] " + ws.IRState.IRSensors[0].RawPosition.ToString()
+ "\nIR[1] " + ws.IRState.IRSensors[1].RawPosition.ToString();
  }
#endregion

�ԂƐA2�‚̃|�C���^�������߂ɕ\�����Ă��܂��B�t�H�[���́ulabel1�v�ɕ\�������e�L�X�g��A���W�̕����Ȃǁu�������v�ɂ‚��āA���D�݂ʼn��ǂ��Ă��������Ă��܂��܂��񂪁A�Ō�Ɂu�����v�Ƃ��đ啝�g������\��ł��B���̃X�e�b�v�ł͂��܂�C�ɂ����A��ɐi�݂܂��傤�B

���̓}�E�X�|�C���^�[��ԊO���œ�������悤�ɂ��܂��B�܂��A�������R�[�h�̒��ɁA�ϐ��uScreenSize�v��lj����܂��傤�B

�������R�[�h��ScreenSize��lj�(Form1.cs)[C#]
  Wiimote wm = new Wiimote();      //Wiimote�N���X���쐬
  System.Drawing.Point ScreenSize; //|��ʃT�C�Y���i�[
  Boolean isConnected = false;     //WiiRemote���ڑ����ꂽ��

���ɁA�֐��uIR_Cursor�v���������܂��B����͐ԊO���̈ʒu�ɂ��킹�āA�}�E�X�|�C���^���ړ�������R�[�h�ł��B

�ԊO���Ń}�E�X�J�[�\�����ړ�(Form1.cs)[C#]
#region �ԊO���Ń}�E�X�J�[�\���ړ�
  public void IR_Cursor(WiimoteState ws)
  {
    ScreenSize.X = Screen.PrimaryScreen.Bounds.Width;  //��ʃT�C�Y����
    ScreenSize.Y = Screen.PrimaryScreen.Bounds.Height; //��ʃT�C�Y�c��
   //�����ԊO����1�”���������
   if (ws.IRState.IRSensors[0].Found) {
    //�ԊO�����W(0.0�`1.0)����ʃT�C�Y�Ɗ|�����킹��
    int px = (int)(ws.IRState.IRSensors[0].Position.X * ScreenSize.X);
    int py = (int)(ws.IRState.IRSensors[0].Position.Y * ScreenSize.Y);
    //X���W�𔽓]������
    px = ScreenSize.X - px;
    //�}�E�X�J�[�\�����w��ʒu�ֈړ�
System.Windows.Forms.Cursor.Position = new System.Drawing.Point(px, py);
   }
  }
#endregion

�擾�����ԊO���}�[�J�[��1�–ڂ�X,Y���W���}�E�X�J�[�\���̈ʒu�ɐݒ肵�Ă��܂��BSystem.Drawing�ɗp�ӂ���Ă���2�����̓_�������^Point(px,py)���‚����āA�}�E�X�J�[�\���ʒu��ύX���邽��System.Windows.Cursor.Poition�ɑ�����Ă��܂��B

�����������Ă݂܂��傤�BWiiRemote��Bluetooth�ڑ����A�Z���T�[�o�[�Ȃǂ̐ԊO���������������Ă���[F5]�L�[�������ăf�o�b�O�J�n���܂��B�\�����ꂽ�t�H�[���́u�ڑ��v�{�^���������A���Ȃ��ڑ����ꂽ��AWiiRemote��ԊO�������Ɍ����Ă��������B

���Ȃ��Ƃ�1�_�ł��ԊO�������o�����ƃt�H�[�����ɐԂ��}�[�J�[���\������AWindows�̃}�E�X�J�[�\������̓����ɂ����Ĉړ����܂�(�E�ɓ������΁A�E�Ƀ}�E�X�J�[�\���������͂��ł�)�B�ԊO�������o���Ă���Ԃ́APC�ɐڑ�����Ă���}�E�X��G���Ă��v���ʂ�ɓ��������Ƃ͂ł��܂���B

�Ȃ��A���s���Ƀ}�E�X�J�[�\�����o�^�o�^����ꍇ������܂��B�ԊO���Z���T�[�̏�Ԃ╡���̃}�[�J�[��WiiRemote�̎��E�ɓ����Ă��邱�ƂɋN������s����Ȍ��o��Ԃɂ����̂ł��BWiiRemote�ƃZ���T�[�o�[�Ƃ̋�����2m���x�܂ŗ����Ă݂��肷��ƈ���ɂȂ�܂����A��قǃR�[�h�̌������ƃ`���[�j���O�����{���܂��̂ŁA���ɍ��͋C�ɂ��Ȃ��Ă��悢�ł��傤�B

�I������ꍇ�́A�ԊO�������o���Ȃ��悤�ɂ���(�Z���T�[���������ɂ��ė��Ă�Ƃ������ł�)�ƁA�}�E�X�̐��䂪�߂�܂��̂ŁB�u�ؒf�v�{�^���������Ă���I�������Ă��������B�}�E�X�J�[�\���ɗ��炸�A[TAB]�L�[�𐔉񉟂��A[Enter]�L�[�Łu�ؒf�v����͂��鎖�ł��A�ȒP�ɏI�����邱�Ƃ��ł��܂��B

�{�^���C�x���g�̌��o

���̓{�^���C�x���g�ł��B��قǂ͋���ۂɂ��Ă����{�^���C�x���g����������_�~�[�֐��uEvents()�v���������Ă����܂��傤�B

�{�^���C�x���g�ƊȒP�Ɍ����Ă��AWiiRemote�̃{�^���͂������񂠂�܂����A�}�E�X��WiiRemote�ɕt���Ă���f�W�^�����̓{�^���ɂ͈ȉ��́u3�‚̏�ԁv������܂��B

�yDOWN�z�c�{�^�������������(Push)�B

�yHOLD�z�cDOWN��A�{�^�����������ςȂ��ɂ��Ă�����(Press)�B

�yUP�z�c�{�^���𗣂������(Release)�B

����������ł������菈�����Ȃ��ƁA�_�u���N���b�N�Ȃǂ����o����͓̂���Ȃ�܂��B

�T�v�݌v�ɏ]���āAWiiRemote��[A]�{�^���ɑ΂��Ĉȉ��̃}�E�X��������蓖�Ă邱�Ƃɂ��܂��B

�EA�{�^������������(DOWN)�A�}�E�X�̍��N���b�N�𔭍s���܂��B

�EA�{�^����������������(HOLD)�A�}�E�X�̉E�N���b�N�𔭍s���܂��B

�EA�{�^������������(UP)�A�}�E�X�{�^���������Ă��Ȃ���Ԃɂ��܂��B

�u������(HOLD)�v��1�b�ԉ������ςȂ��ɂ��邱�ƁA�Ƃ��Ă����܂��傤�B

���b�Z�[�W�{�b�N�X���g�����e�X�g

�܂��͊m���ɒ������C�x���g���E����悤�Ɂu���b�Z�[�W�{�b�N�X�v���g���Ċm�F���܂��B

[A]�{�^��HOLD�ɂ�郁�b�Z�[�W�{�b�N�X�̕\��(Form1.cs)[C#]
�������������ɒlj���
//�{�^���C�x���g�J���p
  bool isDown;
  int StartTime, PressTime = 1000;
  string State = "";
��������
#region �{�^���C�x���g�J���p
public void Events(WiimoteState ws) {
 if(ws.ButtonState.A) {
  if (isDown == false) {
   //���������߂ă{�^���������ꂽ�Ƃ�
   StartTime = System.Environment.TickCount; //�����ꂽ���Ԃ��L�^
   State  = "DOWN"; isDown = true;
  } else {
   //������Ă��鎞�Ԃ�PressTime��蒷�����HOLD
   if ((System.Environment.TickCount - StartTime) >= PressTime) {
    State = "HOLD";  //�����ꑱ���Ă���
    //���b�Z�[�W�{�b�N�X��\��
    MessageBox.Show(State);
   }
  }
 } else {
  if (isDown == true) {    //�{�^���������ꂽ
    State = "UP";  isDown = false;
  }
 }
}
#endregion

���̒i�K�Ńe�X�g�����Ă݂܂��傤�B�v���O�������N�����Đڑ����A[A]�{�^�����������ςȂ��ɂ���1�b�܂‚ƁA�uHOLD�v�Ə����ꂽ���b�Z�[�W�{�b�N�X���\������܂��B

[A]�{�^���𒷉�������ƃ��b�Z�[�W�{�b�N�X���\�������

MessageBox.Show()�ŗ��p�ł���u���b�Z�[�W�{�b�N�X�v�͂��̎�̃f�o�b�O��J���ɔ��ɖ��ɗ����܂��B�����ł͂����m�F���I���܂����̂ŁA���̍s�̓R�����g�A�E�g�������͍폜���Ă��܂��Ė�肠��܂���B

�f�o�b�O�e�N�j�b�N

�@�v���O�����̓�����m���߂邽�߂ɁA�f�o�b�O���K�v�ɂȂ邱�Ƃ�����܂��BVisual Studio�̕W���@�\�ł�[F9]���������ƂŃu���[�N�|�C���g��}�����邱�Ƃ��ł��܂��B�������v���O�������~�߂�܂ł��Ȃ��A������Ƃ����l���������Ƃ��Ȃǂ�����܂��B

�@����Љ���u���b�Z�[�W�{�b�N�X�v�ȊO�̃e�L�X�g�\���̕��@�Ƃ��āAC#�ł́uConsole.WriteLine()�v���g���ă��b�Z�[�W���o�͂��邱�Ƃ��ł��܂��B���̏o�͌��ʂ�Visual Studio��̕W���o�́u�\��(V)���o��(O)�v�Ō��邱�Ƃ��ł��܂��B(�Ȃ����l�̊֐���C++�ɂ�����܂����A�Ȃ���Visual C++��ŏo�̓E�B���h�E�����Ă��o�͂���Ȃ��悤�ł��c)�B

�@���̂悤�Ȃ�����Ƃ����e�N�j�b�N�͒m���Ă���ƕ֗��ł��B���������s���̓p�t�H�[�}���X�ቺ���Y�ޏꍇ������̂ŁA�ŏI�I�ȃo�[�W�����ł͖Y�ꂸ�ɃR�����g�A�E�g���Ă������A�u#if DEBUG�`#endif�v�f�B���N�e�B�u���g�����ƂŃf�o�b�O�ł����R�[�h�����������Ƃ��ł��܂��B

�@�f�o�b�O�e�N�j�b�N�́A�C���^���N�V���������コ����ׂ̂��܂߂Ȏ�����]���A�`���[�j���O�ɔ��ɖ��ɗ����܂��B

�{�^���C�x���g�����̃N���X��

�����āAWiiRemote�̃{�^���_�E���ɂ��킹�āA�}�E�X�{�^���̃C�x���g�𔭍s���܂��B�v���O�����������Ȃ��Ă��܂��܂��̂ŁA���ꂩ��{�^���C�x���g�̌��o��ʂ�.cs�t�@�C���̕ʃN���X�ɈڐA���܂��B

�V�����N���X�̒lj�

�܂�Visual Studio�́u�v���W�F�N�g�v����u�V�������ڂ̒lj��v(Ctrl+Shift+A)���s���܂��B

�V�K�N���X�uButtonEvents.cs�v�̒lj�

�u�e���v���[�g�v�Łu�N���X�v��I�уt�@�C�������uButtonEvents.cs�v�Ƃ��āu�lj��v�������܂��B�v���W�F�N�g�G�N�X�v���[���[�ɁuButtonEvents.cs�v���lj�����A�ȉ��̂悤�ȏ����R�[�h���\�������͂��ł��B

�����R�[�h(ButtonEvents.cs)[C#]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WiiRemoteMouse
{
  class ButtonEvents  {
  }
}

���̂܂܂ł͉��������܂���̂ŁA���܂܂ŃR�[�f�B���O�̒��S�ɂȂ��Ă����uForm1.cs�v����Events()�֐��̃R�[�h�ƕϐ����ڐA���܂��B�u#region�v���Y�ꂸ�ɋL�q���Ă����܂��傤�B

Form1.cs����ڐA�����R�[�h(ButtonEvents.cs)[C#]
using WiimoteLib;

namespace WiiRemoteMouse
{
 class ButtonEvents {
  bool isDown;
  int StartTime, PressTime = 1000;
  string State = "";
#region �{�^���C�x���g����
  public void Events(WiimoteState ws) {
   if (ws.ButtonState.A) {
    if (isDown == false) {
     //���������߂ă{�^���������ꂽ�Ƃ�
     StartTime = System.Environment.TickCount; //�����ꂽ���Ԃ��L�^
     State = "DOWN"; isDown = true;
    } else {
    //������Ă��鎞�Ԃ�PressTime��蒷�����HOLD
     if ((System.Environment.TickCount - StartTime) >= PressTime) {
      State = "HOLD";  //�����ꑱ���Ă���
      //���b�Z�[�W�{�b�N�X��\��(�m�F�p)
      System.Windows.Forms.MessageBox.Show(State);
     }
    }
   } else {
    if (isDown == true) {    //�{�^���������ꂽ
     State = "UP"; isDown = false;
    }
   }
  }
#endregion
 }
}

�ڐA�����R�[�h��Form1.cs����폜�A�������̓R�����g�A�E�g���܂��B

Form1.cs�̕ύX����[C#]
���O����
namespace WiiRemoteMouse {
 public partial class Form1 : Form {
  Wiimote wm = new Wiimote();      //Wiimote�N���X���쐬
  ButtonEvents wbe = new ButtonEvents(); //�{�^���C�x���g�N���X���쐬
���ȉ��̏������͍폜���Ă��܂��܂���
/*
//�{�^���C�x���g�J���p
  bool isDown;
  int StartTime, PressTime = 1000;
  string State = "";
*/
�������Ŋ֐����̑O�ɃN���X���uwbe.�v��lj����܂���
      wbe.Events(ws); //�{�^���C�x���g����
���ȉ�����

���̒i�K�ł��Ȃ炸���쎎�����s���Ă��������B[A]�{�^���𒷉�������ƁA���b�Z�[�W�{�b�N�X���\�������͂��ł��B

�uButtonEvents wbe = new ButtonEvents();�v�ɂ����wbe�Ƃ����N���X��V�K�쐬���A�ڐA�����֐�(���\�b�h)�uwbe.Events(ws);�v���{�^���C�x���g�̏����Ƃ��ČĂ�ł��܂��B

���̂悤�Ƀ\�[�X�R�[�h���ڐA����������Ȃ����s�ł���΁A�����̃N���X���܂�����v���O�����̍쐬�ɐ��������Ƃ����܂��B

����ŁA�{�^���C�x���g������ʂ̃N���X���L�q���ꂽ�\�[�X�R�[�h�uButtonEvents.cs�v�ɕ����邱�Ƃɐ������܂����B���܂܂ł͑S��Form1.cs��Form1�N���X�ɋL�q���Ă����̂ł����A�v���O����������ɂȂ����Ƃ���A�����̃v���O���}�ɂ��`�[���ŊJ������Ƃ��ɂ́A�K�؂ȃ^�C�~���O�ŃN���X��t�@�C�����킯�Ă������Ƃ��d�v�ł��B

DLL�C���|�[�g�ɂ��Win32API�̗��p

����WiIRemote�̃{�^���������ꂽ�Ƃ��ɁA�}�E�X�{�^���̃N���b�N�C�x���g�����s�����ׂ��p�[�g�̃R�[�h�������Ă����܂��B���́u�}�E�X�{�^���C�x���g�̔��s�v�͒P�Ƀ}�E�X�J�[�\���𓮂����Ƃ��ƈقȂ菭�X���G�ɂȂ�܂��B�܂�.NET Framework3.5�ł̓}�E�X�J�[�\���̈ʒu�͕ύX�ł��Ă��A�N���b�N����C�x���g�𔭍s�ł���API���p�ӂ���Ă��Ȃ��悤�ł��B�����ŋ������瑶�݂���Win32�v���b�g�t�H�[��SDK��Windows���[�U�[�C���^�[�t�F�[�X�T�[�r�X�uuser32.dll�v�Ƃ���DLL�Ɋ܂܂��uSendInput()�v�Ƃ���API��SendInput()�̂��߂̍\���̂���荞�ނ��ƂŁA���̋@�\���������܂��B

DLL�C���|�[�g�ƍ\���̂́A������x�`���ɉ������L�q���K�v�ł��B�����ł́uSendInput()�v�Ƃ���API����荞�݁A���̊֐��̈����ƂȂ�\���́uINPUT�v��INPUT�����p����}�E�X�C�x���g�̏ڍׂ��L�q����\���́uMOUSEINPUT�v����荞�݂܂��B

ButtonEvents.cs�ւ�DLL�C���|�[�g[C#]
using WiimoteLib;
//DllImport�ɕK�v��using��lj�
using System;
using System.Runtime.InteropServices;
namespace WiiRemoteMouse {
 class ButtonEvents {
  bool isDown;
  int StartTime, PressTime = 1000;
  string State = "";
#region DLL�C���|�[�g
  [DllImport("user32.dll")]  //DLL�ǂݍ���
  extern static uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
  [StructLayout(LayoutKind.Sequential)]
  struct INPUT  {
    public int type;
    public MOUSEINPUT mi;
  }
  [StructLayout(LayoutKind.Sequential)]
  struct MOUSEINPUT  {
    public int dx;
    public int dy;
    public int mouseData;
    public int dwFlags;
    public int time;
    public IntPtr dwExtraInfo;
  }
#endregion
���ȉ�����

���̍\���̂�Win32(C++)�̃w�b�_�t�@�C���ł���uWinUser.h�v�ɋL�q����Ă�����̂ł��B�����ʓ|�ł����A�ԈႦ���ɋL�q���Ă��������B�Ȃ��A���̍\���̂̒�`�����낻���ɂ���ƁASendInput�������������Ă���܂���B

C#�Ń}�E�X�Ɋ�]�̃C�x���g�𔭍s����Ƃ��́A�ȉ��̂悤�ɂ��ăC�x���g�𑗐M���܂��B

 input[0].mi.dwFlags = 0x0002;                   //���}�E�X�_�E��
 SendInput(1, input, Marshal.SizeOf(input[0]));  //�}�E�X�C�x���g�𑗐M

�uMarshal�v�̓A���}�l�[�W�R�[�h�̃��������蓖�Ă̂��߂Ȃǂɗp�ӂ��ꂽ�N���X�ł��BDLL�ƍ\���̂̃C���|�[�g�͋L�q�����ԈႦ�Ȃ���Γ��ɋC�����K�v�͂���܂���A���̂܂܉��ɑ����A�{�^���C�x���g�̎������s���܂��傤�B

�{�^���C�x���g�ւ̎���(ButtonEvents.cs)[C#]
���R�����g�̓��Ɂu|�v���‚��Ă���ӏ����V�K�lj������ł���
#region �{�^���C�x���g����
  public void Events(WiimoteState ws) {
   INPUT[] input = new INPUT[1];  //|�}�E�X�C�x���g���i�[
   if (ws.ButtonState.A) {
    if (isDown == false) {
     //���������߂ă{�^���������ꂽ�Ƃ�
     StartTime = System.Environment.TickCount; //�����ꂽ���Ԃ��L�^
     State = "DOWN"; isDown = true;
     input[0].mi.dwFlags = 0x0002;                  //|���}�E�X�_�E��
     SendInput(1, input, Marshal.SizeOf(input[0])); //|�C�x���g�𑗐M
    } else {
    //������Ă��鎞�Ԃ�PressTime��蒷�����HOLD���E�N���b�N
     if ((System.Environment.TickCount - StartTime) >= PressTime) {
      State = "HOLD";  //�����ꑱ���Ă���
      input[0].mi.dwFlags = 0x0008;                  //|�E�}�E�X�_�E��
      SendInput(1, input, Marshal.SizeOf(input[0])); //|�C�x���g�𑗐M
     }
    }
   } else {
    if (isDown == true) {    //�{�^���������ꂽ
     State = "UP"; isDown = false;
     input[0].mi.dwFlags = 0x0004;                   //|���}�E�X�A�b�v
     SendInput(1, input, Marshal.SizeOf(input[0]));  //|�C�x���g�𑗐M
     input[0].mi.dwFlags = 0x0010;                   //|�E�}�E�X�A�b�v
     SendInput(1, input, Marshal.SizeOf(input[0]));  //|�C�x���g�𑗐M
    }
   }
  }
#endregion
 }
}

�e�C�x���g�ɑ΂��āuinput[0].mi.dwFlags = 0x0004�v�Ƃ��邱�ƂŃ{�^���̉�����Ă����Ԃ𔭍s���邱�Ƃ��ł��܂��B���́u0x0002�v��u0x0004�v�Ƃ���16�i���\���̃t���O(dwFlags)�̓v���b�g�t�H�[��SDK�Œ�߂��Ă���萔�ŁA�uWinUser.h�v�Ŋm�F���邱�Ƃ��ł��܂��B���ɂ��E�N���b�N��z�C�[���Ȃǂ̃f�[�^�����邱�Ƃ��ł��܂��B

WinUser.h�ɋL�q����Ă���}�E�X�C�x���g�萔(����)
���� �Ӗ� �l
MOUSEEVENTF_MOVE �}�E�X���ړ� 0x0001
MOUSEEVENTF_LEFTDOWN ���{�^���������ꂽ 0x0002
MOUSEEVENTF_LEFTUP ���{�^���������ꂽ 0x0004
MOUSEEVENTF_RIGHTDOWN �E�{�^���������ꂽ 0x0008
MOUSEEVENTF_RIGHTUP �E�{�^���������ꂽ 0x0010
MOUSEEVENTF_MIDDLEDOWN �����{�^���������ꂽ 0x0020
MOUSEEVENTF_MIDDLEUP �����{�^���������ꂽ 0x0040
MOUSEEVENTF_WHEEL �z�C�[������] 0x0800

������API��\���̂̃t�H�[�}�b�g�́A�}�C�N���\�t�g�̃h�L�������g��SDK�Ɋ܂܂��w�b�_�t�@�C���ŗ^�����Ă��܂��B�ߋ����X�Ƃ����������j�����AWin32�v���b�g�t�H�[���ɂ�����C++��������Ă���l�̃z�[���y�[�W�Ɍf�ڂ��ꂽ�T���v���Ȃǂ����ɗ����܂��BC#�̃R�[�f�B���O�����Ă��邩��Ƃ����āu���������C++�̃T���v�����A���ɂ͊֌W�Ȃ��c�v�Ǝv���K�v�͂Ȃ��̂ł��I

.NET�����C#�v���O���}�ɂƂ��ăA���}�l�[�W�R�[�h�̎�荞�݂́A.NET Framework�ɕی삳��Ă��Ȃ��u���m�̋��|�v�����邩������܂��񂪁A����Ă��܂��Ε֗��Ȃ��̂ł��B����̂悤��SendInput�̓A���}�l�[�W�h�Ȏ����𗊂�Ȃ��Ă��A�����I��.NET Framework�Ɏ�荞�܂�A�C�y�Ɏg����悤�ɂȂ邱�Ƃ�]�݂܂����c�B

�}�C�N���\�t�g�̃h�L�������g���

��SendInput�֐�

�@http://msdn.microsoft.com/ja-jp/library/cc411004.aspx

��mouse_event�֐�

�@http://msdn.microsoft.com/ja-jp/library/cc410921.aspx

����Ŋ�{�@�\�͂قڊ����ł��B�����������s���Ă݂܂��傤�B�v���O�������N������WiiRemote��Bluetooth�ڑ����u�ڑ��v�Ƃ���ƁA���E�ɓ������ԊO���ɂ���ă}�E�X�J�[�\���𓮂�����悤�ɂȂ�܂��B

[A]�{�^���������ƃ}�E�X�̍��N���b�N�A1�b�Ԓ���������ƉE�N���b�N�ɂȂ�܂��B�{�^�������𗣂��ƁA���E�����̃}�E�X�{�^���𗣂������(Up)�ɂȂ�܂��B

�ȏ�ŁA�ŏ��Ɂu�T�v�݌v�v�Ő݌v�����S�Ă̋@�\�̎������I���܂����B�����l�ł����I

C++�ł܂߂�����

�@�����WiiRemoteMouse�ł�C#.NET�݂̂ŊJ�����A��4�͂̂悤��C++�ł������܂���ł������A����C++.NET�‹��͂��̂悤�Ȕ�.NET���݊‹�(�A���}�l�[�W�h�R�[�h)�ɋ����A�`���Łuwindows.h�v��#include�錾���邾���ŁA�֘A����\���̂�API�𗘗p�ł���悤�ɂȂ�܂��B�܂�C#�̃R�[�h�Łu0x0002�v�Ə����Ă����悤�Ȓ萔���uMOUSEEVENTF_LEFTUP�v�Ƃ��ĕ\���ł���悤�A���ׂĎ����Ŏ�荞��ł���܂��B���̂܂܃r���h����Ɓu�֐��̎��̂����‚���Ȃ��v�Ƃ����G���[���o��̂ł����A�u�v���W�F�N�g�̃v���p�e�B�v���u�\���v���p�e�B�v���u�����J�v���u���́v���u�lj��̈ˑ��t�@�C���v��\�����āu�e�܂��̓v���W�F�N�g�K��l����̌p���v�Ƀ`�F�b�N�����邱�ƂŁA�r���h���Ɏ��ۂ̊֐��������N���Ă����悤�ɂȂ�܂��B

�u�e�܂��̓v���W�F�N�g�K��l����̌p���v�Ƀ`�F�b�N

���[�U�[�e�X�g�ƃt�B�[�h�o�b�N�J��

���l�ɐG���Ă��炢�A�ώ@����

�T�v�݌v�Ő݌v�����@�\�͎������I���܂������A����ŏI���ł͂���܂���B�ނ��낱�����炪�͂��܂�ł��B

�܂����[�U�[�r���e�B�̌���̂��߂ɁA�����Łu�����ȊO�̒N���v�ɐG���Ă�����Ă��������B����ɒN�����Ȃ��Ƃ��́A�������g�Ŏ��ێg���ł��낤���[�U�[(UI���p��Łu�y���\�i�v�Ƃ����܂�)��z�����Ȃ���G���Ă݂܂��B�����C���‚������Ƃ���������A�ǂ�ǂ񃁃����Ă����܂��B

����������ƂɎ��Ԃ��₷�ƁA�R�[�f�B���O�������Ă��鎞�ɂ͌����Ȃ����Ƃ������Ă��܂��B

�Ⴆ�΋N������A�wlabel1�x�ƕ\������Ă���Ƃ���́A���̃v���O�������͂��߂ĐG��l�͂Ȃ񂾂��킩��܂���B������label1�̃v���p�e�B���w�u�ڑ��v�{�^���������Ă��������x�Ƃ���ׂ��ł��ˁB����������������ƏڍׂɁuWiiRemote�����g����Bluetooth�X�^�b�N�Őڑ����Ă���A�v�Ə���������K�v�����邩������܂���B�t�H�[���̏㕔�ɕ\������Ă���uForm1�v��Text�v���p�e�B���uWiiRemoteMouse�v�Ƃ���ׂ���������܂���ˁB�z�肵�Ă��郆�[�U�[�u�y���\�i�v�������Ă��Ȃ���΁A�ǂ��܂ł������ȃv���O�����ɂȂ��Ă��܂��܂��B

���e�؂ȃt�H�[���ɉ���
�ύX��́uWindows �t�H�[�� �f�U�C�i�Ő������ꂽ�R�[�h�v�̈ꕔ(Form1.Designer.cs)[C#]
this.label1.Text = "WiiRemote�����g����Bluetooth�X�^�b�N�Őڑ����Ă���A\n�u�ڑ��v�{�^���������Ă�������";
  this.Text = "WiiRemoteMouse";

���̂悤�ȃt�B�[�h�o�b�N�J���͉��x�J��Ԃ��Ă��u�I���v�Ƃ������̂͂���܂���B���������̌J��Ԃ����[�v�ɂ����鎞�ԂŁA�v���O�����̊����x�͂ǂ�ǂ�ƍ��܂��Ă����܂��B

���̑��{�^���A�N�V�����̎����A�C�f�B�A

���[�U�[�e�X�g������Ă݂�ƁA���̐�AGlovePIE�Ŏ��������悤�ɁA���܂��܂ȃ{�^���Ȃǂɑ�R�̃A�N�V���������蓖�ĂĂ��������Ȃ�Ƃ������܂��B�c�O�Ȃ��ƂɁA���������͂ǂ�ǂ�WiiRemote�Ƃ͒��ڊ֌W�Ȃ��b�ɂȂ��Ă��܂��܂��̂œK�x�Ɋ������Ȃ������������Ǝv���܂��B

�Ⴆ�΁A�{�^���A�N�V�����̊J���ɂ‚��āA[B]�ɂ��}�E�X�E�{�^�������蓖�Ă����Ƃ��܂��B���̏ꍇ�A

 if (ws.ButtonState.B) {
   input[0].mi.dwFlags = 0x0008;                  //|�E�}�E�X�_�E��
   SendInput(1, input, Marshal.SizeOf(input[0])); //|�C�x���g�𑗐M
 } else {
   input[0].mi.dwFlags = 0x0010;                  //|�E�}�E�X�A�b�v
   SendInput(1, input, Marshal.SizeOf(input[0])); //|�C�x���g�𑗐M
 }

���̂悤�ɏ���������Ηǂ��킯�ł��B���������̂悤�ɌX�̃{�^���C�x���g�ɂ‚���if���Ŏ������Ă����ƁA[A+B]�Ȃǂ̃{�^���R���r�l�[�V�����A�N�V�����Ȃǂ�������Ă����ƁA����ɕ��G�ɂȂ��Ă����܂�(�o�O�������܂�)�B�����������̕������N���X�������̂ŁA���܂��ė��p�ł�����@���l�������Ƃ���ł��B

�{���̒��҂̂ЂƂ�ł��鏬��搶�́A��قǎ�������State�̂悤�ȕ�������g�����āu������Ă���L�[�𕶎���Ƃ��Ĉ����v�Ƃ����A�C�f�B�A�ŁA�ȉ��̂悤�ȕ��@�ŐV�����N���X��݌v���Ă݂܂����B���ꂪ�������ǂ����͏ꍇ�ɂ�肯��ł����A�ǂ��A�C�f�B�A���Ƃ������܂��̂ŊȒP�ɉ�����܂�(�����i�͏��⌤������HP����_�E�����[�h�ł��܂���)�B

�܂����݂̃C�x���g�N���X�ɁuButtonEvent�v�Ƃ����N���X��lj����܂��B

public ButtonEvent(String buttonName) {
 this.isDown = false; //�����l��false
 this.State = ""; //�����l��""
 this.onButtonTime = 1000; //����������
 this.Flg = false; //�����l��false
 this.ButtonName = buttonName; //�{�^���̖��O���擾
}

�X�̃{�^���̃L�[�Ƃ��ĕ�������`���Ă����܂��B

A�{�^�� �@�� A      Home�{�^���� Home
B�{�^�� �@�� B      ���{�^���@�� Up
1�{�^�� �@�� One    ���{�^���@�� Down
2�{�^�� �@�� Two    ���{�^���@�� Left
-�{�^�� �@�� Minus  ���{�^���@�� Right
+�{�^�� �@�� Plus

������[A]�{�^���ɂ‚��ĊǗ�����ꍇ�A�uA�v�Ƃ�����������g����ButtonEvent�N���X��new���āuButtonA�v�Ƃ����N���X�I�u�W�F�N�g���쐬���܂��B���̕��@�ŁA�e�X�̃{�^���ɂ‚��ăC�x���g���Ǘ�����N���X�Q���ł�������܂��B

 public ButtonEvent ButtonA    = new ButtonEvent("A");
 public ButtonEvent ButtonB    = new ButtonEvent("B");
 public ButtonEvent ButtonUP   = new ButtonEvent("Up");
 public ButtonEvent ButtonDOWN = new ButtonEvent("Down")
��...�ȉ����ׂẴ{�^���ɂ‚���new���܂���

�����ButtonEvent�N���X�ɁuGetOnButton(WiimoteState ws)�v�Ƃ���String��Ԃ����\�b�h��p�ӂ��A�����ꂽ�{�^���̃e�L�X�g��Ԃ��܂��B�ȉ��̂悤�ɃR�[�f�B���O���邱�Ƃ��ł��܂��B

public String GetOnButton(WiimoteState ws) {
//A�������ꂽ       ���@" A"
//B�������ꂽ       ���@" B"
//A,B�������ꂽ     ���@" A B"
//A,B,1,2�������ꂽ ���@" A B One Two"
  String onButtons = "";
  if (ws.ButtonState.A) { onButtons += " A"; }
  if (ws.ButtonState.B) { onButtons += " B"; }
  if (ws.ButtonState.One) { onButtons += " One"; }
���ȉ��S�Ẵ{�^����
 return onButtons; //�����ꂽ�{�^��onButtons��Ԃ�
}

���̃��\�b�h���A

if (this.ButtonName.Equals(this.GetOnButton(ws).Trim()))

�c�Ǝg�����ƂŁA������Ă���{�^�������ڂ������{�^���ł���ButtonName�Ɠ������ǂ������ׂ鎖���ł��܂��B�Ȃ��O��̃X�y�[�X���������Ă���郁�\�b�hTrim()��Equals()�́AString�^���p�����Ă���̂ŁA�lj������Ȃ��ŗ��p�ł��܂��B

switch (ButtonA.onButton(ws))

�Ƃ��邱�ƂŁAswitch����p���Ă��ꂼ���[Down]�A[Up]�A[Hold]�Ή�����R�[�h�������Ă������Ƃ��ł��܂��B

�P����if���̑g�ݍ��킹�ŏ����Ă������@�������͂Ȃ��̂ł����A���̌�̃`���[�j���O�ŃX�p�Q�e�B���������A���[�U�[�e�X�g���Ɂu�������̎��Ԃ�ς������v�Ƃ������ׂ����`���[�j���O�̌J��Ԃ��ɋꂵ�߂��邱�ƂɂȂ邩������܂���B�N���X���g�����ĉ��A�֐��\�������ł���΂������������������Ԃ�Ɛ������t���悤�ɂȂ�܂��B

�L�[�{�[�h���͂̔��s

�}�E�X�Ƃ��Ă̊�{�@�\����������ƁA���[�U�[�e�X�g�ɂ���Ắu�L�[�{�[�h�@�\���~�����v�Ƃ����]���ɂ��Ȃ�ł��傤�B

.NET�ɂ͕֗���API�uSendKeys.SendWait()�v�Ƃ������\�b�h������A�����ɔ��s�������L�[�{�[�h���͂𕶎����n�����ƂŁA�L�[�{�[�h���͂𔭍s���邱�Ƃ��ł��܂��B�Ⴆ�΁uAlt+F4�v�̂悤�ȓ��ʂȃL�[�������������͂����s�ł��܂��B

[Alt+F4]�𔭍s�����
 SendKeys.SendWait("%{F4}");

�J�[�\���L�[��Ctrl�L�[�ȂǂقƂ�ǂ̃{�^���R���r�l�[�V�����͂��̕��@�ō��o�����Ƃ��ł��܂��B�ڍׂ�SendKeys�ɂ‚��Ē��ׂ�ƁA�S�Ă̋L�q���[�������‚��邱�Ƃ��ł���ł��傤�B

�܂��g�p�‹��ɂ���Ắu���̃c�[�����g�̕\�����B�������v�Ƃ����v��������Ǝv���܂��B����ȂƂ��́A�ȉ��̃R�[���ł��̃v���O�������v���O�������g����ŏ������邱�Ƃ��ł��܂��B

 this.WindowState = FormWindowState.Minimized;

���̂悤��.NET�̋@�\���t�����p���AWiiRemote�̃C�x���g�ɑ΂��ă}�E�X�ƃL�[�{�[�h�̓��͂����蓖�Ă���A���Ɂu�����`���[�v�Ŋw�񂾃A�v���P�[�V�����̎��s�Ȃǂ�g�ݍ��킹����A���ɂ͊O����API�����p���Ȃ��玩���ōD���ȋ@�\�𐷂荞��ŁA���N���̖��ɗ��uWiiRemoteMouse�v����肱��ł݂Ă��������B

�����v�f

�C���^���N�V�����Z�p�A����GUI(�O���t�B�J�����[�U�[�C���^�[�t�F�[�X)�ɂƂ��āu�����ځv�́w�d�v�ȋ@�\�x�ł��B�����ł́u�����v�f�v�ƌĂ�ł��܂����A�����Čy�����ς����Ă���̂ł͂���܂���B�֐��������邱�ƂŁA�����ō�荞�ނ̂���������Ƃ��v���o���܂��傤�B����́u�T�v�݌v�v�Ŋ�{�@�\��f�����������A���[�U�[�e�X�g�̌J��Ԃ��̃��[�v�ɂ����āu�\���Ȏ��Ԃ������đ����������v�Ƃ����ړI�ɂ����̂ł��B

�������̊J���̏��Ԃ��t���ƁA�J���̏����Łu�����ځv�ɂ΂��莞�Ԃ������A�K�v�ȋZ�p�ۑ�̉������ς܂Ȃ��܂܁A�Ђ��Ă̓v���W�F�N�g�̐i�s�������̒i�K�ł‚܂Â����邱�ƂɂȂ�܂��B�u�����ڂ��d�v�v�����炱���A���܃��[�U�[�e�X�g�̃��[�v�̒��ŁA�v�������������܂��傤�B

�����ɂ��LED�o�͊֐�

�܂��͂�����Ƃ�������LED�̕\���������������܂��B

�C���[�W�Ƃ��Ă�LED�ɂ̓o�b�e���[�̎c�ʂ��o25%�ȉ��A50%�A75%�A75%�ȏ�p�Ƃ�����4�i�K�ŕ\���������̂�SetLEDs()�֐��𗘗p���āA

LED��4�i�K�ŕ\���������
    wm.SetLEDs(1);  //�������� 25���ȉ�
    wm.SetLEDs(3);  //�������� 50��
    wm.SetLEDs(7);  //�������� 75��
    wm.SetLEDs(15); //�������� 75���ȏ�

���̂悤�ɕ\�����Ă������Ƃ��ł���ł��傤�B

�������uswitch�`case�v�����g���ă��W�b�N(�_��)�ŕ\�����Ă������@�ɑ΂��āA������1�s�ɂ܂Ƃ߂�G���K���g�ȕ��@������܂��B�����1�s�ŏ����鐔���Ŏ������Ă݂܂��B

�o�b�e���[�c�ʂ�LED�ɏo�͂��鐔��(Form1.cs)[C#]
#region LED�E����
  public void EffectsOut(WiimoteState ws) {
    //25%����LED��\��������
    wm.SetLEDs((int)Math.Pow(2.0f, (int)(ws.Battery / 25) +1 ) - 1);
  }
#endregion

������1�s�̎��ł����A�ȉ��̂悤�ȈӖ��������Ă��܂��B

�o�b�e���[�̒l��[0��Battery��100]��float�^�Ŏ�ɓ���܂��̂ŁA�����25�Ŋ����āA������(�����_�ȉ���؂藎�Ƃ�)���܂��B����ƃo�b�e���[�̎c�ʂɉ����āu0,1,2,3�v�Ƃ��������ɂȂ�܂��Bn�����R��(1,2,3,...)�Ƃ���Ƃ��A2�ׂ̂���[2^n]�́u2,4,8,16,...�v�Ƃ����l���Ƃ�܂��̂ŁA������-1���Ă����邱�ƂŁA�K�v�ȁu1,3,7,15�v�Ƃ���4�‚�LED�o�͗p�̐����𓾂邱�Ƃ��ł��܂��B

���̂悤�ɖ@������������͉̂”\�Ȍ��萔���A�‚܂�֐��ŕ\���ł���悤�ɂ���N�Z���‚���ƁA�R�[�f�B���O�������قǒZ���Ȃ�܂��̂ŁA�f�o�b�O����Ƃ��������Ƃ�������܂��B�����w�Z�Ŋw�񂾐��w�����ɖ��ɗ����܂��B�u���w�v�Ƃ��������u�Z���p�Y���v�̂悤�Ȃ��̂Ȃ̂ŁA�������Ċ֐�������̂ł͂Ȃ��w�y����ʼn����Ă݂悤�I�x�Ƃ����Ƃ���ł��傤���B

�R�[�f�B���O�����̍���

�@�C���^���N�e�B�u�Z�p���v���O����������Ƃ��A�Ⴆ�΃Q�[���J���⌤���J���ɂ����āu�Ƃ肠��������������ԁv����A���̃`���[�j���O�����Ă�����Ŋ֐����A����������΁u�o���I�ȃ��W�b�N�𐔊w�ň����K���v���‚��邱�Ƃ͔��ɏd�v�ł��B

�@�{���Ɍf�ڂ��Ă���v���O�����͎��ʂł��̂ŁA�ł��邾���f�ڂ���R�[�h�̍s���ɖ��ʂ������A���‚��悢�����̂��߂ɗ����ǂ��₷���f�ڂ���悤�ɂ��Ă��܂��B����͕M�҂����`���w���̍����s���Ă����u�}�C�R��BASIC�}�K�W���v(�d�g�V����)�̍l�������̗p���Ă��܂��B�����A�ǎ��ȃv���O�����̎�ȗ��ʕ��@��Web��d�q���[���ł͂Ȃ��u���ʁv�ł����̂Łw�����ɒZ���Ĕ������R�[�h���������x�Ƃ����A������l����Ƌ��낵���X�g�C�b�N�ȃR�[�f�B���O�X�^�C�������s���Ă����킯�ł��B�����āABASIC�}�K�W���͌������ł����̂ŁA�K�x�Ȓ��؂�A�ҏW���̖��ȃm�����A�i���ȍ����u�݂�Ȃō���Ă��������v�����o���Ă��܂����B

�@���̂悤�ȁu�W���m�v�╶���c�����ƍ����Ȍ�����������΁u�W���m�ɂ��n���I�R�[�f�B���O�v�A�ŋ߂̗��s�ŕ\������΁u�w�j�R�j�R����E�Z�p���x�ō���Ă݂��v�����Ȃ�߂����o�ł��傤�B�w�j�R���x�ł̃C���^���N�e�B�u�Z�p�Ɋւ��钍�ڂ͔��ɍ������̂�����܂�(�݂�Ȃ���Ȏ����m��Ȃ��̂��c�Ƌ������Ƃ������̂ł����I)�B

�@�����Ė{���̓ǎ҂��w�j�R�������x�ɍv���ł��邱�Ƃ��傫���Ƃ������܂��B�F��������ЁA�����ȍ�i�⊈�����f�������āA�O�ڂɂ��炵�Ă݂�Ƃ悢�ł��傤�B�u����www�I�v�Ə܎^���ꂽ���ƂɁA�����]���Č��J�����v���O�������u�����̃X�p�Q�e�B�R�[�h!!�v�ƃK�b�J������Ȃ��悤�ɁA�ė��p���₷���A���l�̕׋��ɂȂ�R�[�f�B���O�X�^�C�����ɂ߂Ă݂Ă݂�̂��J�b�R�C�C�Ƃ������܂��B

�ԊO���i��������

�܂����[�U�[�r���e�B����ɂ��֌W����v�f�Ƃ��āA�ԊO���̕i�������コ�������Ƃ������܂��B����̃v���O�������ƃ}�E�X�J�[�\���̓K�^�K�^���Ă���͂��ł��B�ԊO������ʼnB�����肵�āA�悭�l�q���ώ@����Ƃ킩��̂ł����A�Z���T�[�o�[��2�_��LED�̂����u�ǂ��炩1�_�v�����̂Ƃ��̏󋵂ō̗p����Ă���̂������ł͂Ȃ��ł��傤���B����̃v���O�����ł́u�ŏ��Ɍ�����1�_�v���}�E�X�J�[�\���̍��W�ɕϊ����Ă��܂��̂ŁA�ׂ�����������悤�Ƃ���ƁA�ׂɂ���u2�–ڂ̐ԊO���v�ז������āA�l�����ł��܂����芴���Ȃ��Ȃ��Ă���̂ł��B

���̂悤�ȏ󋵂ɑ΂���ЂƂ‚̉��Ƃ��Ắu2��LED���������Ƃ��͉E�ɂ���ԊO�����̗p�v�Ƃ��������W�b�N�Ń��[������邱�Ƃł��B

�ԊO���}�E�X�̈��艻(Form1.cs)[C#]
#region �ԊO���Ń}�E�X�J�[�\���ړ�
  public void IR_Cursor(WiimoteState ws)
  {
    ScreenSize.X = Screen.PrimaryScreen.Bounds.Width;  //��ʃT�C�Y����
    ScreenSize.Y = Screen.PrimaryScreen.Bounds.Height; //��ʃT�C�Y�c��
    //�ԊO�����W(�������Ƃ������X�V)
    float Ix1 = 0.5f, Iy1 = 0.5f, Ix0 = 0.5f, Iy0 = 0.5f;
    float Ix, Iy; //�ԊO�����W�̕���
    int px, py; //�ŏI�I�ȃ}�E�X�J�[�\���̈ʒu   
    if (ws.IRState.IRSensors[1].Found) {
      Ix1 = ws.IRState.IRSensors[1].Position.X;
      Iy1 = ws.IRState.IRSensors[1].Position.Y;
      Ix0 = ws.IRState.IRSensors[0].Position.X;
      Iy0 = ws.IRState.IRSensors[0].Position.Y;
      //Ix1,Iy1�ɑ傫����(��)���i�[������
      if (Ix1<Ix0) {
        Ix0 = Ix1; Iy0 = Iy1;
        Ix1 = ws.IRState.IRSensors[0].Position.X;
        Iy1 = ws.IRState.IRSensors[0].Position.Y;
      }
      Ix =  Ix0; Iy = Iy0; //�����ŕ��ς��Ƃ��Ă��ǂ����낤
      px = (int)(ScreenSize.X * (1 - Ix)); //X���W�͔��]
      py = (int)( Iy * ScreenSize.Y);
      //�}�E�X�J�[�\�����w��ʒu�ֈړ�
System.Windows.Forms.Cursor.Position = new System.Drawing.Point(px, py);
    }
  }
#endregion

���s���Ă݂��(�‹��ɂ����܂���)�o�^�o�^���͑����͉��P����Ă���̂ł͂Ȃ��ł��傤���B���̃p�[�g�͂��̂悤�ȃ`���[�j���O��ƁA���P���J��Ԃ����ƂŁA���[�U�[�r���e�B����ɑ傫���v���ł���”\��������܂��B�Ⴆ�΁A�ԊO���������Ȃ������Ƃ��̏����Ƃ��āA�ߋ��̒l���g������A���ς��Ƃ�����A�������Ƃ�����c�Ƃ�����������̃R�[�h����{�Ƃ��Ēlj����邱�Ƃ��ł��܂��B

�‹���󋵂ɂ���Ă�葽���e�X�g�����A�A�C�f�B�A�𐷂荞��ł������ƂŁA�s����ȓ�����y�����邱�Ƃ��ł���ł��傤�B

�������`�悵����

PictureBox�ɃJ�b�R�C�C�������\���������I�Ǝv�����Ƃ�����ł��傤�B���ɐ�قǂ̐ԊO���i���̌�����`���[�j���O�����ł́A�e�X�̃}�[�J�[�̒l���\���ł���ƁA��Ƃ��͂��ǂ�܂��B���������b�Z�[�W�{�b�N�X�⃉�x��������ł͏��̗ʂ�������ɑ������āA���ɗ����܂���B�����ŁA����͓���RawPosition(���̑���l)��PictureBox�ɉ摜�Ƃ��ĕ`�悵�܂��B����̓v���O���}�ɂƂ��Ắu��Ƃ̌������v�̈�‚ł����A�u�����ڂɃJ�b�R�C�C�v�Ƃ����u�@�\�v�����������܂��B

�o�b�e���[�c�ʂ�LED�ɏo��(Form1.cs)[C#]
#region �t�H�[���`��֐�DrawString��
  public void DrawForms(WiimoteState ws)
  {
    //�O���t�B�b�N�X���擾
    Graphics g = this.pictureBox1.CreateGraphics();
    Font drawFont = new Font("Arial", 9);  //|�t�H���g���w��
    SolidBrush drawBrush = new SolidBrush(Color.White); //|�F�͔�
    String drawString = "Text";            //|�`�敶����
    //|�`��ʒu������Point�^�ϐ�
    System.Drawing.Point pos = new System.Drawing.Point(0, 0);
    int irsize;  //|���o�����ԊO���}�[�J�[�̃T�C�Y
    g.Clear(Color.Black);//��ʂ����F�ɃN���A
    //�����ԊO�����P�‚ł�����������
    if (ws.IRState.IRSensors[0].Found)
    {
      //�}�[�J0�̕`��
      pos.X = (int)(ws.IRState.IRSensors[0].Position.X * 256);
      pos.Y = (int)(ws.IRState.IRSensors[0].Position.Y * 128);
      irsize = ws.IRState.IRSensors[0].Size + 5;
      g.FillEllipse(Brushes.Red, pos.X, pos.Y,irsize, irsize);
      drawString = "[" + ws.IRState.IRSensors[0].RawPosition.X + ", "
                       + ws.IRState.IRSensors[0].RawPosition.Y + "]";
      g.DrawString(drawString, drawFont, drawBrush, pos);
      //�}�[�J1�̕`��
      pos.X = (int)(ws.IRState.IRSensors[1].Position.X * 256);
      pos.Y = (int)(ws.IRState.IRSensors[1].Position.Y * 128);
      irsize = ws.IRState.IRSensors[0].Size + 5;
      g.FillEllipse(Brushes.Blue, pos.X, pos.Y, irsize, irsize);
      drawString = "[" + ws.IRState.IRSensors[1].RawPosition.X + ", "
                       + ws.IRState.IRSensors[1].RawPosition.Y + "]";
      g.DrawString(drawString, drawFont, drawBrush, pos);
    }
    g.Dispose();//�O���t�B�b�N�X�̉��
    label1.Text = "IR[0] " + ws.IRState.IRSensors[0].RawPosition.ToString()
+ "\nIR[1] " + ws.IRState.IRSensors[1].RawPosition.ToString();
  }
#endregion

�����ł�DrawForm()�́uDrawFormOrg()�v�Ƃ��ăR�s�[���y�[�X�g�ł��̂܂܎c���āA�e�L�X�g�\���p�@�\��lj����Ă��܂��B�u�}�[�J�[0�̕`��v�Ƃ��������肩��A�啝�ɏ��������Ă��܂����A���ǂ݂₷���Ȃ��Ă���͂��ł��B��������PictureBox�ɏ���\������̂ŁA�ȉ~��`��FillEllipse()�̑�4�A��5�����ɁA���o���ꂽ�ԊO���̑傫����^���āA�Ӗ����������Ă��܂��B

���ꂼ��̃}�[�J�[�̈ʒu�ɑ���l��\��

���s���Ă݂܂��傤�B�Z���T�[�o�[�ɋ߂Â���ƃ}�[�J�[�������~���傫�߂ɕ`�悳��܂��B���̂悤�ɁA�ԊO���̗l�q����������ώ@�ł���̂ŁA���[�U�[�̓�����������₷���Ȃ�A�ӊO�ȃ`���[�j���O�̃q���g�ɂȂ�܂��B

�e�L�X�g���\���ł���悤�ɂȂ�ƁA�֗��Ŋi�D�������Ƃ����낢�����悤�ɂȂ�܂��̂Ŋ��p���܂��傤�B

��́u�����ނ��w�v��`��

�Ō�ɁAWiiRemote�́u�X����\���v�ł���悤�ɂ��܂��B����Wii�{�̂ł悭�o�Ă���u�w�J�[�\���v�ŕ\������Ă���悤�ɁAWiiRemote�̌X������ʂŕ\���ł���ƁA���WiiRemote�炵���Ȃ�܂��B���������̎w�|�C���^�̌X���͉����x�Z���T�[�ɂ����̂ł͂Ȃ��悤�ł��B�����x�Z���T�[�̒l���g��Ȃ��Ă��A�Z���T�[�o�[�����2�‚̃}�[�J�[���W���擾�ł��Ă���Ȃ�u����2�_���‚Ȃ����̌X���v�ŕ\�����邱�Ƃ��ł��܂��B

�܂��A����������.NET�ɂ��J���ł�����A�l�b�g���[�N���g�����Z�p���Љ�܂��B��̓I�ɂ́u�w�J�[�\���v�Ɏg���摜���A�n�[�h�f�B�X�N���̃t�@�C���ł͂Ȃ��C���^�[�l�b�g�ォ��擾���ė��p���܂��B

�w�J�[�\���̉摜(finger.bmp)

������̉摜�t�@�C���͒��҂̃z�[���y�[�W���uhttp://akihiko.shirai.as/projects/WiiRemote/finger.bmp�v�ɂĂ����Ă�����̂ł��BInternet Explorer�Ȃǂ̃u���E�U�ł���URL���w�肷��ƁA�摜��\���ł��܂��B���Ȃ݂ɂ��̎w�J�[�\���摜�̓y�C���g���g����5�����炢�ŕ`�������̂ł���ŁA�F���񎩐g�ŗp�ӂ��Ă��������Ă����܂��܂���B�������w�i���u�����v�ɔ������߂ɁA���߂�1�F�œh���Ă��܂�(�ʏ́u�����F�v)�B

�u��]����w�v��URL����擾���ĕ`��(Form1.cs)[C#]
namespace WiiRemoteMouse {
 public partial class Form1 : Form {
  Wiimote wm = new Wiimote();      //Wiimote�N���X���쐬
  ButtonEvents wbe = new ButtonEvents(); //�{�^���C�x���g�N���X���쐬
  Bitmap bmp; //|�w�|�C���^�`��p
  System.Drawing.Point ScreenSize; //��ʃT�C�Y���i�[
  Boolean isConnected = false;     //WiiRemote���ڑ����ꂽ��
  public Form1()  {
    InitializeComponent();
   //�O���t�B�b�N�X�������炦
   String url = "http://akihiko.shirai.as/projects/WiiRemote/finger.bmp";
   using (System.Net.WebClient wc = new System.Net.WebClient())
   using (System.IO.Stream st = wc.OpenRead(url))
   bmp = new Bitmap(st);
   // ���������n�[�h�f�B�X�N����ǂނ��Ƃ��”\ 
   // bmp = new Bitmap("c:����WiiRemote����yubi.png");
   bmp.MakeTransparent(bmp.GetPixel(0, 0)); //�����F�̎w��
�������� 
#region �t�H�[���`��֐�Finger��
  public void DrawForms(WiimoteState ws)  {
��������
    double radians, angle = 0.0f;
    //�ԊO����2�Œ������炻�̒��Ԃ��Ƃ�
    if (ws.IRState.IRSensors[1].Found)  {
      pos.X = (int)(ws.IRState.IRSensors[0].Position.X * 256
       + ws.IRState.IRSensors[1].Position.X * 256) / 2;
      pos.Y = (int)(ws.IRState.IRSensors[0].Position.Y * 128
       + ws.IRState.IRSensors[1].Position.Y * 128) / 2;
radians = Math.Atan2(ws.IRState.IRSensors[0].Position.Y - \
    ws.IRState.IRSensors[1].Position.Y,
ws.IRState.IRSensors[0].Position.X - ws.IRState.IRSensors[1].Position.X);
      angle = radians * (180 / Math.PI);   //���W�A�����p�x�ϊ�
    } else {
      //�ԊO����1�‚Ȃ�A1�‚߂̒l���̗p����
      pos.X = (int)(ws.IRState.IRSensors[0].Position.X * 256);
      pos.Y = (int)(ws.IRState.IRSensors[0].Position.Y * 128);
    }
    double d = angle / (180 / Math.PI);    //�p�x�����W�A���ϊ�
    //2D��]�ϊ�
    float x = pos.X;
    float y = pos.Y;
    float x1 = x + bmp.Width * (float)Math.Cos(d);
    float y1 = y + bmp.Width * (float)Math.Sin(d);
    float x2 = x - bmp.Height * (float)Math.Sin(d);
    float y2 = y + bmp.Height * (float)Math.Cos(d);
    //�V�����`��ʒu
    System.Drawing.PointF[] destinationPoints =
                   {new System.Drawing.PointF(x , y ),
                    new System.Drawing.PointF(x1, y1),
                    new System.Drawing.PointF(x2, y2)};
    //�摜��\��
    g.DrawImage(bmp, destinationPoints);
//���I������bitmap�I�u�W�F�N�g���̔p���Ȃǂ�Y�ꂸ�Ɂ�
���ȉ�����

�v���O�������s���ADrawForms()�͕b�Ԑ�10��͂܂���Ă��܂��̂ŁA����̕`�掞��URL����ǂݍ��ނƁA���삪�ƂĂ��x���Ȃ��Ă��܂��܂��̂ŁA���������Ƀ��[�h���Ă��܂��B���̂Ƃ��A�C���^�[�l�b�g�ɐڑ�����Ă���A������URL����摜�t�@�C�����擾�ł��Ȃ��ƃG���[�ɂȂ�܂��B�ubmp.MakeTransparent()�v�Łu�����F�v�Ƃ��āA�摜�̈�ԍ���̐F���w�肵�Ă��܂�(������w�肵�Ȃ��Ɓu�w�i���D�F�̎w�v���\������܂�)�B�����URL����BMP�摜��ǂݍ���ł��܂����A�n�[�h�f�B�X�N����PNG�摜��ǂݍ��ޏꍇ�̃\�[�X�R�[�h���R�����g�ɋL�q���Ă����܂����B

�ԊO��2�_����X�����Ƃ���@�́uMath.Atan2()�v���g���܂��B����̓A�[�N�^���W�F���g�Ƃ����O�p�֐��ŁAtan(�]��)�̒�`����^�������p�O�p�`�̂Ȃ��p�𓾂�֐��ł��B180�x�𒴂��Ȃ���Ζ��Ȃ����肵�Ċp�x���擾�ł��܂��B

Atan2�̈Ӗ�(��������]�A���m�F��)

Atan2�Ŏ擾�����p�x�̓��W�A��(�ϐ�radians)�œn����܂��̂ŁA�������₷���悤�p�x(�ϐ�angle�A�P�ʂƂ��Ă�degree)�ɕϊ����鐔�����p�ӂ��Ă����܂����B�Ō�Ɂu2D��]�ϊ��v�Ƃ����R�[�h�ŎO�p�֐��ɂ��ϊ����������{���āADrawImage()�œǂݍ��񂾉摜��`�悵�Ă��܂��B

���w���ۂ����Ƃ���R�o�Ă��ē�������Ă���l�����邩������܂��񂪁A���e�I�ɂ͍��Z1�`2�N���x�̐��w�̋��ȏ��ɍڂ��Ă��邱�Ƃ����p���Ă��邾���ł��B�R���s���[�^�[�O���t�B�b�N�X�v���O���~���O�͐��w���y�������p�ł��钿������Ƃ������܂��B�u���w�Ȃ�Č������v�Ƃ����ǎ҂̕��́A�ǂ��@��ł�����A�����M�[���o�����Ɂu�y����Łv���g��ł݂Ă��������B

WiiRemote�̌X���ɍ��킹�āu��]����w�v�ɒ���

�u�w�J�[�\���v�������ɉ�]���܂��B�摜�t�@�C�������݂��Ȃ��̂ɁA�C���^�[�l�b�g�o�R��BMP�t�@�C����ǂݍ���ł���Ƃ���ɂ����ڂł��B�w�̌X���́A�ꌩ���Ɏg���̂��킩��܂��񂪁uWiiRemote���g���Ă���v�Ƃ������������܂����A������������p�x��ϋɓI�Ɏg�����R�}���h��A�x�N�g���𗘗p���������I�ȃC���^���N�V�����ȂǂɊ��p�ł��邩������܂���ˁB

�ȏ�ŁA�����v�f�Ɋւ��������I���܂��B�u�����v�f�v�͎����n�A�v���P�[�V�����ł͕����ʂ�f�R���[�V�����ł����Ȃ��̂ł����A�C���^���N�V�������d�v�ɂȂ�v���O�����ł͔��ɏd�v�ȗv�f�ɂȂ�܂��B�܂��A�v���O���~���O�̎����̎d���ɂ���ẮA�����v�f���v���O�����S�̂̃p�t�H�[�}���X��ቺ��������A���[�U�[�C���^���N�V���������コ������ƁA���[���v���O���~���O�v�f�ɂȂ邱�Ƃ��̊��ł����̂ł���΍K���ł��B

�ȏ�ŁA�uWiiRemoteMouse�v�̊J���͏I���܂��B���̏͂ł̊J����ʂ��āA�P�Ƀv���O���~���O�����ł͂Ȃ��A�����̂��Ƃ��w�Ԃ��Ƃ��ł����̂ł͂Ȃ��ł��傤���H

�����Ŋ����Ƃ͂����Ȃ���������܂���A�܂��܂������������@�\��`���[�j���O�������v�f���������񂠂�Ǝv���܂��B�Ⴆ�΂��́uWiiRemoteMouse�v��g�̂Ƀn���f�B���������l�Ɏg���Ă��炤�̂��A�������\�t�@�[�ɐQ���ׂ�Ȃ���l�b�g���y���ނ��߂Ɏg���̂��B���̂��߂ɂǂ̂悤�ȉ��P���ł���̂��B���̂悤�ȉۑ�ɑ΂��āA���\���Šm���ȉ񓚂͂���܂��񂪁A���܂Ŋw�񂾂��Ƃ����p���A�z���͂𓭂�����΂���΁A�K���S�[���ɂ��ǂ蒅����ł��傤�B�‚܂�A������{�l���[���ł��āA���ƒ��[�U�[�́u������Ă��Ċy�����v���O�����v�ɂȂ�Ƃ������Ƃł��B

���̎��H�I�ȃv���O���~���O�̌���ʂ��āA�F����̉”\���͊m���ɍL�������͂��ł��B���ЁA�J��Ԃ����Ԃ�������WiiRemote���‚������C���^���N�e�B�u�Z�p�v���O���~���O�̑�햡���y����ł��������B���́u���K���v�ɂ�WiiRemote�����p�����C�}�W�l�[�V�����𔚔������邽�߂̎h���I�ȃX�p�C�X���R�Љ�Ă��܂��B���ꂼ��̉ۑ�ɕK�������u�͔͉񓚁v���p�ӂ���Ă���킯�ł͂���܂��񂪁A���̂��Ȃ��ł���΁A�������g�Ŋy���݂Ȃ���w�K���A�O�ɐi�߂Ă������Ƃ��ł���͂��ł��B