Articles of Windows

如何为RawInput HID设备获取人类可读的名字?

我正在将一个应用程序从DirectInput切换到RawInput进行游戏手柄处理,我想为每个游戏手柄提供一个可读的描述。 理想的是设备pipe理器中出现的设备文本,但USB产品描述也可以。 任何方法都应该没有pipe理员权限。 到目前为止,我已经find了一组线索 : HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEMregistry中似乎有一个文本字段,它与DirectInput提供的名称相同。 这不是完美的 – 我有一个游戏手柄,在设备pipe理器中出现英文,但在registry中列为氀。 有没有办法从WM_INPUT提供的HANDLE到设备pipe理器描述? HidD_GetProductString看起来很有希望,但我不知道如何从RawInput句柄获取Hid顶级集合句柄。 编辑:我有一个设备实例path(例如\\?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} ,这可能足以从SetupAPI中提取我需要的信息。如何达到这个给定的实例path?

文件句柄上的WaitForSingleObject?

当你用CreateFile()或_get_osfhandle()创build的句柄调用WaitForSingleObject()时会发生什么? 由于不值得解释的原因,我想使用WaitForSingleObject()来等待我用_get_osfhandle(fd)创build的HANDLE,其中fd来自对_open()的常规调用。 这可能吗? 我已经在实践中尝试过了,在一些机器上它按预期工作(HANDLE总是处于信号状态,因为你可以从中读取更多的数据),而在某些机器上, WaitForSingleObject()将会无限期地阻塞。 WaitForSingleObject()的MSDN页面表示它唯一支持的事情是“更改通知,控制台input,事件,内存资源通知,互斥量,进程,信号量,线程和等待定时器”。 另外,如果我在CRT文件描述符上使用CreateFile()而不是_get_osfhandle() ,会不一样?

Cygwin git ssh远程挂起

我发现一个奇怪的错误运行在我的Windows 7 64位系统与Cygwin(最新的一个从他们的主页)安装包括ssh代理等,并单独msysgit。 (Cygwinterminal: git version 1.9.5.msysgit.0 ) 当我尝试通过一个vpn隧道通过Cygwin推一个git repo时,它会在光标闪烁的时候冻结在这个位置: $ GIT_TRACE=1 git push live staging –verbose trace: built-in: git 'push' 'live' 'staging' '–verbose' trace: run_command: 'ssh' 'user@my-server.com' 'git-receive-pack '\''/home/remote/example.git'\''' Pushing to user@my-server.com:/home/user/my-server.git 首先,我认为我的SSH密钥有问题。 但是如果我通过ssh user@my-server.com直接连接到Cygwin中的服务器,它只是要求input密码,而我正在进入。 如果我只运行ssh 'user@my-server.com' 'git-receive-pack '\''/home/remote/example.git'\'''我看到所有的git分支/版本等 最后,我试图直接在mysysgit中运行命令git push live staging ,它工作正常。 但为什么它不通过Cygwin工作? 任何想法或提示我如何debuggingCygwin的冻结过程或我错过了什么?

WndProc中的64位exception会自动失败

