标签: peekmessage

为什么在getmessage之前偷看消息?

为什么在Getmessage()创建消息队列之前需要peekMessage语句?

delphi winapi getmessage peekmessage idle-processing

9
推荐指数
2
解决办法
4178
查看次数

是否有像PeekMessage这样的函数不处理消息?

我试图无辜地打电话

PeekMessage(&msg, 0, WM_KEYDOWN, WM_KEYUP, PM_NOREMOVE | PM_NOYIELD);
Run Code Online (Sandbox Code Playgroud)

PeekMessage调用中的Windows Vista 64正在处理消息.结果是我将重新加入我的绘画调用以及各种其他代码.

绘画在我们的应用程序中可能需要几秒钟,因此我们添加了PeekMessage调用以查看用户是否按下了一个键,因此我们可以中断该绘画并启动下一个绘画.我们几乎没有意识到Windows可以开始处理我们的消息.将绘画的真实作品放在一个单独的线程中是一个重大的重构...我们试图看看是否按下了特定键,或者是否旋转了鼠标滚轮或鼠标按钮来中断渲染.

我已经尝试专门添加代码以防止重新入侵,然后将绘制消息重新注入队列等等.这些都是非常困难的,并且有些情况下它不能正常工作.

是否有一些我可以添加到PeekMessage调用的标志?我在MSDN上的文档中没有看到任何新内容.我真的需要一个PeekMessage不处理消息的东西.救命!

windows peekmessage windows-vista

3
推荐指数
1
解决办法
5089
查看次数

WinApi - PeekMessage 总是返回 False

我无法让 PeekMessage 工作。实际上,我希望它用消息淹没我,但它的返回值为 0。

我使用 WinForm,启动一个正在查看消息的后台线程并使用鼠标使用窗口。该窗口可以像往常一样使用,但无法查看任何消息。我究竟做错了什么 ?最后一个错误始终为 0。

[StructLayout(LayoutKind.Sequential)]
public struct NativeMessage
{
    public IntPtr handle;
    public uint msg;
    public IntPtr wParam;
    public IntPtr lParam;
    public uint time;
    public Point p;
    public override string ToString()
    {
        return handle + ", " + msg + ", " + wParam + ", " + lParam + ", " + time + ", " + p;
    }
}

[DllImport("user32.dll")]
public static extern int PeekMessage(out NativeMessage lpMsg, IntPtr window, uint wMsgFilterMin, uint wMsgFilterMax, uint …
Run Code Online (Sandbox Code Playgroud)

c# winapi peekmessage winforms

1
推荐指数
1
解决办法
4253
查看次数

通过CreateProcess启动应用程序,但似乎PeekMessage?

我有一个简单的(Windows)应用程序,使用CreateProcess函数启动另一个应用程序.然后通过使用EnumWindows和新创建的进程的进程ID获取正确的hwnd.

获得hwnd之后,我的应用程序的"主循环"开始了.此循环继续,直到CreateProcess启动的应用程序不再运行.

一切都运行得很好,直到我尝试使用PeekMessage来查看发送到我发起的应用程序的消息 - 似乎我的应用程序没有识别任何消息,但启动的程序(通过CreateProcess)正在运行像往常一样,做它应该做的一切......

我想要实现的,是删除某些消息被发送到应用程序,主要是各种F键(F1,F2..F12键),但如果可能的话,我想更改显示的菜单应用程序(我不知道我的意思是菜单的技术名称,它是你在右上角看到你点击应用程序图标的那个) - 我想添加一个小的'about'选项.

如果有人能够在我的代码中指出我做错了什么,或者为了阻止某些按键到达启动的应用程序更好的替代方案,我将非常感激.

提前谢谢了.:)

这是我目前的代码:

VOID PerformLaunch(LPWSTR lpAppName, LPTSTR lpCmdLine) {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    DWORD dwLoopExitCode = NULL;
    BOOL cpBool = FALSE;
    BOOL finishedLoop = FALSE;
    MSG message = { 0 };

    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
    ZeroMemory(&si, sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);

    cpBool = CreateProcess(lpAppName, lpCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
    if (!cpBool) {
        MessageBox(Game_HWND, L"Could not start process!", L"Error:", MB_OK | MB_ICONERROR);
    }

    //-- Enumerate windows until Game_HWND && Game_Hook are not …
Run Code Online (Sandbox Code Playgroud)

c++ createprocess peekmessage

1
推荐指数
1
解决办法
119
查看次数