OFN_ENABLEHOOK 修改 GetOpenFileName() 的外观

2023-12-13

为什么添加一个钩子过程(用OFN_ENABLEHOOK and OFN_EXPLORERflags) 到 GetOpenFileName() 会导致在 Windows 7 中显示不同的对话框(如果挂钩过程只是返回)FALSE不做任何事情?


Update:

显然用钩子获得 Vista/Windows 7 的外观是不可能的......有人可以证实或反驳这一点吗?


原因是 MS 完全重新组织了 Vista 的文件对话框。挂钩用于通过提供资源文件来扩展文件对话框。这给了定制者太多的权力。他们可以很容易地修改对话框的标准元素,事实上许多应用程序都这样做了。对话框的重组会破坏许多使用钩子的应用程序。这些会尝试操纵对话框中不存在的元素,或者以不同的方式实现。对话框的旧版本仍然可供此类应用程序“使用”。

你是对的,当你使用钩子时不可能获得新的外观。相反,您需要使用IFileDialog自定义自定义对话框的界面。这功能不太强大,但确实会导致外观和行为与对话框的标准部分更加一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OFN_ENABLEHOOK 修改 GetOpenFileName() 的外观 的相关文章

  • 有没有办法删除 FILE_FLAG_DELETE_ON_CLOSE?

    在我的应用程序中 我想使用 FILE FLAG DELETE ON CLOSE 打开一个临时文件 然而 在某些情况下 临时文件需要保留并且非常大 我想删除打开的句柄上的 FILE FLAG DELETE ON CLOSE 属性 这可能吗 复
  • 了解 GetDiBits。 C++

    MSDN 说位图用于GetDiBits在调用此函数之前不应将其选入 DC 但根据我的经验 与BitBlt 我知道除非选择了位图 否则我无法绘制位图 如何GetDiBits规避这个 我可以只使用未选择的 新创建的位图作为该函数的参数吗 Get
  • 注册表碎片整理程序[重复]

    这个问题在这里已经有答案了 这是出于好奇 但我见过几个 其中一些非常流行 称为注册表碎片整理程序的软件 虽然我可以看到它们提供的好处 但我很好奇您到底是如何进行注册表碎片整理的 请注意 我并不是要求提供软件名称 只是询问其如何以编程方式完成
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • 无法使用 C++ 中的 Window 蓝牙 API 连接到蓝牙设备

    我仅使用 Windows 的蓝牙 API 创建了一个程序 该程序列出范围内的蓝牙设备 然后搜索特定的蓝牙设备 HC 05 蓝牙模块 如果搜索成功 程序将验证并设置设备的服务状态 以使用串行端口 GUID 1101 创建虚拟端口 我的目标是以
  • 如何获取属于某个进程的打开句柄的计数?

    您可以使用该程序流程浏览器 http technet microsoft com en us sysinternals bb896653查看正在运行的应用程序有多少个句柄 有没有办法用Delphi代码来获取这个数字 我有兴趣跟踪应用程序本身
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • Windows 中的 JNA:使用 Windows 作业自动终止子进程

    我需要在 Windows 中的 java 应用程序中启动一个子进程 最终可以通过任务管理器杀死 终止我的 java 应用程序 因此 我需要将此子进程与父进程 链接 如果父进程终止 则两者都会终止 在 Windows API 中我们有创建作业
  • 无法从 Windows 注册表查询值

    我为 Windows 注册表编写程序并尝试从中查询值 但即使我以管理员权限运行自己的程序 我也无法读取所有参数并收到错误代码 5 某些值的访问被拒绝 但同时标准的注册表可以向我展示这个价值 我做错了什么 我有一个注册表类RegistryCl
  • win32 Python - pythoncom 错误 - ImportError: 没有名为 pywintypes 的模块

    我正在尝试导入 pythoncom 但它给了我这个错误 Traceback 最近一次调用最后 文件 F Documents and Settings Emery Desktop Python 27 Try 第 2 行 位于 导入python
  • 读取 .ini 文件 vb.net?

    我有一个具有读取 ini 文件功能的项目 我无法显示我想要的 ini 文件的内容 我的代码读取 ini 文件 Public Function GetSettingItem ByVal File As String ByVal Identif
  • 发送和接收 Windows 消息

    Windows 消息似乎是通知 Windows 操作系统上的应用程序的好方法 它实际上运作良好 但我想到了几个问题 How to指定结构化数据lparamSendMessage 例程 就像许多消息代码一样 我的意思是 参数当然是一个指针 但
  • GetDeviceCaps获取的物理屏幕尺寸不是我屏幕的实际物理尺寸

    在 Windows 7 下 我使用以下代码来获取屏幕的物理宽度 以毫米为单位 hSize 为 482 比实际尺寸约 310 用尺子测量 大得多 这是为什么 HDC screen GetDC NULL int hSize GetDeviceC
  • 是否可以合理地解决防病毒扫描工作目录的问题?

    我的 Win32 应用程序在运行时在指定的临时文件夹中执行大量磁盘操作 并且认真地重新设计它是不可能的 某些客户端具有扫描同一临时目录的防病毒软件 它只是扫描所有内容 我们试图说服他们禁用它 它不起作用 所以它也是不可能的 每隔一段时间 例
  • 检测 C++/Win32 中的进程崩溃

    我正在开发一个包含 2 个程序的软件 Qt Main exe OpenGL Game exe 我们一开始总是使用 Qt Main exe 当我们点击 开始游戏 按钮时 我们执行OpenGL Game exe 这样做没问题 问题是 有时我们的
  • 将第二个显示器显示设置更改为复制

    我正在尝试以编程方式使第二个监视器具有重复的显示 我的下面的功能应该将第二个显示器的显示更改为 重复显示 即使第二个显示器显示第一个 主显示器上的所有内容 我的问题 当我运行我的函数时 它成功找到第二个监视器 并通过更改 DEVMODE d
  • 将 CreateThread 与 lambda 结合使用

    只是试验 但我想知道是否可以使该代码工作 如编译 void main int number 5 DWORD dontThreadOnMe PVOID PVOID data int value int data cout lt lt valu
  • 如何获取重定向路径的实际路径?

    在 64 位上运行的 32 位进程会得到广义的由于文件重定向 指向重定向路径的路径 致电GetCurrentDirectory 例如 如果进程正在运行 Windows SysWOW64会得到结果 Windows System32 不过 很有
  • 在 win32 API 应用程序中实现全球化/多语言功能

    我用 Visual C 开发了一个窗口应用程序 Win32 API 我必须在此应用程序中添加多语言功能 任何人都可以指导我如何完成这项任务 Windows 上多语言应用程序的基础是 资源 的使用 资源是附加在可执行文件末尾的块 它仅包含数据
  • 命名管道端口号

    命名管道是否使用端口进行通信 我使用的命名管道 http msdn microsoft com en us library aa365150 28VS 85 29 aspx http msdn microsoft com en us lib

随机推荐