在Windows 7 32位下运行时,以下代码会导致严重失败: void CTestView::OnDraw(CDC* /*pDC*/) { *(int*)0 = 0; // Crash CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here } 但是,如果我在Windows 7 64bit上尝试这个,我只是在输出窗口中得到这个: Test.exe中0x13929384的第一次机会exception:0xC0000005:访问冲突写入位置0x00000000。 Test.exe中0x77c6ee42的第一次机会exception:0xC0150010:当前正在执行的线程未激活正在激活的激活上下文。 这是什么原因? 我知道这是一个硬件exception( http://msdn.microsoft.com/en-us/library/aa363082.aspx ),但为什么在32位和64位下运行的差异呢? 我能做些什么来正确处理这些错误? 因为它们应该真正被困住和修复,而不是正在发生什么,Windows正在进行向应用程序发送消息,让它运行(所以用户和开发人员完全不知道实际发生的任何问题)。 更新:我们的常规崩溃报告软件使用SetUnhandledExceptionFilter但不会在x64中调用WndProc中的硬件exception。 有没有人有任何这方面的信息,或解决方法? Update2:我已经在Microsoft Connect上报告了这个问题: https://connect.microsoft.com/VisualStudio/feedback/details/550944/hardware-exceptions-on-x64-machines-are-silently-caught-in-wndproc-messages

VBScript SendKeys CTRL + LWIN + TAB?

我正在尝试编写一个简单的脚本来发送CTRL + WINDOWS KEY + TAB的组合键 。 下面的代码发送按键CTRL + ALT + TAB Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "^%{TAB}" 但是,当我尝试用LWIN (又名左窗口键)replace“%”(又名ALT键)时,它表示语法错误。 我尝试了以下,但没有运气: Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "^{LWIN}{TAB}" Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "^{LWIN}+{TAB}" Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys ^{LWIN}+{TAB} 我知道这与能够按住某些按键而按下其他按键有关,但是我似乎无法把它弄清楚。 可以使用CTRL + ESC以编程方式按下Windows键。 有没有办法将这个组合设置为名为LWIN的variables,然后使用上面的脚本之一?

XAMPP错误解决scheme? 我已经安装在我的Windows XP双引导机器上

我的系统是双启动, Win-XP专业版(32位)Win-7(64位) 。 我的XP操作系统上安装了XAMPP( C:/ XAMPP )。 我想使用相同的htdocs目录来testing我的Windows上的PHP也。 但是,当我在同一个目录安装XAMPP,我得到这个错误。 重要! 因为系统上激活的用户帐户控制(UAC)可能会限制XAMPP的某些function。 使用UAC,请避免将XAMPP安装到C:\ Program Files(x86)(缺less写权限)。 或者在此设置之后使用msconfig取消激活UAC。 有人能帮助我解决这个问题吗? 谢谢。

在Win32上如何开始使用Winforms风格的应用程序?

有一点背景:我主要是一名C ++程序员,但是我所做过的唯一的GUI工作就是.NET的WinForms平台。 我对Windows GUI编程完全陌生,尽pipePetzold出色的书,我感到非常困惑。 也就是说,大多数关于Win32入门的参考都是关于绘制线条,曲线和事物的 – 关于哪个(至less现在这个时候)我不在乎的话题。 我需要一个检查列表框,一个分离器和一个文本框 – 这些工作在Winforms域中需要不到10分钟的时间。 我build议使用WTL库,它提供了所有这三个控件的实现 – 但是我一直在简单的事情,例如让控制使用正确的字体 ,并获得高DPI工作正确 。 我已经花了两天时间了,我不禁想到这些东西比我所能find的更好。 Petzold的书很好,但从Windows 95开始就没有更新过,而且自从发行以来,应用程序应该如何正确开发,已经发生了很大的变化。 我想我正在寻找的是一本现代的Petzold书。 我在哪里可以find这样的资源,如果有的话?

在Windows上设置Python环境

如何在Windows电脑上设置Python环境,以便我可以开始编写和运行Python脚本,有没有安装捆绑软件? 还应该使用哪个数据库? 我应该提到,我正在使用这个基于Web的应用程序。 它需要Apache吗? 还是使用另一个http服务器? Python运行web应用程序的标准设置是什么?

Windows允许同时写入文件吗?

我创build了一个使用Qt写入文件的c ++程序。 这个程序很可能有多个实例,每个实例都通过本地networking访问文件。 我正在使用QFile::ReadWrite作为我的文件打开选项。 如果一个进程在这个模式下打开文件,我发现另一个进程也可以打开它进行写入。 我使用file.write(text)写入文件。 如果两个stream程都试图在同一时间做到这一点,会发生什么? Windows处理这个? 我想知道是否重新实现使用窗口的CreateFile(…)和使用0的sharemode是必需的? 谢谢。

为什么我不能按照这个顺序redirect到两个inputstream`0 <`和`3 <`?

当我尝试将多个文件redirect到多个stream时,如下例所示,一切都按预期工作: 3< stream3.txt 4< stream4.txt echo/ 类似这样的工作也与更多的stream和文件和其他命令比echo/甚至function块的代码。 即使使用保留的输出stream1和2似乎也能正常工作。 但是,一旦我按照给定的顺序对下列stream进行处理, 0< stream0.txt 3< stream3.txt echo/ 托pipe命令提示符实例立即closures。 当我改变stream的顺序,它再次正常工作: 3< stream3.txt 0< stream0.txt echo/ 那么为什么当我尝试inputredirect到stream0和3的顺序时, cmd实例意外终止? 我正在使用Windows 7(x64)。 当我尝试执行上述失败的inputredirect之前,我通过cmd打开一个新的命令提示符实例: cmd 0< stream0.txt 3< stream3.txt echo/ 我可以阅读出现的错误消息 – 假设文本文件包含其基本名称后跟换行符: 'stream3' is not recognised as an internal or external command, operable program or batch file. 当我执行以下操作时,我可以看到两个文件实际上都被redirect了: cmd /V 0< stream0.txt […]