我们有一个奇怪且非常罕见的问题,即人们无法在我们的产品运行时注销Windows服务器。系统是多应用的,都是MFC/C++。这些应用程序从管理服务运行,因此它们在注销后仍然存在。多年来,它在世界各地的大量安装中一直运行良好。我编写了一个测试应用程序来枚举所有窗口,向它们发送WM_QUERYENDSESSION消息,并在返回FALSE时停止。该测试是针对德国出现的问题重现的罕见案例之一进行的。它似乎总是一个不可见的IME(输入法编辑器)窗口是罪魁祸首,但IME窗口始终属于我们的MFC应用程序之一。我想我可以通过调用ImmDisableIME(-1)来解决单个应用程序的问题。但我正在寻找的是
我想从我的应用程序中调出电话拨号器。该应用程序是在dotnetcompactframework2.0中开发的,目标是在WindowsMobile6设备上运行。我不想从我的应用程序内部启动和处理调用。我只想通过按键调出本地电话拨号器。例如,当我想启动浏览器时,我会执行以下操作:System.Diagnostics.Process.Start("iexplore.exe","http://www.stackoverflow.com");我们将不胜感激。问候萨瓦尔凡 最佳答案 你试过吗:usingMicrosoft.WindowsMobi
我正在尝试获取其他应用程序中按钮的字体。当我尝试WM_GETFONT时,它返回0。这是我的代码:[DllImport("User32.DLL")]publicstaticexternIntPtrSendMessage(IntPtrhWnd,intMsg,intwParam,intlParam);IntPtrfx=SendMessage(button1.Handle,0x31,0,0);我知道问题的原因,它是由于FlatStyle属性查看此链接http://www.siao2.com/2008/09/26/8965526.aspx我该如何解决这个问题?我在Windows7下使用C#。
我正在尝试将自定义小部件插入到InternetExplorer8网址栏中,位于停止和重新加载按钮旁边。这只是我个人生产力的提升。IE框架这部分的“窗口模型”是一个“地址栏根”窗口,它拥有包含IE8网址栏的窗口:一个编辑框、一个组合控件以及停止和重新加载按钮。在另一个进程中,我创建了一个新的WS_CHILD窗口(具有自定义类名),它是IE的地址栏根窗口的父级,因此使其成为编辑框的同级窗口并停止/重新加载。我用HWND_TOP的hwndInsertAfter调用SetWindowPos以确保它出现在urlbar的“上方”(即“在”中)。这很好用,我看到我的窗口最初是在IEurlbar中绘制
我正在调用HtmlHelpAwinapi方法来显示我的应用程序的.chm。此方法立即返回一个HWND,并且帮助窗口显示为一个单独的窗口。除了窗口,我还为这个hwnd设置了一个计时器。我的问题是我需要知道此窗口何时关闭以终止计时器。我的第一个方法是尝试注册WndProc回调,但我不能这样做,因为我没有创建窗口,我只有对hwnd的引用。然后我尝试使用Hook(SetWindowsHookEx),但HOOKPROC不会将HWND作为参数传递给回调。此外,我需要知道这个hwnd的线程。有什么方法可以在HWND关闭或让WndProc等待WM_CLOSE消息时注册回调?
目标:在windows下关闭一个正在运行的32位GUI进程我可以访问可执行文件的路径名。此软件可能有多个拷贝在运行,但只有一个从唯一的可执行文件路径名启动。因为可以运行此可执行文件的多个实例,简单查看顶级窗口需要区分哪个可执行文件路径名实际负责该窗口...可能的方法:枚举进程&线程,然后使用PostThreadMessage(thread,WM_QUIT,0,0)这很有道理,但我担心用什么技术来区分“主线程”有这种方法的例子:Thisassumesthatthethreadwiththefirstcreationtimeismain.Thisusesa32-bitonlytrickto
我正在使用IWebBrowser2接口(interface)在父应用程序中加载嵌入式浏览器。我的代码被编译为dll,即浏览器组件在运行时通过插件接口(interface)动态加载。我遇到的问题是加载我的dll的应用程序捕获某些按键消息,因此它们没有到达我的IWebBrowser2实例。因此,我在我的dll中使用SetWindowsHookEx()API捕获这些消息。然后我如何将WM_KEYDOWN或WM_CHAR消息转发到我的IWebBrowser2实例,以便它们可以,例如用于在浏览器的聚焦文本框中输入文本? 最佳答案 我认为问题出
我想为外部应用程序的窗口(不是我的C#/WinForms程序的窗口)更改窗口可以调整到的强制Windows最大宽度。SM_CXMAXTRACK的GetSystemMetrics文档说:“具有标题和大小边框的窗口的默认最大宽度,以像素为单位。此指标指的是整个桌面。用户不能将窗口框架拖动到大于这些尺寸的尺寸。窗口可以通过处理覆盖此值WM_GETMINMAXINFO消息。”有没有办法在不处理WM_GETMINMAXINFO消息的情况下修改此SM_CXMAXTRACK值(系统范围或针对一个特定窗口)?可能是未记录的函数、注册表设置等?(或者:MINMAXINFO.ptMaxTrackSize的
我在.rc文件中定义了一个对话框:IDD_DIALOG_AUTHENTICATIONDIALOGEX0,0,214,138STYLEDS_SETFONT|DS_MODALFRAME|DS_SETFOREGROUND|DS_3DLOOK|DS_FIXEDSYS|WS_POPUP|WS_VISIBLE|WS_CAPTIONCAPTION"Dialog"FONT8,"MSShellDlg",400,0,0x1BEGINDEFPUSHBUTTON"Validate",ID_BTN_VALIDATE,102,117,50,14PUSHBUTTON"Exit",ID_BTN_EXIT,157,11
我正在为自定义对话框使用特殊的消息循环。当对话框打开并且窗口关闭时,我想达到下面的第二个if(msg.message==WM_CLOSE)。for(;;){if(PeekMessage(&msg,0,0,0,PM_NOREMOVE)){if(msg.message==WM_CLOSE){GetMessage(&msg,0,0,0);break;}else{if(GetMessage(&msg,0,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}if(msg.message==msgEnd)break;}}问题是此if中的代码从未达