Skype API的一般VB.net问题

时间:2014-10-29 15:34:16

标签: vb.net skype4com

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

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

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

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

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


例外与错误:

Image Album

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

0x80004005
E_FAIL
Unspecified 

1 个答案:

答案 0 :(得分: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(我添加了注释),这将非常有用。当你这样做时,它会准确地告诉你堆栈跟踪/错误。那样你就可以调试了。例如,如果您尝试在整数为null或其他值时将某些内容设置为值,则为null异常。它对我们在stackflow上也很有用,因为你可以向我们展示错误代码,我们可以调试它。

评论喜欢"它没有工作"没有帮助我们帮助你。评论喜欢"它说x类异常。那是什么?"这将是非常有帮助的,自9/10以来,该异常类型的谷歌将为您提供答案。

希望这会有所帮助:D。