1

你好 StackOverflow 社区,这是我的第一篇文章,但我已经阅读了一段时间。如果它不是真的很重要,我不会寻求你的帮助。我有一个你可能很容易解决的问题,这里是:

Public Class Form1
Public WithEvents oskype As New SKYPE4COMLib.Skype

'HOOK EVENTS
Private Sub kbHook_KeyDown(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyDown
    If Key = Keys.F7 Then
        'CODE HERE TO ANSWER SKYPE CALL
    End If
End Sub
End Class

在那里你看到我有一些代码来挂钩低级别的键(比如制作快捷方式),我想在按下 F7 时接听电话,但我不知道在这种情况下如何调用 API。

作为参考,我在这里展示了一个示例,说明如果 Skype 正在响铃,我如何自动接听电话:

'SKYPE CALLING EVENT
Private Sub oSkype_CallStatus(pCall As SKYPE4COMLib.Call, Status As SKYPE4COMLib.TCallStatus) Handles oskype.CallStatus
    If SKYPE4COMLib.TCallStatus.clsRinging Then
        pCall.Answer()
    End If
End Sub

问题是我不能在另一个块(或任何其他块,如按钮)中设置 pCall.Answer() 或 oskype.Answer(),它不起作用。

我还尝试在按下 F7 时设置一个变量,但是当我在 oSkype_CallStatus Sub 中时,该变量没有更新。

任何帮助或提示都会很棒,在此先感谢您。顺便说一句,代码更长,但我认为这足以让您理解我的问题。


异常和错误:

相册

我还检测到错误代码,即 HResult = -2147467259 但它变成了未指定的代码:

0x80004005
E_FAIL
Unspecified 
4

1 回答 1

0

好的,所以您的评论“Dim pCall As SKYPE4COMLib.Call”是您的问题。您需要创建一个具有全局范围的变量,即可以在任何地方访问。其他潜艇或任何想要使用它的人都无法访问昏暗或私有变量。

尝试在 sub 之外声明它,就像你的 oskype 一样。

Public Class Form1
Public WithEvents oskype As New SKYPE4COMLib.Skype
Public pCall as New SKYPE4COMLib.Call

'HOOK EVENTS
Private Sub kbHook_KeyDown(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyDown
 If Key = Keys.F7 Then
    Try 
       pCall.Answer()
    Catch ex as Exception  'BreakPoint Here
    End Try

   End If
End Sub

注意到我添加的 try/catch 了吗?在 Vb.net 中,您可以将其添加到捕获/忽略或任何问题发生时。如果您在 ex 行执行断点/F9,这将非常有用(我在上面添加了注释)。当你这样做时,它会准确地告诉你堆栈跟踪/错误。这样就可以调试了。例如,如果您在整数为空或其他任何情况下尝试将某些内容设置为值,则会出现空异常。它对我们在 stackflow 上也非常有用,因为您可以向我们展示错误代码,我们可以对其进行调试。

像“它不起作用”这样的评论对我们没有帮助。像“它说 x 类型的异常。那是什么?”之类的评论 这对你真的很有帮助,因为 9/10 这种异常类型的谷歌会给你答案。

希望这会有所帮助:D。

于 2014-10-29T17:36:28.927 回答