gpt4 book ai didi

c# - 来自 P/Invoke 函数的奇怪行为 - 魔术循环

转载 作者:行者123 更新时间:2023-11-30 13:04:05 25 4
gpt4 key购买 nike

我的 C# 程序有一个非常奇怪的行为。我在这个程序中使用了四种“hacky”pinvoke 方法:GlobalKeyHooking、HotKey Registering、SetForegroundWindow/GetForegroundWindow 和 SendKeys.Send/SendWait。

这是我不理解的行为。我在一个程序中窃取了 Ctrl+V,在这个程序中,标准的剪切/复制和粘贴例程被列表框中出现和消失的自动完成列表所取代。在一些装有 Windows 7 的计算机上,我的程序运行得非常好,在另外 50% 的装有 Windows 7 的计算机上(遗憾的是没有 VS2010 可以调试它),一个非常奇怪的循环出现了 ---inside--- 一个方法。由于 Ctrl 和 V 本身被钩住,我已经阻止了该方法被无限触发。没关系。但是方法内部出现了另一个循环。

简而言之:myDebugValue 增加直到达到 23-24-25!所以在决定停止之前,某些东西会尝试执行一个函数很多次。

有没有人见过类似的意外循环?即使没有 try/catch block ,它也会在函数内部跳动。

某些 P/Invokes 函数是否会在某些 Windows 7 而不是其他 Windows 7 上崩溃?

P/Invokes 是否有自己的隐形低级汇编程序错误处理程序 try/catch,比我的 C# 程序执行更强大?

在视觉上,当它执行此操作时,我看到我的程序 UI 快速闪烁了很多次,我猜是 25 次。

    private bool getOutOfHere = false;

private int myDebugValue = 0;

private void globalKeyHooking_KeyUp(object sender, KeyEventArgs e)
{
if (getOutOfHere) return;
myDebugValue = 0;
if (e.KeyCode == Keys.LControlKey)
{
getOutOfHere = true;
SendKeys.SendWait("^v");
getOutOfHere = false;
myDebugValue++;
}
}

我尝试使用 2.0、3.0 和 4.0 进行编译,并且在相同的 4 台计算机上,在所有情况下,它仍然是相同的比率:50% 崩溃,50% 工作。

[编辑]

我真的认为 SendKeys.Send 在装有 Windows 7 的不同计算机上的行为不同。

最佳答案

不想回答我自己的问题,但总有第一次。我决定使用类似于 InputSimulator 的方法实现我的目标并避免使用 SendKeys。现在,一切都可以在所有机器上完美运行。

我看到 InputSimulator 与我所有使用 Windows 7 的机器兼容,并且使用 SendInput 而不是 SendMessage 或 SendKeys,所以我在我的应用程序中使用了 SendInput。

关于c# - 来自 P/Invoke 函数的奇怪行为 - 魔术循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com