Articles of 消息

有人可以给我一个例子,说明如何select()提醒fd变成“ready”

我不知道为什么我很难find这个,但我正在看一些我们正在使用select()等待文件描述符的linux代码来报告它已经准备好了。 从select的手册页: select() and pselect() allow a program to monitor multiple file descriptors, waiting until one or more of the file descriptors become "ready" for some class of I/O operation 所以,这很好…我打电话给一些描述符select,给它一些时间的价值,并开始等待指示去。 文件描述符(或描述符的所有者)如何报告它已经“准备就绪”,使得select()语句返回?

无限的Windows消息循环

我在我的程序中有这个消息循环: while (true) { if (PeekMessage(&msg, window, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { MessageBox(NULL, L"Quit", L"", 0); break; } TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(); } } 这个循环不会结束。 即使主窗口消失,它也不会显示消息框。 这是WndProc代码: switch (msg) { case WM_CLOSE : DestroyWindow(hwnd); break; case WM_DESTROY : PostQuitMessage(0); break; default : return DefWindowProc(hwnd, msg, wParam, lParam); break; } […]

如何禁用Shift / Ctrl / Alt键的WM_KEYDOWN重复事件?

我有一个Windows应用程序对待Windows键事件。 该应用程序传达Windows消息。 当我按住Shift键时,重复发生WM_KEYDOWN消息。 即使按住Shift键,我也只想传达一个WM_KEYDOWN消息。 请你让我知道如何解决这个问题?

如何从C#中的工作线程发布UI消息

我正在用C#编写一个简单的Winforms应用程序。 我创build了一个工作线程,我希望主窗口响应完成工作的步骤 – 只需更改文本字段testField.Text =“就绪”中的某些文本即可。 我尝试了事件和callback,但是它们都是在调用线程的上下文中执行的,并且不能从工作线程执行UI。 我知道如何在C / C ++中做到这一点:从工作线程调用PostMessage。 我假设我可以从C#调用Windows API,但没有更多的.NET特定的解决scheme?

delphi:如何响应WM_SettingChange / WM_WinIniChange?

我需要知道什么时候我的应用程序WM_WININICHANGE WM_SETTINGCHANGE消息(以前称为WM_WININICHANGE )。 问题在于TApplication中的消息泵会在黑洞(默认处理程序)中将其发送出去 ,然后我才有机会看到它: procedure TApplication.WndProc(var Message: TMessage); … begin Message.Result := 0; for I := 0 to FWindowHooks.Count – 1 do if TWindowHook(FWindowHooks[I]^)(Message) then Exit; CheckIniChange(Message); with Message do case Msg of WM_SETTINGCHANGE: begin Mouse.SettingChanged(wParam); Default; <———————-*poof* down the sink hole end; … end; … end; 过程CheckIniChange()不会抛出任何我可以处理的事件, Mouse.SettingChanged()也不会。 一旦代码path达到Default ,它将被发送到DefWindowProc排水孔,永远不会再被看到(因为WndProc所做的第一件事是将Message.Result设置为零。 我希望分配一个处理程序TApplicationEvents.OnMessage事件: procedure TdmGlobal.ApplicationEvents1Message(var […]

我怎样才能让任务pipe理器杀死我的程序?

有没有办法保护我的Delphi应用程序不被Windows任务pipe理器(或其他像Process Explorer)杀死? 我认为Windows消息可以做到这一点(通过做一个钩子和拦截TerminateProcess消息)。 我想要一个这样的保护的例子。 卡巴斯基反病毒软件套件就是这样的; 我们不能在任务pipe理器中结束他们的进程。

MessageDialog ShowAsync在第二个对话框上抛出访问exception

我试图在Windows 8中实现再次尝试/取消对话框。对话框第一次显示罚款,但再次单击再次失败,我得到一个访问被拒绝exception调用ShowAsync。 我不知道为什么,但奇怪的是,有时代码工作正常,我没有得到例外,当我把断点。 这里真的很无能 这里是代码。 async void DismissedEventHandler(SplashScreen sender, object e) { dismissed = true; loadFeeds(); } private async void loadFeeds() { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { try { RSSDataSource rssDataSource = (RSSDataSource)App.Current.Resources["RSSDataSource"]; if (rssDataSource != null) { await rssDataSource.DownloadFeeds(); await rssDataSource.GetFeedsAsync(); } AdDataSource ads = (AdDataSource)App.Current.Resources["AdDataSource"]; if (ads != null) { await ads.DownloadAds(); […]

对于已销毁的窗口的待处理消息会发生什么情况?

当仍然有消息挂起的时候窗口被破坏会发生什么? 考虑以下情况: 有三个线程,A,B和C.线程C拥有一个窗口。 线程A和B使用SendMessage将消息发送到窗口。 来自A的消息首先到达。 当C处理来自A的消息时,它使用DestroyWindow销毁它的窗口。 线程B的消息会发生什么? 线程B对SendMessage的调用是否返回? 这在内部是如何工作的?

编程方式鼠标在另一个窗口中单击

是否可以通过编程方式在另一个窗口中单击某个位置,而无需将鼠标移动到该位置,即使窗口不在顶部? 我想发送一种消息到另一个窗口模拟鼠标点击一个位置。 我试图用PostMessage完成这个工作: PostMessage(WindowHandle, 0x201, IntPtr.Zero, CreateLParam(300,300)); PostMessage(WindowHandle, 0x202, IntPtr.Zero, CreateLParam(300,300)); 我这样做了CreateLParam函数: private static IntPtr CreateLParam(int LoWord, int HiWord) { return (IntPtr)((HiWord << 16) | (LoWord & 0xffff)); } 问题是窗口被locking在他的位置上。 我认为我的应用程序点击(1,1)坐标。 可以帮助我解决这个问题吗? 编辑:这是PostMessage: [return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32.dll")] public static extern bool PostMessage(IntPtr WindowHandle, int Msg, IntPtr wParam, IntPtr lParam); 而0x201和0x202分别是WM_LBUTTONDOWN和WM_LBUTTONUP。

用户locking屏幕的Windows消息

我正在用C ++编写老式Windows编程,我需要在我的WndProc中捕获一个表示用户已经注销或locking屏幕的事件。 更新 (谢谢David Hefernan)我到处search,但唯一发现的是WM_ENDSESSION消息 – 它不处理屏幕locking事件。 任何人都知道这是怎么做的? 我需要通过Windows XP的风格将其应用到Windows 2000。