标签: wndproc

如何使用Windows窗体在Window Titlebar中绘制自定义按钮?

如何在表单的标题栏中最小化,最大化和关闭按钮旁边绘制自定义按钮?

我知道您需要使用Win32 API调用并覆盖WndProc过程,但我无法找到一个正常的解决方案.

有谁知道如何做到这一点?更具体地说,有没有人知道在Vista中有效的方法?

winapi titlebar wndproc windows-vista winforms

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

获取WM_NCHITTEST消息的坐标?

如何在C#代码中获取WM_NCHITTEST消息的坐标?
我很想获得最快的方式,因为性能是必需的.

c# wndproc winforms

7
推荐指数
3
解决办法
4103
查看次数

JAVA JNA WindowProc实现

我正在尝试用Java编写一个简单的应用程序,它将与USB设备通信.USB设备由我使用Microchip微控制器制造.通信相当简单,因为USB设备来自HID类,所以在计算机和设备之间交换64字节的数组.我的程序根据产品ID和供应商ID查找设备,可以写入和读取64个字节,但现在我想检测设备何时连接或断开与计算机的连接.

正如我在Microchip提供的C#程序中看到的那样,WndProc方法被覆盖并处理WM_DEVICECHANGE消息.我的问题是如何使用JNA在Java中完成,我如何覆盖WindowProc方法并处理消息,如果可能的话:),但我希望它是:D

提前谢谢你的答案.

的Gabor.

java wndproc jna

7
推荐指数
2
解决办法
5881
查看次数

拦截单击或双击鼠标 - 双击时只执行双击代码

我有一种情况,我在表单上处理单击和双击鼠标事件.在这两种情况下都必须加载某些内容,但是当发生双击时,我不希望执行附加到单击事件的代码.

有没有办法拦截鼠标点击并检查是否双重或单一,然后适当地执行正确的事件?

也许通过拦截窗户的WndProc或什么?

vb.net wndproc mouseevent mouseclick-event winforms

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

为什么Windows挂钩不会收到某些消息?

Microsoft不建议使用DirectInput进行键盘和鼠标输入.因此,我编写了一个输入管理器类,它使用SetWindowsHookEx挂钩到WndProc和GetMsg.我认为钩子设置得恰当,但它们看起来是各种问题的原因.

我的WndProc和GetMsg挂钩都不会收到实际WndProc正在接收的任何消息.我的输入管理器永远不会收到它需要的WM_INPUT,WM_ BUTTON,WM_MOUSEWHEEL和WM_KEY*消息.

是什么赋予了?

部分标题:

namespace InputManager
{
    class CInputManager
    {
        HWND m_Window;
        HHOOK m_WndProcHook;
        HHOOK m_GetMessageHook;
        static LRESULT CALLBACK WindowsProcedureHookProcedure(int Code, WPARAM WParameter, LPARAM LParameter);
        static LRESULT CALLBACK GetMessageHookProcedure(int Code, WPARAM WParameter, LPARAM LParameter);
        static LRESULT CALLBACK MessageHandler(HWND Window, UINT Message, WPARAM wParameter, LPARAM lParameter);
    };
}
Run Code Online (Sandbox Code Playgroud)

部分来源:

