草庐IT

c++ - 是否可以通过 Windows 键(可能没有钩子(Hook))捕获 Windows 开始菜单弹出窗口?

我一直在研究输入事件系统。我映射了我自己键盘上的所有键、扫描码等,包括两个Windows键。当我按下它们时,程序成功地为它们接收了不同的按键事件,没有任何问题。然而,当我松开按键时,“开始”菜单会弹出,在Windows模式下隐藏程序,甚至在全屏模式下将其最小化。所以我的问题在于抑制它。Arma2,一款军事模拟器/游戏,允许将命令毫无问题地映射到这些键上。我必须在哪里catch那个事件?只要它有焦点,我可以为我自己的窗口做吗?只要它正在运行,我是否会被禁用的win-key卡住?还是别的?谷歌搜索主要是没有结果,因为Windowskey也指的是产品key,当我确实找到一些东西时,它通常会完

windows - 在 Windows .rc 文件/dll 中使用字符串类型的资源标识符

我们的代码库中有许多MFC扩展dll,其中许多在项目.rc文件(IDS_...、IDD_...、IDB_...等)中定义了嵌入式Windows资源。我们使用数字标识符来定义我们的资源,特别注意我们的资源ID不会在dll之间发生冲突,这需要一些管理来确保我们的开发人员不会使用相同的编号。我意识到字符串类型的资源标识符可能是一种简单的方法,这意味着我们可以为每个不同的dll中的每个资源定义唯一的标识符。我的问题是,这样做是否存在任何技术问题,例如:MFCdll/资源链是否仍能正常运行?VisualStudio资源编辑器还能用吗?我没有在MS技术说明中找到任何说明这将是一个问题的内容-我只是

windows - 假设 GetDC(hWnd) 作为 WM_CREATE 上的第一条指令被调用,对于窗口 hWnd,GetDC() 是否有可能返回 NULL?

假设GetDC(hWnd)作为WM_CREATE上的第一条指令被调用,对于窗口hWnd,GetDC()是否可能返回NULL?我担心GetDC()可能因资源不足而失败。当发生这种情况时,我应该检查错误吗?调用失败怎么办?Win32API函数会引发异常还是我应该引发异常? 最佳答案 GetDC()确实会失败,无论您何时何地调用它。在处理API时,您应该采取相当悲观的观点,并为任何API函数失败做好准备。正如您所建议的,失败的一个可能原因是系统资源耗尽,例如内核句柄、GDI对象等。所以你应该经常检查错误。不仅是GetDC(),对API函数

c++ - 如何访问尚未开始运行的挂起线程的堆栈?

我想更改新创建的远程线程的堆栈,但在调用CreateRemoteThread创建处于挂起状态的线程时,堆栈尚未分配。我在创建挂起线程后使用GetThreadContext获取ESP的地址,但如果我在VS调试器的反汇编窗口中查看此地址,它尚未分配。此外,每次使用WriteProcessMemory写入此地址都会失败。如何编辑新创建但挂起的远程线程的堆栈? 最佳答案 当你获得线程句柄时,它的堆栈被分配,(以及TIB结构)。MSVS调试器可能会显示错误信息,所以不要依赖它。我不确定线程​​上下文是否有正确的值,也许是稍后设置的。你应该使用

windows - 防止 WritePrivateProfileString 进入注册表

有没有办法禁止WritePrivateProfileString写入注册表,而是使用我们提供给它的ini文件?我从MSDN上看到,您可以禁用文件写入并专门使用注册表,但反之则不行。我想让我的程序保持可移植性,同时使用标准的winapi来存储配置数据(而不是创建新的东西)。谢谢 最佳答案 如果您的ini文件被映射到注册表,那么您显然已经将它添加到HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\IniFileMapping。删除该条目,您的ini文件将在您期望的位置结束。您的代码行在我的

windows - 跨进程共享位图

如何使用win32/mfc在windows中创建一个设备独立位图,它将在机器上运行的所有进程之间共享?寻找在WindowsXP/7机器上的所有进程之间共享DIB的最佳和最快的方法。进程应该能够锁定位图的内容并在该位图上进行绘图,其他进程也可以使用该位图进行读取。例如最初,此DIB将由主应用程序创建。当一些其他进程想要在这个进程上绘制一些东西时,可以锁定这个DIB的内容并在这个位图上绘制。如果某个其他进程想要读取这个位图的内容,可以锁定位图并读取位图。请提出时间复杂度和空间复杂度方面的最佳方法。空间复杂性意味着,一个进程想要在这个位图上绘制内容不需要复制本地内存中的所有内容并绘制,它应该

windows - lockResource() 返回一个指向未知结构的指针

我在Windows7上使用visualstudio2003。我正在尝试将二进制文件嵌入到Windows控制台应用程序(c++)中。我在资源脚本(.rc文件)中添加了以下行:SampleFileRCDATA"c:\\sample.zip"并且还添加了以下代码来访问该文件:HRSRChResource=FindResource(NULL,(LPCSTR)"SampleFile",RT_RCDATA);LPVOIDl=LockResource(hResource);现在,hResource是一个有效的句柄,LockResource也成功了,但是指针l指向某个结构,可能是一个header,后面

c - 将文本附加到编辑控件? (Windows API)

我用C语言创建了一个简单的窗体,并向其中添加了一些控件。但是对于编辑控件,我无法向其添加文本,就像列表框控件一样。我所能做的就是从编辑控件中获取文本,向其中添加所需的行,然后再次设置文本。这是我为完成这项工作而编写的代码。voidAddText(HWNDEditControl,char*NewData){intTextLen=GetWindowTextLength(EditControl);char*Result=malloc(TextLen+strlen(NewData)+1);if(Result==NULL)return;GetWindowText(EditControl,Resu

c++ - 文件关闭通知

我想知道另一个应用程序何时完成对文件的编辑。我知道FindFirstChangeNotification,ReadDirectoryChangesW和FileSystemWatcher类,但是我认为这些只能检测文件的创建和更改。这不会让我知道该文件是否还有将来要写入的内容。一种解决方案是等待以确保所有数据都已写入,但我觉得应该有更好的方法。我想知道写入文件的进程何时关闭它拥有的句柄,我想写一个FileSystemFilterDriver可能允许这样做,任何人都可以确认吗?或者提供我可以使用的另一种方法。我也不想依赖.net之类的东西,但我不排除它。非常感谢,提前。

c - Win32 中的 TIB 访问

深入研究与TIB(线程信息block)一起工作的Win32API函数的实现,例如:TLS访问函数:TlsAlloc、TlsFree、TlsSetValue、TlsGetValueGetLastError,SetLastError消息子系统:GetMessage、PeekMessage等通过读取fs:[0x18]选择器的内容,我们发现它们都访问了TIB,有时称为TEB(线程环境block)。OTOH这是不必要的,因为fs寄存器直接指向它。根据thisarticle我在实践中看到的是,fs寄存器保存了TIB结构开头的地址,而在偏移量0x18处它有一个指向自身的指针。间接访问TIB的原因可能