我正在寻找一种方法来确定运行我的游戏的计算机是否连接了触控板和鼠标。一个典型的例子是连接了外接鼠标的笔记本电脑。
是否有一个 Windows API 可以返回连接到系统的鼠标/指针设备的数量?
我需要支持 Windows 7+。
编辑
我保留接受的答案,因为它有效并回答了我的问题,但在发现 ManyMouse 后我决定不使用它.它做我想做的,并允许我在 Mac、Windows 和(希望仍然需要测试的)Linux 上使用相同的 API。
最佳答案
我碰巧有一些代码可以枚举连接到系统的鼠标。如果不止一个,很可能一个是触控板,另一个是外接鼠标,尽管我猜它可能是一个触控板和其中一根小杆。应该可以使用相同的 API 来获取有关每个标称鼠标的足够信息以进行智能猜测;例如,内置鼠标设备通常似乎是通过 PS/2 连接的,而外接鼠标几乎都是 USB。
无论如何,希望这会有所帮助:
#include <windows.h>
#include <Hidsdi.h>
#include <SetupAPI.h>
#include <devguid.h>
#include <stdio.h>
#pragma comment(lib, "hid.lib")
#pragma comment(lib, "setupapi.lib")
int main(int argc, char ** argv)
{
GUID hid_guid;
GUID mouse_guid = GUID_DEVCLASS_MOUSE;
HDEVINFO hdevinfo;
SP_DEVICE_INTERFACE_DATA devinterface;
SP_DEVINFO_DATA devinfo;
BYTE devdetailbuffer[4096];
PSP_DEVICE_INTERFACE_DETAIL_DATA devdetail;
DWORD n;
HidD_GetHidGuid(&hid_guid);
hdevinfo = SetupDiGetClassDevs(&hid_guid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hdevinfo == INVALID_HANDLE_VALUE)
{
printf("SetupDiGetClassDevs: %u\n", GetLastError());
return 1;
}
for (n = 0;; n++)
{
devinterface.cbSize = sizeof(devinterface);
if (!SetupDiEnumDeviceInterfaces(hdevinfo, NULL, &hid_guid, n, &devinterface))
{
printf("SetupDiEnumDeviceInterfaces: %u\n", GetLastError());
break;
}
devdetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)devdetailbuffer;
devdetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
devinfo.cbSize = sizeof(devinfo);
if (!SetupDiGetDeviceInterfaceDetail(hdevinfo, &devinterface, devdetail, sizeof(devdetailbuffer), NULL, &devinfo))
{
printf("SetupDiGetDeviceInterfaceDetail: %u\n", GetLastError());
break;
}
if (IsEqualGUID(&devinfo.ClassGuid, &mouse_guid))
{
// This is a mouse
printf("DevicePath: %ws\n", devdetail->DevicePath);
}
}
return 0;
}
关于c++ - 有没有办法确定 Windows 计算机是否连接了触控板和鼠标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22995397/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/