Skype API的VB.net通用问题



你好,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()在另一个块(或任何其他块,如Button)中,它不起作用。

我还试图在按下F7时设置一个变量,但当我在oSkype_CallStatus Sub.内时,该变量没有更新

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


异常和错误:

相册

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

0x80004005
E_FAIL
Unspecified 

好的,所以您的评论"Dim pCall As SKYPE4COMLib.Call"是您的问题。您需要创建一个具有全局范围的变量,即可以在任何地方访问。Dim或私有变量无法从其他子系统或任何想要使用它的东西访问。

试着在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中,每当出现问题时,您可以将其添加到catch/ignore或其他任何位置。如果在前一行执行断点/F9,这将非常有用(我添加了一条注释)。当您这样做时,它会准确地告诉您堆栈跟踪/错误。这样你就可以调试了。例如,如果您试图在整数为null或其他值时将某个值设置为null异常。它对我们在stackflow上也很有用,因为你可以向我们显示错误代码,我们可以调试它

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

希望这能有所帮助:D。

最新更新