草庐IT

WM_INPUT

全部标签

c++ - WM_KEYDOWN 消息未发送

我一直在尝试找出程序中的错误。我注意到,每当我按住向上和向左箭头键并按空格键时,我的WndProc永远不会接收或处理WM_KEYDOWN消息以及WPARAM为VK_SPACE。我有点好奇,所以我打开了Spy++并开始查看发送到我窗口的消息。我注意到,当我按住向左和向上箭头键并按另一个键(比如A)时,WM_KEYDOWN(以及WM_CHAR)消息会发送到我的窗口。但是,如果我按住向上和向左箭头键并按下空格键,则不会向我的窗口发送空格键命中的WM_KEYDOWN消息。这是什么原因?谁能证实这种行为? 最佳答案 发生这种情况是因为您的键盘

windows - npapi 插件如何从浏览器获取 WM_ACTIVATE 消息?

在Windows平台上,当我切换到另一个窗口时,浏览器将收到一条WM_ACTIVATE消息。无论如何将WM_ACTIVATE消息传递给插件?我试过NPP_HandleEvent,但它似乎根本不起作用。 最佳答案 对于WindowsNPP_HandleEvent()仅用于无窗口插件,默认情况下它们是有窗口的。因此,除非您明确选择无窗口,否则这就是NPP_HandleEvent()未被调用的原因。对于窗口插件,您需要子类化插件窗口以接收窗口消息(参见Mozillas测试插件源中的Subclass())。对于无窗口插件(应该是首选),WM

c++ - 当模态对话框处于事件状态时检测主应用程序窗口上的 WM_CLOSE 事件?

当模态对话框处于事件状态时,主应用程序窗口是否可以检测到WM_CLOSE事件?。如果没有,是否有任何方法可以检测到WM_CLOSE事件,因为对话框的事件处理程序也没有检测到它。要亲自观察此行为,请打开记事本的“关于”菜单,然后右键单击任务栏中的记事本图标并选择“关闭窗口”选项,它不会有任何效果。有谁知道在模态窗口处于事件状态时为应用程序捕获WM_CLOSE事件的方法吗? 最佳答案 当通过右键单击任务栏中的应用程序图标选择“关闭”时,不会发送WM_CLOSE。发生的事情是向应用程序的主窗口发送一个WM_SYSCOMMAND,其中wPa

c++ - 监听 WM_SYSCOMMAND 事件

我正在编写一个小的c++程序,它应该对sc_screensaver和sc_monitorpower事件使用react。这应该在后台运行,因此没有gui。因为我还没有使用WindowsAPI的经验,所以我为此苦苦挣扎。A已经在谷歌上搜索了很多,发现了很多我不理解或不起作用的方法。你们中的任何人都可以给我提示吗?我阅读了有关捕获wm_syscommand的内容,但这似乎很困难,因为我没有窗口。 最佳答案 获取消息的唯一方法是通过消息循环和窗口过程。如果您的程序没有可见的图形用户界面,您必须创建一个message-onlywindow为此

c++ - INPUT、INPUT_KEYBOARD、ip 未在此范围内声明

#includeintmain(){//Thisstructurewillbeusedtocreatethekeyboard//inputevent.INPUTip;//Pausefor10seconds.Sleep(1000*10);//Setupagenerickeyboardevent.ip.type=INPUT_KEYBOARD;ip.ki.wScan=0;//hardwarescancodeforkeyip.ki.time=0;ip.ki.dwExtraInfo=0;//Pressthe"F5"keyip.ki.wVk=0x74;//virtual-keycodeforthe

windows - gradle 为 windows 生成的 startScript 产生 "input line is too long"

使用版本:springBoot=1.2.3.RELEASEgradle=2.3当构建一个自执行的springBoot发行版(gradletaskbootRepackage)时,gradle在windows启动批处理中生成的类路径非常大,这导致windows中止启动脚本并出现错误“输入行太长”。如何解决此限制? 最佳答案 我通过将巨大的类路径缩短为简单的来操纵生成的windows启动批处理,找到了以下解决方案%APP_HOME%\lib\*从java6开始是允许的。startScripts{doLast{defwinScriptFil

c - WM_SYSCOLORCHANGE 消息的含义

来自documentation:WM_SYSCOLORCHANGEmessageissenttoalltop-levelwindowswhenachangeismadetoasystemcolorsetting.Applicationsthathavebrushesusingtheexistingsystemcolorsshoulddeletethosebrushesandre-createthemusingthenewsystemcolors.声明全局变量HBRUSHg_hBackground=NULL;在WM_CREATE消息处理程序中创建背景画笔caseWM_CREATE:g_h

c++ - 如何在不将 wm_paint 发送到子窗口的情况下使父窗口无效?

父子窗口大小相同。家长听着child的重绘当子重绘时,父重绘。所以我不能使用invalidate来清理父窗口,因为这会将wm_paint发送到子窗口,然后无限循环。如何在不使用invalidateRect、invalidateRgn等的情况下清理父窗口。或者,如何在不将wm_paint发送到子窗口的情况下使父窗口无效?谢谢! 最佳答案 您可以在您的窗口上设置WS_CLIPCHILDREN样式,或者尝试调用RedrawWindow将RDW_NOCHILDREN指定为最终参数的函数。这可能会做你想做的事,虽然这有点难说。

windows - WM_ERASEBKGND 后面没有跟 WM_PAINT

我的应用收到一条WM_ERASEBKGND消息,但不是后跟一条WM_PAINT消息。很自然地,我的应用程序会删除背景,然后只出现一个空白窗口。我在Vista下运行,但它也发生在XP下。我很确定这是我的错,但我该怎么做才能让Windows无法运行?我对这些消息相当确定,因为我正在使用Spy++观看。这是一个在MSVC2008下编译的C应用程序。 最佳答案 不要在您的WM_ERASEBKGND处理程序中调用BeginPaint/EndPaint。 关于windows-WM_ERASEBKGN

c++ - WM_MENUSELECT 未在 CFrameWndEx 窗口中处理

我试图在基于CFrameWndEx主框架窗口的VS2008(和VS2010)SDI项目中处理WM_MENUSELECT消息。我从VS2008向导(单个文档、“MFC标准”、“使用经典菜单”选项)创建了一个简单的项目,结果类似于(添加WM_MENUSELECT消息后):classCMainFrame:publicCFrameWnd{///...public:afx_msgvoidOnMenuSelect(UINTnItemID,UINTnFlags,HMENUhSysMenu);};和IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)BEGIN_MESSA