他人の空似自作物置場

keyboard_emulater.zip/keyboard_emulater.cpp

#include "keyboard_emulater.h"

#pragma comment (lib,"winmm.lib")

//コンストラクタ
void keyboard_emulater::initialize(){
	mCounter = &mNum;
	mNum = 0;
	mKeyFrame = 0;
	mList.clear();
}
keyboard_emulater::keyboard_emulater(){
	initialize();
}
keyboard_emulater::keyboard_emulater(int *counter){
	initialize();
	mCounter = counter;
}
keyboard_emulater::keyboard_emulater(int keyFrame){
	initialize();
	mKeyFrame = keyFrame;
}
keyboard_emulater::keyboard_emulater(int *counter, int keyFrame){
	initialize();
	mCounter = counter;
	mKeyFrame = keyFrame;
}
keyboard_emulater::keyboard_emulater(int keyFrame, int *counter){
	initialize();
	mCounter = counter;
	mKeyFrame = keyFrame;
}


//アクセサ
int keyboard_emulater::setKeyFrame(int keyFrame){
	int temp = mKeyFrame;
	mKeyFrame = keyFrame;
	return temp;
}
int *keyboard_emulater::setCounter(int *counter){
	int *temp = mCounter;
	mCounter = counter;
	return temp;
}
int keyboard_emulater::getKeyFrame(){
	return mKeyFrame;
}
int *keyboard_emulater::getCounter(){
	return mCounter;
}


//イベントループ
int keyboard_emulater::run(){
	std::vector<KEY_ACTION>::iterator p = mList.end();
	std::vector<KEY_ACTION>::iterator s = mList.begin();
	int i = 0;
	while(p != s){
		p--;
		if((*p).frame < *mCounter){
			event((*p).vk,(*p).dik,(*p).flag);
			p = mList.erase(p);
			i++;
		}
		p--;
	}
	mNum++;
	return i;
}


//インスタンスメソッド
void keyboard_emulater::addVKEvent(int vk, DWORD dwFlags){
	addEvent(vk, 0, dwFlags);
}
void keyboard_emulater::addDIKEvent(int dik, DWORD dwFlags){
	addEvent(0, dik, dwFlags);
}
void keyboard_emulater::addEvent(int vk, int dik, DWORD dwFlags){
	KEY_ACTION act;
	if(dik==0){
		dik = MapVirtualKey(vk,0);
	} else if(vk==0){
		vk = MapVirtualKey(dik,1);
	}

	act.vk = vk;
	act.dik = dik;
	act.flag = dwFlags;
	act.frame = *mCounter + mKeyFrame;
	mList.push_back(act);
}


//クラスメソッド
void keyboard_emulater::vkEvent(int vk, DWORD dwFlags){
	event(vk, 0, dwFlags);
}
void keyboard_emulater::vkEvent(int vk){
	vkEvent(vk, 0);
	Sleep(9);//9msほど待つ
	vkEvent(vk, KEYEVENTF_KEYUP);
}
void keyboard_emulater::vkEventOn(int vk){
	vkEvent(vk, 0);
}
void keyboard_emulater::vkEventOff(int vk){
	vkEvent(vk, KEYEVENTF_KEYUP);
}
void keyboard_emulater::dikEvent(int dik, DWORD dwFlags){
	event(0, dik, dwFlags);
}
void keyboard_emulater::dikEvent(int dik){
	dikEvent(dik, 0);
	Sleep(9);//9msほど待つ
	dikEvent(dik, KEYEVENTF_KEYUP);
}
void keyboard_emulater::dikEventOn(int dik){
	dikEvent(dik, 0);
}
void keyboard_emulater::dikEventOff(int dik){
	dikEvent(dik, KEYEVENTF_KEYUP);
}
void keyboard_emulater::event(int vk, int dik, DWORD dwFlags){
	if(dik==0){
		dik = MapVirtualKey(vk,0);
	} else if(vk==0){
		vk = MapVirtualKey(dik,1);
	}
	if((dwFlags&KEYEVENTF_KEYUP) == 0)dik += 768;
	keybd_event(static_cast<BYTE>(vk), static_cast<BYTE>(dik), dwFlags, 0);
}
void keyboard_emulater::event(int vk, int dik){
	event(vk, dik, 0);
	Sleep(9);//9msほど待つ
	event(vk, dik, KEYEVENTF_KEYUP);
}
void keyboard_emulater::eventOn(int vk, int dik){
	event(vk, dik, 0);
}
void keyboard_emulater::eventOff(int vk, int dik){
	event(vk, dik, KEYEVENTF_KEYUP);
}