草庐IT

c# - 向没有窗口的进程发送 WM_CLOSE 消息

开始一个进程-ProcessStartInfopsi=newProcessStartInfo("G:\\SampleWinApp.exe");psi.UseShellExecute=false;psi.CreateNoWindow=true;Processprcs=Process.Start(psi);发送WM_CLOSE使用PostMessageconstintWM_CLOSE=0x0010;publicvoidSendCloseSignal(Processproc){uintuiPid=(uint)proc.Id;boolbResult=EnumWindows(newWNDENUM

windows - 我并不总是收到 WM_LBUTTONDBLCLK

我正在编写一个使用WM_LBUTTONDBLCLK的应用程序(使用C++)。一切正常,但我并不总是收到DBLCLK消息。我经常收到两条WM_LBUTTONDOWN消息。我查看了鼠标位置-它没有移动。我查看了两个WM_LBUTTONDOWN消息之间的时间-它完全在GetDoubleClickTime()返回的值范围内我为WM_LBUTTONDOWN、WM_LBUTTONUP和WM_LBUTTONDBLCLK返回0。什么会导致这种情况?我很难过。PS:我试过WindowsXP和7-结果相同。 最佳答案 要触发WM_RBUTTONDBLC

c++ - 如何使用 WM_NCHITTEST 从子窗口 move 无边框的父窗口

所以我创建了这个带有自定义move和调整大小的弹出窗口,按住ctrl键并单击客户端中的任意位置以move和alt调整边界大小。问题是,现在我正在为这个窗口内部创建子窗口,这里它“出错”了。我找不到如何将消息发送到父窗口。这是我试过的。我在父窗口的wndproc中处理这些消息caseWM_NCHITTEST://determinesifthewindowshouldbemoving,sizingordon'tdoathingreturnDoHitTest(pWnd,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam));caseWM_NCLBUTTONDOW

捕捉 WM_DEVICECHANGE

如何知道WM_DEVICECHANGE的到来?WndProc被覆盖。我收到了所有消息,但没有一条是WM_DEVICECHANGE类型的。RegisterDeviceNotification使链接器提示找不到函数!所以我陷入了这个巫毒魔法。请帮忙。P.S.:当然,我已经用谷歌搜索和stackoverflowing(笑)所有这些东西大约8个小时了。intCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){LPTSTRlolclassname="lolclass";WNDC

c++ - 从 WM_CHAR 消息中获取扫描码

如何将通过WndProc中的WM_CHAR捕获的任何语言的字符转换为键盘扫描码?就像按下的按钮是x它会返回0x2d等等。 最佳答案 根据WM_CHAR,扫描码在lParam参数的第16-23位中文档,所以只需移位和掩码:intscanCode=(lParam>>16)&0xff;如果你有一个角色,你可以调用OemKeyScan,将扫描码放在低字节:charc='X';intscanCode=OemKeyScan(c)&0x0ff; 关于c++-从WM_CHAR消息中获取扫描码,我们在St

windows - 如何从 PreTranslateMessage(MSG*pMsg) 中的 WM_KEYDOWN 中提取字符

在从CView继承的PreTranslateMessage(MSG*pMsg)中的MFC应用程序中,我有这个:if(pMsg->message==WM_KEYDOWN)...WM_KEYDOWN中的字段已记录here.虚拟键VK_的值在pMsg->wParam中,pMsg->lParam包含几个字段,其中第16-23位是键盘扫码。所以在我的代码中我使用:constintvirtualKey=pMsg->wParam;constinthardwareScanCode=(pMsg->lParam>>16)&0x00ff;//bits16-23例如,在我的非美式键盘上,当我按下“#”字符时,

windows - 使用 WM_SHOWWINDOW 代替 ShowWindow() 来显示窗口

我正在尝试使用热键实用程序(或NirCMD等)的SendMessage功能来弹出隐藏窗口。例如,我可以通过发送0x0010(WM_CLOSE)来关闭窗口,但是当我尝试发送wParam为1和lParam为0的0x0018(WM_SHOWWINDOW)时,没有任何反应。我环顾四周,有人提示WM_SHOWWINDOW不起作用的几个地方,他们很高兴地接受了改用ShowWindow()的建议。但是我没有可用的ShowWindow();我只能发送Windows消息。但是ShowWindow()并不神奇,它肯定可以通过SendMessage-ingWM_SHOWWINDOW或幕后的东西来工作。如何通

C# 到 C++ 进程,WM_COPYDATA 传递带有字符串的结构

在c#程序中,我想使用WM_COPYDATA和SendMessage来与遗留的c++/cliMFC应用程序通信。我想传递一个包含字符串对象的托管结构。我可以找到与SendMessage一起使用的c++应用程序的句柄。我不知道的一点是如何在另一端编码和读取结构及其字符串。特别是因为它包含非blittables。大家觉得这可行吗?我会继续努力,但会感谢做过此类事情的人告诉我它是否行不通。这里有一些演示代码,如果它是一个c++/cli程序,它不难运行。但是,我希望它位于.Net类库中,以便可以轻松地重复使用。//Quickdemonstationcodeonly,notcorrectlyst

c# - Application.Quit() 方法无法清除进程

我已经看到很多从Google搜索返回的关于此的帖子,但其中引用的解决方案都没有为我解决这个问题。所以,我想我自己试试。在这段代码之后:PowerPoint.ApplicationpowerPoint=newMicrosoft.Office.Interop.PowerPoint.Application();powerPoint.Visible=Office.MsoTriState.msoTrue;Microsoft.Office.Interop.PowerPoint.Presentationppt=null;entercodehere我可以发出ppt.Quit();命令和Powerpoi

c# - 为什么 Microsoft.Office.Interop.Excel.Application.Quit() 让后台进程继续运行?

以下代码使MicrosoftExcel后台进程继续运行,直到我的程序退出:varexcelApplication=newApplication();varworkbooks=excelApplication.Workbooks;varworkbook=excelApplication.Workbooks.Open(file.FullName);workbook.Close();excelApplication.Workbooks.Close();excelApplication.Quit();Marshal.ReleaseComObject(workbook);Marshal.Rele