#include "stdafx.h"
#include "xu.h"
#include <Tlhelp32.h>
#include <fstream>
/*
#define GETLASTERRSTR() do{
LPVOID lpmsg;
DWORD _errcode = ::GetLastError();
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
_errcode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)lpmsg,
0,
NULL);
AfxMessageBox(CString((LPTSTR)lpmsg));
LocalFree(lpmsg);
} while (0);
*/
static void _SendInput(UINT cInputs,LPINPUT pInputs,int cbSize)
{
if (0 == ::SendInput(cInputs,pInputs,cbSize)){
LPVOID lpmsg = NULL;
DWORD errcode = ::GetLastError();
if (0 == errcode) return;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
errcode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpmsg,
0,
NULL);
AfxMessageBox(CString((LPTSTR)lpmsg));
LocalFree(lpmsg);
}
}
namespace xu{
//Unicode char To ANSI char
std::string CStrToStr(const wchar_t *pstr)
{
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_ACP,
0,
pstr,
-1,
NULL,
0,
NULL,
NULL );
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_ACP,
0,
pstr,
-1,
pElementText,
iTextLen,
NULL,
NULL );
std::string str(pElementText);
delete[] pElementText;
return str;
}
//Unicode char To ANSI char
std::string CStrToStr(CString &str)
{
return CStrToStr(str.GetBuffer(0));
//return "";
}
void mouse_rclick()
{
MOUSEINPUT mi = {0,0,0,0,0,NULL};
INPUT Input = {INPUT_MOUSE};
//Input.mi = mi;
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
}
void mouse_click()
{
MOUSEINPUT mi = {0,0,0,0,0,NULL};
INPUT Input = {INPUT_MOUSE};
//Input.mi = mi;
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
}
void button_click(HWND hwnd)
{
RECT rec;
::GetWindowRect(hwnd,&rec);
::SetCursorPos((rec.left+rec.right)/2,(rec.bottom+rec.top)/2);
mouse_click();
Sleep(100);
}
void mouse_move(int x,int y)
{
//SetCursorPos(x,y);
//Sleep(2000);
/* mouse event, move absolutely*/
INPUT inputs={0};
inputs.type=INPUT_MOUSE;
inputs.mi.dx=100;
inputs.mi.dy=200;
inputs.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, &inputs, sizeof(inputs));
}
void CopyTextDataToClipBoard(const char* pszData, const int nDataLen)
{
if (::OpenClipboard(NULL)){
::EmptyClipboard();
HGLOBAL hmem = ::GlobalAlloc(GHND,nDataLen+1);
char *pmem = (char *)::GlobalLock(hmem);
memcpy(pmem,pszData,nDataLen+1);
::GlobalUnlock(hmem);
::SetClipboardData(CF_TEXT,hmem);
::CloseClipboard();
::GlobalFree(hmem);
}
}
BOOL GetTextDataFromClipBoard(std::string &str)
{
if (::OpenClipboard(NULL)){
//获取剪贴板数据
HGLOBAL hmem = ::GetClipboardData(CF_TEXT);
if (NULL != hmem){
char *lpstr = (char *)::GlobalLock(hmem);
if (NULL != lpstr){
//MessageBox(0, lpStr, "", 0);
str = lpstr;
::GlobalUnlock(hmem);
}
else{
return FALSE;
}
}
else{
return FALSE;
}
::CloseClipboard();
}
return TRUE;
}
CString GetProcessSnapFromSYS()
{
HANDLE hProc = NULL;
PROCESSENTRY32 pe32 = {0};
CString str;
//做一个系统中当前进程列表的快照
hProc = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (INVALID_HANDLE_VALUE == hProc)
return L"";
pe32.dwSize = sizeof(PROCESSENTRY32);
if (::Process32First(hProc,&pe32)){
do{
HANDLE hp = ::OpenProcess(PROCESS_TERMINATE | PROCESS_ALL_ACCESS,
FALSE,
pe32.th32DefaultHeapID);
if (!hp){
CString cstr;
cstr.Format(L"%d\n",pe32.th32ProcessID);
str += cstr;
}
}while (::Process32Next(hProc,&pe32));
}
::CloseHandle(hProc);
return str;
}
//为方便使用,下面这个函数包装了前两个函数。
void SendKeys(CString msg)
{
short vk;
BOOL shift;
USES_CONVERSION;
wchar_t* data = T2W(msg.GetBuffer(0));
int len = wcslen(data);
for(int i=0;i<len;i++){
if (data[i]>=0 && data[i]<256){ //ascii字符
vk = VkKeyScanW(data[i]);
if (vk == -1){
SendUnicode(data[i]);
}
else{
if (vk < 0){
vk = ~vk + 0x1;
}
shift = vk >> 8 & 0x1;
if (GetKeyState(VK_CAPITAL) & 0x1){
if (data[i]>='a' && data[i]<='z' || data[i]>='A' && data[i]<='Z'){
shift = !shift;
}
}
SendAscii(vk & 0xFF, shift);
}
}
else{ //unicode字符
SendUnicode(data[i]);
}
}
}
void SendString(HWND hWnd,WCHAR * str,int len)
{
int i;
if(hWnd){
for(i=0;i<len;i++){
::SendMessage(hWnd, WM_IME_CHAR, str[i], 0);
}
::PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0); //发送回车键
}
}
void SendString(HWND hWnd,char * str,int len)
{
int i;
BYTE ch;
if(hWnd){
for(i=0;i<len;){
ch=(BYTE)str[i];
if(IsDBCSLeadByte(ch)){
i++;
::SendMessage(hWnd,WM_IME_CHAR,MAKEWORD((BYTE)str[i],ch),0);
i++;
}
else{
::SendMessage(hWnd, WM_IME_CHAR, (WORD)ch, 0);
i++;
}
}
::PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0); //发送回车键
}
}
}
void WriteLog(const char *pName,const char *pData,bool bEnd,bool app)
{
std::ofstream outf(pName,app? std::ios::app : std::ios::out);
outf<<pData<<bEnd? "\n":" ";
outf.close();
}
void SendAscii(wchar_t data, BOOL shift)
{
INPUT input[2];
memset(input, 0, 2 * sizeof(INPUT));
if (shift){
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = VK_SHIFT;
_SendInput(1, input, sizeof(INPUT));
}
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = data;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = data;
input[1].ki.dwFlags = KEYEVENTF_KEYUP;
_SendInput(2, input, sizeof(INPUT));
if (shift){
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = VK_SHIFT;
input[0].ki.dwFlags = KEYEVENTF_KEYUP;
_SendInput(1, input, sizeof(INPUT));
}
}
void SendUnicode(wchar_t data)
{
INPUT input[2];
memset(input, 0, 2 * sizeof(INPUT));
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.wScan = data;
input[0].ki.dwFlags = KEYEVENTF_UNICODE;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.wScan = data;
input[1].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_UNICODE;
_SendInput(2, input, sizeof(INPUT));
}
#include "xu.h"
#include <Tlhelp32.h>
#include <fstream>
/*
#define GETLASTERRSTR() do{
LPVOID lpmsg;
DWORD _errcode = ::GetLastError();
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
_errcode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)lpmsg,
0,
NULL);
AfxMessageBox(CString((LPTSTR)lpmsg));
LocalFree(lpmsg);
} while (0);
*/
static void _SendInput(UINT cInputs,LPINPUT pInputs,int cbSize)
{
if (0 == ::SendInput(cInputs,pInputs,cbSize)){
LPVOID lpmsg = NULL;
DWORD errcode = ::GetLastError();
if (0 == errcode) return;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
errcode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpmsg,
0,
NULL);
AfxMessageBox(CString((LPTSTR)lpmsg));
LocalFree(lpmsg);
}
}
namespace xu{
//Unicode char To ANSI char
std::string CStrToStr(const wchar_t *pstr)
{
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_ACP,
0,
pstr,
-1,
NULL,
0,
NULL,
NULL );
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_ACP,
0,
pstr,
-1,
pElementText,
iTextLen,
NULL,
NULL );
std::string str(pElementText);
delete[] pElementText;
return str;
}
//Unicode char To ANSI char
std::string CStrToStr(CString &str)
{
return CStrToStr(str.GetBuffer(0));
//return "";
}
void mouse_rclick()
{
MOUSEINPUT mi = {0,0,0,0,0,NULL};
INPUT Input = {INPUT_MOUSE};
//Input.mi = mi;
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
}
void mouse_click()
{
MOUSEINPUT mi = {0,0,0,0,0,NULL};
INPUT Input = {INPUT_MOUSE};
//Input.mi = mi;
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1,&Input,sizeof(Input));
Sleep(100);
}
void button_click(HWND hwnd)
{
RECT rec;
::GetWindowRect(hwnd,&rec);
::SetCursorPos((rec.left+rec.right)/2,(rec.bottom+rec.top)/2);
mouse_click();
Sleep(100);
}
void mouse_move(int x,int y)
{
//SetCursorPos(x,y);
//Sleep(2000);
/* mouse event, move absolutely*/
INPUT inputs={0};
inputs.type=INPUT_MOUSE;
inputs.mi.dx=100;
inputs.mi.dy=200;
inputs.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, &inputs, sizeof(inputs));
}
void CopyTextDataToClipBoard(const char* pszData, const int nDataLen)
{
if (::OpenClipboard(NULL)){
::EmptyClipboard();
HGLOBAL hmem = ::GlobalAlloc(GHND,nDataLen+1);
char *pmem = (char *)::GlobalLock(hmem);
memcpy(pmem,pszData,nDataLen+1);
::GlobalUnlock(hmem);
::SetClipboardData(CF_TEXT,hmem);
::CloseClipboard();
::GlobalFree(hmem);
}
}
BOOL GetTextDataFromClipBoard(std::string &str)
{
if (::OpenClipboard(NULL)){
//获取剪贴板数据
HGLOBAL hmem = ::GetClipboardData(CF_TEXT);
if (NULL != hmem){
char *lpstr = (char *)::GlobalLock(hmem);
if (NULL != lpstr){
//MessageBox(0, lpStr, "", 0);
str = lpstr;
::GlobalUnlock(hmem);
}
else{
return FALSE;
}
}
else{
return FALSE;
}
::CloseClipboard();
}
return TRUE;
}
CString GetProcessSnapFromSYS()
{
HANDLE hProc = NULL;
PROCESSENTRY32 pe32 = {0};
CString str;
//做一个系统中当前进程列表的快照
hProc = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (INVALID_HANDLE_VALUE == hProc)
return L"";
pe32.dwSize = sizeof(PROCESSENTRY32);
if (::Process32First(hProc,&pe32)){
do{
HANDLE hp = ::OpenProcess(PROCESS_TERMINATE | PROCESS_ALL_ACCESS,
FALSE,
pe32.th32DefaultHeapID);
if (!hp){
CString cstr;
cstr.Format(L"%d\n",pe32.th32ProcessID);
str += cstr;
}
}while (::Process32Next(hProc,&pe32));
}
::CloseHandle(hProc);
return str;
}
//为方便使用,下面这个函数包装了前两个函数。
void SendKeys(CString msg)
{
short vk;
BOOL shift;
USES_CONVERSION;
wchar_t* data = T2W(msg.GetBuffer(0));
int len = wcslen(data);
for(int i=0;i<len;i++){
if (data[i]>=0 && data[i]<256){ //ascii字符
vk = VkKeyScanW(data[i]);
if (vk == -1){
SendUnicode(data[i]);
}
else{
if (vk < 0){
vk = ~vk + 0x1;
}
shift = vk >> 8 & 0x1;
if (GetKeyState(VK_CAPITAL) & 0x1){
if (data[i]>='a' && data[i]<='z' || data[i]>='A' && data[i]<='Z'){
shift = !shift;
}
}
SendAscii(vk & 0xFF, shift);
}
}
else{ //unicode字符
SendUnicode(data[i]);
}
}
}
void SendString(HWND hWnd,WCHAR * str,int len)
{
int i;
if(hWnd){
for(i=0;i<len;i++){
::SendMessage(hWnd, WM_IME_CHAR, str[i], 0);
}
::PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0); //发送回车键
}
}
void SendString(HWND hWnd,char * str,int len)
{
int i;
BYTE ch;
if(hWnd){
for(i=0;i<len;){
ch=(BYTE)str[i];
if(IsDBCSLeadByte(ch)){
i++;
::SendMessage(hWnd,WM_IME_CHAR,MAKEWORD((BYTE)str[i],ch),0);
i++;
}
else{
::SendMessage(hWnd, WM_IME_CHAR, (WORD)ch, 0);
i++;
}
}
::PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0); //发送回车键
}
}
}
void WriteLog(const char *pName,const char *pData,bool bEnd,bool app)
{
std::ofstream outf(pName,app? std::ios::app : std::ios::out);
outf<<pData<<bEnd? "\n":" ";
outf.close();
}
void SendAscii(wchar_t data, BOOL shift)
{
INPUT input[2];
memset(input, 0, 2 * sizeof(INPUT));
if (shift){
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = VK_SHIFT;
_SendInput(1, input, sizeof(INPUT));
}
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = data;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = data;
input[1].ki.dwFlags = KEYEVENTF_KEYUP;
_SendInput(2, input, sizeof(INPUT));
if (shift){
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = VK_SHIFT;
input[0].ki.dwFlags = KEYEVENTF_KEYUP;
_SendInput(1, input, sizeof(INPUT));
}
}
void SendUnicode(wchar_t data)
{
INPUT input[2];
memset(input, 0, 2 * sizeof(INPUT));
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.wScan = data;
input[0].ki.dwFlags = KEYEVENTF_UNICODE;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.wScan = data;
input[1].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_UNICODE;
_SendInput(2, input, sizeof(INPUT));
}