你好,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。