Frustrated Guy
Frustrated Guy

Reputation: 699

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
            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

Answers (4)

paxdiablo
paxdiablo

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

WizzardsApprentice
WizzardsApprentice

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

Suresh Kumar
Suresh Kumar

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

Shoban
Shoban

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

Related Questions