Simple Basic Script not working with vbNullString, why?

Discuss RoboTask here
Post Reply
Aselalagor
Posts: 7
Joined: Tue Jun 14, 2016 8:57 am

Simple Basic Script not working with vbNullString, why?

Post by Aselalagor »

Code: Select all

Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
          (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Sub Main
  Dim FindWnd as Long

                    ' CalcFrame   Калькулятор   vbNullString

  FindWnd = FindWindow("CalcFrame", "Калькулятор")  '<<<<<  WORKS OK
  MsgBox Str(FindWnd)

  FindWnd = FindWindow(vbNullString, "Калькулятор") '<<<<< FindWnd = 0 !!!
  MsgBox Str(FindWnd)

  FindWnd = FindWindow("CalcFrame", vbNullString)     '<<<<< FindWnd = 0 !!!
  MsgBox Str(FindWnd)

End Sub
Last edited by Aselalagor on Sun Jul 03, 2016 9:38 am, edited 1 time in total.
Oleg
Site Admin
Posts: 3014
Joined: Thu Jan 01, 1970 1:00 am
Contact:

Re: Simple Basic Script not working with vbNullString, why?

Post by Oleg »

Because vbNullString or empty string ("") is not NULL value (as in C declaration)
Look at my script below. It works. I use a simple trick

Code: Select all

Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
          (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function FindWindow1 Lib "user32.dll" Alias "FindWindowA" _
          (ByVal lpClassName As Long, ByVal lpWindowName As String) As Long

Declare Function FindWindow2 Lib "user32.dll" Alias "FindWindowA" _
          (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long

Sub Main
  Dim FindWnd As Long

  FindWnd = FindWindow("ApplicationFrameWindow", "Calculator")  '<<<<<  WORKS OK
  MsgBox Str(FindWnd)

  FindWnd = FindWindow1(0, "Calulator") '<<<<< it works too
  MsgBox Str(FindWnd)

  FindWnd = FindWindow2("ApplicationFrameWindow",0)     '<<<<< it works too
  MsgBox Str(FindWnd)

End Sub
But pay attention that these functions can return different values.
The cause:
- only one window with class="ApplicationFrameWindow" and name="Calculator"
- several windows with class="ApplicationFrameWindow"
- several windows with name="Calculator"

I tested on Windows 10. Calc application is .NET application in this system and has more complex structure than native API application.
Oleg Yershov
Aselalagor
Posts: 7
Joined: Tue Jun 14, 2016 8:57 am

Re: Simple Basic Script not working with vbNullString, why?

Post by Aselalagor »

Намотал на ус. Спасибо! :)
Post Reply