从项目中删除windows.h [英] Removing windows.h from project

查看:62
本文介绍了从项目中删除windows.h的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Xcode上编译我原来的visual c ++项目,所以我可以在macOSX上运行它,因为我不能在Xcode / mac中使用windows.h我正在寻找替代方案。

你能给我一些方法来替换这些子程序:

 UINT SendString(string str)
{
UINT count = 0;
for(size_t i = 0; i< str.size(); i ++)
{
INPUT input [2];
:: ZeroMemory(input,sizeof(input));
input [0] .type = input [1] .type = INPUT_KEYBOARD;
input [0] .ki.wVk = input [1] .ki.wVk = VkKeyScan(str [i]);
输入[1] .ki.dwFlags = KEYEVENTF_KEYUP;
count + = SendInput(2,input,sizeof(INPUT));
}
返回计数;
}
void SendKey(char key){
keybd_event(VkKeyScan(key),0,0,0);
keybd_event(VkKeyScan(key),0,2,0);
}
void MouseMove(int x,int y)
{
double fScreenWidth = :: GetSystemMetrics(SM_CXSCREEN)-1;
double fScreenHeight = :: GetSystemMetrics(SM_CYSCREEN)-1;
double fx = x *(65535.0f / fScreenWidth);
double fy = y *(65535.0f / fScreenHeight);
INPUT输入= {0};
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
Input.mi.dx = fx;
Input.mi.dy = fy;
:: SendInput(1,& Input,sizeof(INPUT));
}
void MouseClick(字符串按钮,字符串模式){
INPUT输入= {0};
Input.type = INPUT_MOUSE;
if(mode ==down){
if(button ==left){Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;} else if(button ==right){输入。 mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;}
:: SendInput(1,& Input,sizeof(INPUT));
} else if(mode ==up){
:: ZeroMemory(& Input,sizeof(INPUT));
if(button ==left){Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;} else if(button ==right){Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;}
:: SendInput (1,&安培;输入,的sizeof(INPUT));
}否则if(mode ==both){
if(button ==left){Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;} else if(button ==right){ Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;}
:: SendInput(1,& Input,sizeof(INPUT));
:: ZeroMemory(& Input,sizeof(INPUT));
if(button ==left){Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;} else if(button ==right){Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;}
:: SendInput (1,&安培;输入,的sizeof(INPUT));
}
}

ShellExecute(NULL,L打开,Lhttp://google.com,NULL,NULL,SW_SHOWNORMAL);

解决方案

评论中的文字有答案。



OS X和Windows API是完全不同。因此,您必须编写全新的代码。



您可以尝试查找执行与Windows API函数相同任务的OS X API函数。对于键盘事件(模拟按键事件),这可能是 CGEventCreateKeyboardEvent() CGEventPost()

I am trying to compile my originally visual c++ project on Xcode so I can run it on macOSX and as I can''t use windows.h in Xcode/mac I''m looking for alternatives.
Could you give me some ways to replace these subroutines:

UINT SendString(string str)
{
   UINT count = 0;
   for (size_t i = 0; i < str.size();i++)
   {   
      INPUT input[2];
      ::ZeroMemory(input, sizeof(input)); 
      input[0].type = input[1].type = INPUT_KEYBOARD;
      input[0].ki.wVk  = input[1].ki.wVk = VkKeyScan(str[i]);
      input[1].ki.dwFlags = KEYEVENTF_KEYUP;
      count += SendInput(2, input, sizeof(INPUT));
   }
   return count;
}
void SendKey(char key){
	keybd_event(VkKeyScan(key),0,0,0);
	keybd_event(VkKeyScan(key),0,2,0);
}
void MouseMove(int x, int y )
{  
	double fScreenWidth    = ::GetSystemMetrics( SM_CXSCREEN )-1; 
	double fScreenHeight  = ::GetSystemMetrics( SM_CYSCREEN )-1; 
	double fx = x*(65535.0f/fScreenWidth);
	double fy = y*(65535.0f/fScreenHeight);
	INPUT  Input={0};
	Input.type      = INPUT_MOUSE;
	Input.mi.dwFlags  = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
	Input.mi.dx = fx;
	Input.mi.dy = fy;
	::SendInput(1,&Input,sizeof(INPUT));
}
void MouseClick(string button, string mode){
	INPUT    Input={0};
	Input.type = INPUT_MOUSE;
	if(mode == "down"){
		if(button == "left"){Input.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;}else if(button == "right"){Input.mi.dwFlags=MOUSEEVENTF_RIGHTDOWN;}
		::SendInput(1,&Input,sizeof(INPUT));
	}else if(mode == "up"){
		::ZeroMemory(&Input,sizeof(INPUT));
		if(button=="left"){Input.mi.dwFlags=MOUSEEVENTF_LEFTUP;}else if(button=="right"){Input.mi.dwFlags=MOUSEEVENTF_RIGHTUP;}
		::SendInput(1,&Input,sizeof(INPUT));
	}else if(mode == "both"){
		if(button == "left"){Input.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;}else if(button == "right"){Input.mi.dwFlags=MOUSEEVENTF_RIGHTDOWN;}
		::SendInput(1,&Input,sizeof(INPUT));
		::ZeroMemory(&Input,sizeof(INPUT));
		if(button=="left"){Input.mi.dwFlags=MOUSEEVENTF_LEFTUP;}else if(button=="right"){Input.mi.dwFlags=MOUSEEVENTF_RIGHTUP;}
		::SendInput(1,&Input,sizeof(INPUT));
}
}

ShellExecute(NULL, L"open", L"http://google.com", NULL, NULL, SW_SHOWNORMAL);

解决方案

Text from comments to have an answer.

The OS X and Windows APIs are totally different. So you must write completely new code.

You can try to find OS X API functions that perform the same tasks as the Windows API functions. For keyboard events (simulating key press events), this might be CGEventCreateKeyboardEvent() and CGEventPost().


这篇关于从项目中删除windows.h的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