namespace InputManager
{
    bool CInputManager::Initialize(HWND Window)
    {
        m_Window = Window;

        // Hook into the sent messages of the target window to intercept input messages.
        m_WndProcHook = SetWindowsHookEx(WH_CALLWNDPROC, &(WindowsProcedureHookProcedure), NULL, GetCurrentThreadId()); …
Run Code Online (Sandbox Code Playgroud)

windows hook messages wndproc setwindowshookex

7
推荐指数
2
解决办法
2981
查看次数

通过PostMessage发送/接收字符串

虽然网上有一些资源可以解决这个粗略的话题,但我仍然没有找到适合我的答案.

我希望在我的VB.net进程和我的C++进程之间进行完全的通信.我希望能够将一个字符串发送到从C++的过程,但暂时我需要实现:

将字符串发送C++进程并进行处理.

这创造了一些我不确定的要点,但我会尽量保持这个简单......

VB中使用以下函数声明;

Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _
    ByVal hWnd As IntPtr, _
    ByVal Msg As UInteger, _
    ByVal wParam As IntPtr, _
    ByVal lParam As String _
) As Boolean
Run Code Online (Sandbox Code Playgroud)

并发送这样的消息;

PostMessage(hWnd, SM_PING, Nothing, "schlampe")
Run Code Online (Sandbox Code Playgroud)

使用以下方法声明来捕获C++中的消息;

LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Run Code Online (Sandbox Code Playgroud)

并测试我是否可以使用;

char buffer[50];
sprintf(buffer, "Received: %s", (char *)lParam);
MsgBox(buffer);
Run Code Online (Sandbox Code Playgroud)


我浏览了许多我认为没必要的细节,但是请问并将它给予你.

我的问题是消息 …

c++ vb.net winapi param wndproc

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

原生窗口:关闭时释放句柄

我目前正在为Microsoft Outlook开发C#.NET加载项. 加载项的目标是从Outlook即时搜索中捕获搜索输入,并在自定义窗格中显示我自己的搜索结果.

它运行得很好,并且通过使用本机窗口将Outlook窗口子类化,我得到了搜索字符串,它已经将它传递到我的面板中.

现在的问题是,当您关闭加载项时(通过" 文件 - >选项 - >加载项 - > COM加载项 ",而不是窗格中的X),加载项立即终止我不能searchboxWindow.ReleaseHandle()事先打电话 来恢复我的WndProc链.Outlook只是崩溃而没有任何明显的错误.

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    switch ((uint)m.Msg)
    {
        case WindowMessages.WM_DESTROY:
        case WindowMessages.WM_QUIT:
        case WindowMessages.WM_NCDESTROY:
            this.ReleaseHandle();
            return;

        case WindowMessages.WM_KEYUP:
        case WindowMessages.WM_LBUTTONDOWN:
        case WindowMessages.WM_RBUTTONDOWN:
            OnKeyUp();
            break;

        case WindowMessages.WM_EXITSIZEMOVE:
            OnResize();
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试收听一些应该在加载项关闭时调用的窗口消息,但这些消息仅在我以正常方式关闭Outlook时出现.

此外,主外接源文件中的事件,如AppDomain.CurrentDomain.ProcessExit,this.Shutdown((Outlook.ApplicationEvents_10_Event)this.Application).Quit不会被调用.

当加载项终止时,我可以听到什么事件(可靠地)被触发?有一些吗?如果没有,我有什么替代方案来解决我的问题?

c# outlook wndproc outlook-addin nativewindow

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

Win32在父窗口中捕获子窗口消息

在我的Win32应用程序中,子窗口由第三方SDK创建.窗口创建过程是透明的,我无法将WndProc方法与子窗口关联.我希望能够在父窗口中捕获子窗口消息.我怎样才能做到这一点?任何帮助将受到高度赞赏.

winapi mfc wndproc parent-child childwindow

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

WM_QUERYENDSESSION给我带来了麻烦

制作一个简单的应用程序,因此当用户退出Windows时,它当然会关闭应用程序.我们正在制作一个简单的USB警报应用程序,如果在用户注销时检测到USB,STOPS将关闭

到目前为止这是代码.

public Form1()
    {
        InitializeComponent();
    }

    private static int WM_QUERYENDSESSION = 0x11;
    private static bool systemShutdown = false;
    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        if (m.Msg == WM_QUERYENDSESSION)
        {
            //MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
            systemShutdown = true;
            m.Result = (IntPtr)0;
        }

        // If this is WM_QUERYENDSESSION, the closing event should be
        // raised in the base WndProc.
        m.Result = (IntPtr)0;
        base.WndProc(ref m);

    } //WndProc 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (systemShutdown)
        {
            systemShutdown …
Run Code Online (Sandbox Code Playgroud)

c# wndproc

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

WndProc消息= 49619 - 它是什么?

我正在调试wpf中的拖动错误并订阅了wndproc.我的消息ID为49619,wparam = 0,lparam = 0.我已经筋疲力尽了谷歌的努力,并且无法揭开这个窗口消息的名称.

如果你知道,那很好.如果您可以在其窗口消息列表中提供包含它的网站,那就更好了.

十六进制值= 0xC1D3

c# wndproc window-messages

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