Reputation: 699
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
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
Upvotes: 2
Views: 1341
Reputation: 881403
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.
Upvotes: 2
Reputation: 447
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
Upvotes: 4
Reputation: 11767
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.
Upvotes: 0
Reputation: 23016
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.
Upvotes: 0