How can I make this function not generate a "doesn't return a value on all paths" warning?
I realize this is a very specific question, and not very helpful outside of this scenario, although I am sure it applies to other questions with the same problem. I have a function to recursively search through windows (and their child windows) to find specific ones, it works exactly as expected, however it causes "function doesn't return a value on all paths" warning. This is the only warning in my entire program, and although it might be silly, I'm interested in knowing if there is a way to stop this error from occurring, but still allowing the function to work properly.
Public Function FindQWidgetWindows() As Integer
Dim hWndStart As Integer = 0
Dim WindowText As String = "*"
Dim Classname As String = "QWidget"
Dim hwnd As Integer
Dim sWindowText As String
Dim sClassname As String
Dim r As Integer
Static level As Integer
If level = 0 Then
If hWndStart = 0 Then hWndStart = GetDesktopWindow()
End If
level = level + 1
hwnd = GetWindow(hWndStart, GW_CHILD)
Do Until hwnd = 0
Call FindQWidgetWindows()
'Get the window text and class name'
sWindowText = Space$(255)
r = GetWindowText(hwnd, sWindowText, 255)
sWindowText = Microsoft.VisualBasic.Left(sWindowText, r)
sClassname = Space$(255)
r = GetClassName(hwnd, sClassname, 255)
sClassname = Microsoft.VisualBasic.Left(sClassname, r)
If (sWindowText Like WindowText) And (sClassname Like Classname) Then
Dim aRECT As RECT
开发者_如何学Python Dim hwndInt As Int32 = hwnd
GetWindowRect(hwndInt, aRECT)
FindQWidgetWindows = hwnd
'uncommenting the next line causes the routine to'
'only return the first matching window.'
'Exit Do'
End If
hwnd = GetWindow(hwnd, GW_HWNDNEXT)
Loop
level = level - 1
End Function
You rely on the fact, that VB automatically declares a return variable with the name of your function. This variable can be used as any other variable in your function. So it also can get a default initialization.
As already mentioned, you only assign a value in a very nested If
statement.
You should simply initialize your variable outside and before of your Do
-loop with something like
FindQWidgetWindows = Nothing
Yes, you can get rid of this error by ensuring every path returns a value.
This can be done by simply initialising the return value at the top of the function:
FindQWidgetWindows = Nothing
But you have another problem that you're probably not seeing because your desired window is at the top level. If you recurse into your function, the hWndStart
will once again be set to the desktop, not the child window.
In your code the below code will be executed only if the If
condition is satisfied.
FindQWidgetWindows = hwnd
Which also means if the If condition is not satisfied nothing will be returned.
You have declared the function (Public Function FindQWidgetWindows() As Integer
) as returning a integer but the function doesn't return anything. Just ensure that you return an integer using the Return
statement.
精彩评论