相关疑难解决方法(0)

C#中的SetWindowsHookEx

我正试图挂钩第三方应用程序,以便我可以绘制到它的屏幕.在屏幕上绘图是容易的,我需要它没有帮助,但我似乎有使用问题SetWindowsHookEx来处理WH_GETMESSAGE.我无法弄清楚最后两个参数传递的内容.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowDrawer
{
    public partial class Form1 : Form
    {
        private delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);
        static IntPtr hHook;
        IntPtr windowHandle;
        uint processHandle;

        HookProc PaintHookProcedure;     

        [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        static extern System.IntPtr FindWindowByCaption(int ZeroOnly, string lpWindowName);

        [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetWindowsHookEx", SetLastError = true)]
        static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint …
Run Code Online (Sandbox Code Playgroud)

c# setwindowshookex wm-paint

10
推荐指数
2
解决办法
4万
查看次数

如何正确使用SetWindowsHookEx和CallNextHookEx

我可以正确设置一个Windows挂钩,但我对MSDN中的行"混淆"说"调用CallNextHookEx函数链接到下一个挂钩程序是可选的,但强烈建议;否则,其他已安装挂钩的应用程序将没有收到钩子通知,结果可能表现不正确.你应该调用CallNextHookEx,除非你绝对需要阻止其他应用程序看到通知."

我想成为一个优秀的编程公民并打电话给下一个钩子.但是,我的钩子程序看起来像这样:

LRESULT CALLBACK CBTProc(int code, WPARAM wp, LPARAM lp)
{
    if (code != HCBT_CREATEWND)
        {
                // What do I do here? It's not the event I requested so how do I pass it on?
        return 0;
    }

    // It's the code we want (create window)
        CallNextHookEx(...);
        ...
}
Run Code Online (Sandbox Code Playgroud)

那么,如果代码不是我感兴趣的代码,那么钩子程序会发生什么?我怎么称呼下一个钩子?

编辑:主要问题是从SetWindowsHookEx返回一个HHOOK,需要将其传递给CallNextHookEx函数.

更新:似乎在NT平台上忽略了hook参数:
http://msdn.microsoft.com/en-us/library/ms644974.aspx
http://www.klenotic.com/pl/null_hhook/

windows hook winapi

8
推荐指数
1
解决办法
2万
查看次数

自定义保存文件对话框与底层操作系统保存对话框C#类似

我一直在使用这个例子来自定义保存对话框,

http://www.codeproject.com/Articles/19566/Extend-OpenFileDialog-and-SaveFileDialog-the-easy

这很好用,我也可以自定义对话框.但是,我看到自定义对话框不遵循基础窗口样式.例如,如果我在Windows 7中,对话框将如下所示,

在此输入图像描述

这是一个来自word的保存对话框,它确实有很少的选项,如标签和东西.但外观与OS保存对话框相同.但是,带有上述链接的自定义保存对话框将如下所示,

在此输入图像描述

为什么它不遵循操作系统提供的?有办法处理这个吗?


好的,我研究了一下,并且到了可以使用Microsoft.WindowsAPICodePack.Dialogs的CommonSaveFileDialog并创建底层的Save对话框(它与Windows 7样式匹配).我安装了WindowsAPI shell包并使用CommonSaveFileDialog控件来创建这样的东西,

在此输入图像描述

标记为红色的控件实际上是CommonFileDialogLabel/CommonFileDialogTextBox/CommonFileDialogComboBox等,它们在这些API中提供.但现在我的问题是如何添加用户控件/自定义控件?我需要完全控制我添加的内容,因此它可以是用户控件.任何想法..请帮助谢谢.

c# windows winforms

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

如何在窗口中捕获数据

我的计算机上安装了桌面应用程序.当我启动一个程序时,某种窗口会被打开.让我们说,像这样(只是例子):

在此输入图像描述

所以,我想在C#中编写一个应用程序,它将找到这个窗口并从中捕获一些数据.

我应该看什么工具?我想走一条阻力最小的道路.

我需要从文本框中捕获图像,文本,还可以通过文本查找控件并单击它们.

c# windows

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

标签 统计

c# ×3

windows ×3

hook ×1

setwindowshookex ×1

winapi ×1

winforms ×1

wm-paint ×1