问题标签 [getwindowlong]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# 中的 GetWindowLong 与 GetWindowLongPtr
我像这样使用GetWindowLong:
但根据 MSDN 文档,我应该使用 GetWindowLongPtr 来兼容 64 位。 http://msdn.microsoft.com/en-us/library/ms633584(VS.85).aspx
GetWindowLongPtr 的 MSDN 文档说我应该这样定义它(在 C++ 中):
我曾经使用 IntPtr 作为返回类型,但是对于 LONG_PTR 的等价物,我到底要使用什么?我还看到在 C# 中这样定义 GetWindowLong:
什么是正确的,如何确保正确的 64 位兼容性?
winapi - 去掉窗口边框?
我有一个窗口,它周围有一个实心边框。如何使用SetWindowLong和GetWindowLong删除边框(所有非客户区) ?
c# - 如何在 32 位平台上调用 GetWindowLongPtr 和 SetWindowLongPtr?
我想 P/Invoke 到GetWindowLongPtr和SetWindowLongPtr,我看到关于它们的信息相互矛盾。
一些消息来源说,在 32 位平台上,GetWindowLongPtr 只是一个调用 GetWindowLong 的预处理器宏,而 GetWindowLongPtr 在 user32.dll 中不作为入口点存在。例如:
- SetWindowLongPtr的pinvoke.net 条目有一个静态方法,该方法检查 IntPtr.Size,然后调用 SetWindowLong 或 SetWindowLongPtr,并带有注释说“旧版操作系统不支持 SetWindowLongPtr”。没有解释“遗留操作系统”的含义。
- StackOverflow 上的答案指出“在 32 位系统上,GetWindowLongPtr 只是一个指向 GetWindowLong 的 C 宏”。
因此,这些来源似乎表明 *Ptr 入口点根本不存在于 user32.dll 版本中,例如 32 位 Windows 7。
但我在 MSDN 文档中没有看到任何迹象。根据 MSDN,SetWindowLongPtr取代了 SetWindowLong,简单明了。并且根据SetWindowLongPtr 页面的要求部分,似乎 SetWindowLongPtr 自 Windows 2000(客户端和服务器版本)以来一直存在于 user32.dll 中。同样,没有提到 32 位操作系统中缺少入口点。
我怀疑事实介于两者之间:当您告诉 C++ 编译器以较旧的操作系统为目标时(即,编译将在 Win9x 和 NT4 上运行的东西),然后头文件将 SetWindowLongPtr 声明为调用 SetWindowLong 的宏,但是入口点可能确实存在于 Windows 2000 及更高版本中,如果您告诉编译器以这些平台为目标,您将直接获得它(而不是宏)。但这只是一个猜测;我真的没有资源或专业知识来挖掘和验证它。
目标平台也可能发挥作用——如果您为 x86 平台编译应用程序,那么您不应该在 64 位操作系统上调用 SetWindowLongPtr。再说一次,我知道的足以思考这个问题,但我不知道如何找到答案。MSDN 似乎暗示 SetWindowLongPtr 总是正确的。
谁能告诉我简单地 P/Invoke 到 SetWindowLongPtr 并完成它是否安全?(假设 Windows 2000 及更高版本。) P/Invoking to SetWindowLongPtr 会给我正确的入口点:
- 如果我在 32 位操作系统上运行针对 x86 平台的应用程序?
- 如果我在 64 位操作系统上运行针对 x86 平台的应用程序?
- 如果我在 64 位操作系统上运行针对 x64 平台的应用程序?
winapi - 来自 GetWindowLong 和 GetWindowInfo 的未知扩展窗口样式值
我正在调用使用 GetWindowLog 属性查询窗口的扩展窗口样式,并且在许多情况下它返回的值未在 msdn 中记录。
特别是 0x00000800L 和 0x00000100L 或两者的组合。有没有人有关于这些值的信息,或者比 msdn 网站上记录的更完整的列表?
sendmessage - 来自其他窗口的控件名称
我需要从其他窗口读取文本值并将该值查询到另一个应用程序(我的问题将围绕第一个任务)......所以,我正在“监视”其他窗口(我们使用的一些与我们的产品相关的第 3 方应用程序) 并等待单击“接受”按钮以从文本框中读取值。这个另一个应用程序,对话框,有多个文本框和命令按钮。我制作了一个鼠标钩,并在此应用程序出现时激活它。我正在读取此窗口矩形内的所有鼠标移动;文本、标题、子窗口 ID、矩形、左/右/中/滚轮点击。我可以抓住“接受”按钮点击;我可以看到按钮标题,我可以读取该窗口,获取文本并确定单击了哪个按钮等。现在……我可以读取所有 EDIT 类值,获取它们的窗口句柄、矩形等,但我无法将它们识别为类集合中的唯一项目:我需要专门阅读我想要的文本框值。幸运的是,当我从 EDIT 类循环中读取文本时,我感兴趣的文本框总是首先出现在我的循环中。但是我想更具体一点;确保我正在阅读带有 NAME 的文本框。我知道。在开发过程中,我可以读取该名称并将其硬编码到程序中。我的怀疑是控件名称未保存在二进制代码中。我的理解是控件 ID、窗口句柄是在创建窗口时创建的,并且绝对不引用控件名称(例如:txtOrderNumber)。如果对于按钮,我可以因为按钮标题而具体化(因此,我可以确定单击了哪个按钮)我被 EDIT 类项目锁定,并且在读取值时被抛出幸运的第一个猜测。我的问题是:如何从另一个窗口获取控件名称,对于这个任务,我有兴趣了解 EDIT 类实例名称。以下是该项目的一些代码(缩短):
Dim hWnd As IntPtr = FindWindow(Nothing, _windowText)
'API:FindWindowEx 'API:SendMessage 'API:GetClassName 'API:GetWindowTextLength 'API:GetWindowText 'API:WM_GETTEXT
我查看了 GetWindowLong 和 GetDlgCtrlID API,并尝试了大多数标志,但到目前为止都没有成功......
任何提示,线索,方向表示赞赏。谢谢
c++ - winapi:移除装饰
这看起来像重复,但请先听我说。这更多的是在调试方面。我正在尝试使用此处的方法删除窗口的边框。
有哪些事情会使这些功能不起作用?使用隐藏窗口ShowWindow(Handle, SW_HIDE)
也不起作用。我已经制作了自己的 Window 类,其中包含许多功能,所以我不想在这里粘贴我的整个代码。
这是我的窗口初始化函数:
WindowProps
如您所见,包含有关正在创建的窗口的各种信息。我的类中还有一个HWND
指向窗口处理程序的指针变量。
这是我在 main 上尝试过的一些东西,其中 sw2 是指向我的窗口类的指针:
我只是想要一些关于在哪里调试我的代码的建议。我知道这些功能可以正常工作,因为我在一个更简单的窗口项目(Microsoft 的示例项目)上对其进行了测试。
visual-c++ - GetWindowLong 访问被拒绝
我尝试使用GetWindowLong API函数在另一个地址空间中获取另一个窗口的windowproc地址(GWL_WNDPROC),但是这个函数返回0并且GetLastErro是5(访问被拒绝)我以管理员身份运行我的程序并再次遇到这个问题,请帮助我?
操作系统:Win7 x86
c++ - WM_CTLCOLORSTATIC lParam, C++ WINAPI
I'm trying to include into my Dialog Window Procedure, that when the msg WM_CTLCOLORSTATIC is received that I get the ID of the Control that is sending the message.
Problem is... when I try to type-cast the lParam of WM_CTLCOLORSTATIC it returns the value 65535, which can't be correct; I don't even have a resource item with the maximum UINT ID 65535.
Can you give me any insight into why this is happening?
winapi - VB6 SetWindowLong 导致 Windows 7 64 位中的刷新问题
我仍然支持使用 GetWindowLong 和 SetWindowLong 在运行时根据设置删除 ControlBox 的旧 vb6 应用程序。这适用于所有 32 位系统,但是当它在 64 位系统上运行时,主窗口不再正确刷新。问题似乎是文本框、列表框或命令按钮等输入控件。在被某些窗口覆盖后,它们在获得焦点之前不会显示,即使这样它们的边框也不会正确显示。
我已阅读 MSDN 文档http://msdn.microsoft.com/en-us/library/ms633591%28v=vs.85%29.aspx说这些函数已被 ...WindowLongPtr 函数取代以兼容支持 32 位和 64 位系统。从我能读到的所有内容中,真正谈论的是编译 32 位和 64 位版本,而不是在不同的平台上运行。我试过改变我的声明
到
但我收到错误“在 user32 中找不到 DLL 入口点 GetWindowLongPtrA”。因此,我尝试将 Alias 保留为“...WindowLongA”并运行,并且正如我所料,刷新问题没有任何区别。
有没有其他人看到这个或有任何建议。
这是如何使用代码的示例。
谢谢
dbl
xml - Powershell 2 - 获取 WinEvent -FilterXML
您好 Powershell 专家,
我正在努力完成以下工作。获取过去 30 分钟内的 Windows 应用程序日志,日志消息中包含以下内容。“连接错误”
我不熟悉 Powershell 并且已经搜索并使用 -FilterXML 看起来是最快的解决方案,但是,我无法完成从错误日志中搜索“连接错误”的语法。
这就是我所拥有的。请告知我如何添加仅需要查找“连接错误”错误的部分。
预先感谢您的帮助。