Page 1 of 1

Simple Basic Script not working with vbNullString, why?

Posted: Sun Jul 03, 2016 7:39 am
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

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

Posted: Sun Jul 03, 2016 9:18 am
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.

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

Posted: Sun Jul 03, 2016 9:32 am
by Aselalagor
Намотал на ус. Спасибо! :)