- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有时我会收到客户的错误报告,但我无法解释。在 Delphi 中的 Application.Run() 之后,我收到以下错误:
EOSError: System error: Code:_5 Access denied
Call Stack Information:
-------------------------------------------------------------------
|Address |Module |Unit |Class |Procedure |Line |
-------------------------------------------------------------------
|Running Thread: ID=4352; Priorität=0; Klasse=; [Main Thread] |
|-----------------------------------------------------------------|
|772B291F|USER32.dll | | |GetKeyState | |
|772B7B96|USER32.dll | | |GetPropA | |
|772B7B5A|USER32.dll | | |GetPropA | |
|772A7BC5|USER32.dll | | |DispatchMessageA| |
|772A7BBB|USER32.dll | | |DispatchMessageA| |
|00A6D804|Program.exe|Program.dpr| | |803[369]| // Application.Run
-------------------------------------------------------------------
和
EOsError: A call to an OS function failed
Call Stack Information:
-------------------------------------------------------------------
|Address |Module |Unit |Class |Procedure |Line |
-------------------------------------------------------------------
|Running Thread: ID=2712; Priorität=0; Klasse=; [Main Thread] |
|-----------------------------------------------------------------|
|7E379758|USER32.dll | | |GetCursorPos | |
|7E379ED9|USER32.dll | | |GetKeyState | |
|7E37B3FC|USER32.dll | | |CallNextHookEx | |
|7E380078|USER32.dll | | |GetPropA | |
|7E380042|USER32.dll | | |GetPropA | |
|7E3696C2|USER32.dll | | |DispatchMessageA| |
|7E3696B8|USER32.dll | | |DispatchMessageA| |
|00A6E823|Program.exe|Program.dpr| | |803[369]| //Application.Run
-------------------------------------------------------------------
在这两种情况下,从 Eurekalog 提交的屏幕截图都是全黑的。
任何人都可以解释一下,什么会导致 GetCursorPos 或 GetKeyState 以这种方式失败?
最佳答案
GetCursorPos
的文档说:
The input desktop must be the current desktop when you call GetCursorPos. Call OpenInputDesktop to determine whether the current desktop is the input desktop. If it is not, call SetThreadDesktop with the HDESK returned by OpenInputDesktop to switch to that desktop.
您可能会遇到这种情况,最常见的是在解锁工作站时。在我的代码中,我将 GetCursorPos
替换为以下变体:
function GetCursorPos(var lpPoint: TPoint): BOOL; stdcall;
(* The GetCursorPos API in user32 fails if it is passed a memory address >2GB
which breaks LARGEADDRESSAWARE apps. We counter this by calling GetCursorInfo
instead which does not suffer from the same problem.
In addition we have had problems with GetCursorPos failing when called
immediately after a password protected screensaver or a locked workstation
re-authenticates. This problem initially appeared with XP SP1 and is brought
about because TMouse.GetCursorPos checks the return value of the GetCursorPos
API call and raises an OS exception if the API has failed.
*)
var
CursorInfo: TCursorInfo;
begin
CursorInfo.cbSize := SizeOf(CursorInfo);
Result := GetCursorInfo(CursorInfo);
if Result then begin
lpPoint := CursorInfo.ptScreenPos;
end else begin
lpPoint := Point(0, 0);
end;
end;
您可以使用您最喜欢的代码 Hook 机制来替换 GetCursorPos
。我这样做是这样的:
RedirectProcedure(@Windows.GetCursorPos, @CodePatcher.GetCursorPos);
使用RedirectProcedure
,如下所述:Patch routine call in delphi
事实证明,对于我的特定场景,GetCursorPos
会失败,但 GetCursorInfo
不会失败。但正如评论中指出的那样,在某些情况下 GetCursorInfo
也会失败。在这种情况下,您可能会发现安排修补后的函数不返回 False
是很方便的。
至于GetKeyState
,我不确定。它很可能很相似,但 GetKeyState
是一个我个人并不熟悉的 API。
关于delphi - 解释 GetKeyState/GetCursorPos 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20142166/
我在使用 GetCursorPos 时遇到问题。我使用 directx 在光标所在的位置绘制一个正方形,但我的代码不起作用,我也不知道为什么... LPPOINT cursorPos = 0; Get
有时我会收到客户的错误报告,但我无法解释。在 Delphi 中的 Application.Run() 之后,我收到以下错误: EOSError: System error: Code:_5 Acce
我在 MSDN forum 上看到了一个帖子32 位与 64 位整数存在问题。我不确定这是否是我的问题,但似乎这段代码应该可以工作,所以我有点困惑。 我在 Windows 7 64 位中以兼容模式 (
在下面的代码中,我想要鼠标光标在屏幕上的位置,但是无论我将光标移动到哪里,我都会从下面的第二个加星号或粗体(不确定)部分(无论光标在哪里)得到相同的输出:-1957298293 343277548。如
当我尝试在 Windows Vista/7 登录屏幕上使用 SetCursorPos 时,返回了 true,这起初让我认为它正在工作。但是,当我调用 GetCursorPos 时,它会给我: -858
到目前为止,我已经成功获取了 x 和 y 坐标。 面板代码内。 POINT cursorPos; GetCursorPos(&cursorPos);
我正在编写一些代码(在 Codelite 中),使用的是 GetCursorPos(),没问题。但是当我想调用 GetPhysicalCursorPos() 时,它说它没有在此范围内声明... 与 S
我正在开发一个涉及远程控制的应用程序。键盘和鼠标状态每秒更新约 100 次,保存在数组中,在 Internet 上发送并复制。需要完美的再现时机。从现在开始,我只编写了键盘部分的代码,实际上它比 Wi
当使用 pywin 的 win32api 时,我得到的光标位置值不正确。我的屏幕分辨率是 1920x1080,但是当我使用 GetCursorPos() 时,我在左上角有 (0,0),在右下角有 (1
当使用 pywin 的 win32api 时,我得到的光标位置值不正确。我的屏幕分辨率是 1920x1080,但是当我使用 GetCursorPos() 时,我在左上角有 (0,0),在右下角有 (1
当使用 pywin 中的 win32api 时,我得到的光标位置值不正确。我的屏幕分辨率是 1920x1080,但是当我使用 GetCursorPos() 时,左上角有 (0,0),右下角有 (153
背景我们正在将基于 PythonOgre 的游戏移植到 Mac,发行商要求鼠标能够离开窗口。在 Windows 上,我们使用 OIS(面向对象输入系统)来实现鼠标控制;也就是说,我们不让 OIS 将鼠
当应用程序在 Server 2008(而非 R2)上运行时,我们发现它有不良行为。这是一个 WinForms 应用程序,无论鼠标在屏幕上的哪个位置,Control.MousePosition 都会返回
在 Qt 中,当我使用 QPixmap::grabWindow(hwnd,x,y,h,w) 函数时,与使用 windows api 函数 GetCursorPos 和 GetWindowRect 的坐
我编写了以下代码来设置键盘光标位置。但得到垃圾。任何线索,我错过了什么? var ffi = require('ffi'); var ref = require('ref'); var Struct
有时我的应用程序会出现以下错误。 通常,当用户离开办公 table 而我的程序处于打开状态时,就会发生这种情况。当他们回来时,出现了这个错误。 TMouse.GetCursorPostion 除了对
我是一名优秀的程序员,十分优秀!