Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 12
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

Peter, Vasant or Chip:

I have finally tested the code discussed in prior posts regarding closing an
external application with VBA Code. I have successfully executed the "Send
and Wait" command for the "Calc.exe" Test use of API calls and monitoring.
Once the program is clsoed a message appears, which communicates that the
program has been closed.

I am currently at the following step and am having diffuculty. I need to
find a particular window and close the application associated with the
window after a search and data transfer to excel (this will occur about 30
times, so this many windows will have to be closed). I have reviewed the
following code from Chip Pearson (I believe), but am having difficulty. I
believe that I need to find the specific classname and window name
associated with the "FindWindowA" function. This is shown in the code below,
but I cannot get it to execute. Please send any informatin that may assist
in my efforts. Example code will be very useful! Many thanks in advance!

Kind Regards,

ZABU


Code located on the Google Groups:

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
Public Const WM_NCDESTROY = &H82


Sub CloseWindow()
Dim HWnd As Long
'Dim lpClassName As String
'Dim lpWindowName As String

HWnd = FindWindow("CabinetWclass", "Baytek WinBLISS")
If HWnd 0 Then
SendMessage HWnd, WM_NCDESTROY, 0, 0
End If
End Sub


  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 115
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

Hi ZABU,

It is strange that your code works for me.
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam
As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Const WM_CLOSE = &H10
Private Const WM_DESTROY = &H2
Private Const WM_NCDESTROY = &H82


Sub CloseWindow()
Dim HWnd As Long
'Dim lpClassName As String
'Dim lpWindowName As String

HWnd = FindWindow("SciCalc", "Calculator")
If HWnd 0 Then
SendMessage HWnd, WM_CLOSE, 0, 0
End If
End Sub

What is your problem, can not close the window or can not find the window?

Best regards,

Peter Huang
Microsoft Online Partner Support

Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7,247
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

Zabu,

What specific problems are you having? Are you sure that you are
using the correct class name and window name for the call to
FindWindow (use Spy++ to find out the proper values)? Does the
window not respond to the sent messages?


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"ZABU" wrote in message
...
Peter, Vasant or Chip:

I have finally tested the code discussed in prior posts

regarding closing an
external application with VBA Code. I have successfully

executed the "Send
and Wait" command for the "Calc.exe" Test use of API calls and

monitoring.
Once the program is clsoed a message appears, which

communicates that the
program has been closed.

I am currently at the following step and am having diffuculty.

I need to
find a particular window and close the application associated

with the
window after a search and data transfer to excel (this will

occur about 30
times, so this many windows will have to be closed). I have

reviewed the
following code from Chip Pearson (I believe), but am having

difficulty. I
believe that I need to find the specific classname and window

name
associated with the "FindWindowA" function. This is shown in

the code below,
but I cannot get it to execute. Please send any informatin

that may assist
in my efforts. Example code will be very useful! Many thanks

in advance!

Kind Regards,

ZABU


Code located on the Google Groups:

Public Declare Function SendMessage Lib "user32" Alias

"SendMessageA" _
(ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As

Long, lParam As
Any) As Long
Public Declare Function FindWindow Lib "user32" Alias

"FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String)

As Long

Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
Public Const WM_NCDESTROY = &H82


Sub CloseWindow()
Dim HWnd As Long
'Dim lpClassName As String
'Dim lpWindowName As String

HWnd = FindWindow("CabinetWclass", "Baytek WinBLISS")
If HWnd 0 Then
SendMessage HWnd, WM_NCDESTROY, 0, 0
End If
End Sub




  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 12
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

That is correct. I do not know the correct class name and am not completely
sure of the window name - unless that is the text in teh title bar of the
window. The window does not respond to the sent message to close. And
further, I am not sure what exit code the window I am trying to close will
accept. Do you have any tools that will give the class knowing the title of
the window and how to determine the exit code?

Thanks in advance!

ZABU
"Chip Pearson" wrote in message
...
Zabu,

What specific problems are you having? Are you sure that you are
using the correct class name and window name for the call to
FindWindow (use Spy++ to find out the proper values)? Does the
window not respond to the sent messages?


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"ZABU" wrote in message
...
Peter, Vasant or Chip:

I have finally tested the code discussed in prior posts

regarding closing an
external application with VBA Code. I have successfully

executed the "Send
and Wait" command for the "Calc.exe" Test use of API calls and

monitoring.
Once the program is clsoed a message appears, which

communicates that the
program has been closed.

I am currently at the following step and am having diffuculty.

I need to
find a particular window and close the application associated

with the
window after a search and data transfer to excel (this will

occur about 30
times, so this many windows will have to be closed). I have

reviewed the
following code from Chip Pearson (I believe), but am having

difficulty. I
believe that I need to find the specific classname and window

name
associated with the "FindWindowA" function. This is shown in

the code below,
but I cannot get it to execute. Please send any informatin

that may assist
in my efforts. Example code will be very useful! Many thanks

in advance!

Kind Regards,

ZABU


Code located on the Google Groups:

Public Declare Function SendMessage Lib "user32" Alias

"SendMessageA" _
(ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As

Long, lParam As
Any) As Long
Public Declare Function FindWindow Lib "user32" Alias

"FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String)

As Long

Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
Public Const WM_NCDESTROY = &H82


Sub CloseWindow()
Dim HWnd As Long
'Dim lpClassName As String
'Dim lpWindowName As String

HWnd = FindWindow("CabinetWclass", "Baytek WinBLISS")
If HWnd 0 Then
SendMessage HWnd, WM_NCDESTROY, 0, 0
End If
End Sub






  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

If you shout Peter and Paul doesn't turn around, it shouldn't be a mystery.

Chip said:
(use Spy++ to find out the proper values)?

exit codes are issued by the application - you don't send an exit code to
the application.

--
Regards,
Tom Ogilvy

"ZABU" wrote in message
...
That is correct. I do not know the correct class name and am not

completely
sure of the window name - unless that is the text in teh title bar of the
window. The window does not respond to the sent message to close. And
further, I am not sure what exit code the window I am trying to close will
accept. Do you have any tools that will give the class knowing the title

of
the window and how to determine the exit code?

Thanks in advance!

ZABU
"Chip Pearson" wrote in message
...
Zabu,

What specific problems are you having? Are you sure that you are
using the correct class name and window name for the call to
FindWindow (use Spy++ to find out the proper values)? Does the
window not respond to the sent messages?


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"ZABU" wrote in message
...
Peter, Vasant or Chip:

I have finally tested the code discussed in prior posts

regarding closing an
external application with VBA Code. I have successfully

executed the "Send
and Wait" command for the "Calc.exe" Test use of API calls and

monitoring.
Once the program is clsoed a message appears, which

communicates that the
program has been closed.

I am currently at the following step and am having diffuculty.

I need to
find a particular window and close the application associated

with the
window after a search and data transfer to excel (this will

occur about 30
times, so this many windows will have to be closed). I have

reviewed the
following code from Chip Pearson (I believe), but am having

difficulty. I
believe that I need to find the specific classname and window

name
associated with the "FindWindowA" function. This is shown in

the code below,
but I cannot get it to execute. Please send any informatin

that may assist
in my efforts. Example code will be very useful! Many thanks

in advance!

Kind Regards,

ZABU


Code located on the Google Groups:

Public Declare Function SendMessage Lib "user32" Alias

"SendMessageA" _
(ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As

Long, lParam As
Any) As Long
Public Declare Function FindWindow Lib "user32" Alias

"FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String)

As Long

Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
Public Const WM_NCDESTROY = &H82


Sub CloseWindow()
Dim HWnd As Long
'Dim lpClassName As String
'Dim lpWindowName As String

HWnd = FindWindow("CabinetWclass", "Baytek WinBLISS")
If HWnd 0 Then
SendMessage HWnd, WM_NCDESTROY, 0, 0
End If
End Sub










  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

This article should get you going on finding the information you need:


http://support.microsoft.com/default...b;en-us;147659
HOWTO: Get a Window Handle Without Specifying an Exact Title

(in case you don't have spy++ from visual studio)

--
Regards,
Tom Ogilvy


"ZABU" wrote in message
...
That is correct. I do not know the correct class name and am not

completely
sure of the window name - unless that is the text in teh title bar of the
window. The window does not respond to the sent message to close. And
further, I am not sure what exit code the window I am trying to close will
accept. Do you have any tools that will give the class knowing the title

of
the window and how to determine the exit code?

Thanks in advance!

ZABU
"Chip Pearson" wrote in message
...
Zabu,

What specific problems are you having? Are you sure that you are
using the correct class name and window name for the call to
FindWindow (use Spy++ to find out the proper values)? Does the
window not respond to the sent messages?


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"ZABU" wrote in message
...
Peter, Vasant or Chip:

I have finally tested the code discussed in prior posts

regarding closing an
external application with VBA Code. I have successfully

executed the "Send
and Wait" command for the "Calc.exe" Test use of API calls and

monitoring.
Once the program is clsoed a message appears, which

communicates that the
program has been closed.

I am currently at the following step and am having diffuculty.

I need to
find a particular window and close the application associated

with the
window after a search and data transfer to excel (this will

occur about 30
times, so this many windows will have to be closed). I have

reviewed the
following code from Chip Pearson (I believe), but am having

difficulty. I
believe that I need to find the specific classname and window

name
associated with the "FindWindowA" function. This is shown in

the code below,
but I cannot get it to execute. Please send any informatin

that may assist
in my efforts. Example code will be very useful! Many thanks

in advance!

Kind Regards,

ZABU


Code located on the Google Groups:

Public Declare Function SendMessage Lib "user32" Alias

"SendMessageA" _
(ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As

Long, lParam As
Any) As Long
Public Declare Function FindWindow Lib "user32" Alias

"FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String)

As Long

Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
Public Const WM_NCDESTROY = &H82


Sub CloseWindow()
Dim HWnd As Long
'Dim lpClassName As String
'Dim lpWindowName As String

HWnd = FindWindow("CabinetWclass", "Baytek WinBLISS")
If HWnd 0 Then
SendMessage HWnd, WM_NCDESTROY, 0, 0
End If
End Sub








  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 12
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

I was able to download a copy of Spy++ and another program called
Winspector that allowed me to obtain the class of the window. Thanks for
all of the input!! However I have an additional question. The external
application opens(primary window of one class name) and performs a data
search (in a sub window of a different class name) and transfers the
retrieved data to excel. Following the data transfer to excel, the sub
window is closed, leaving only the primary window, which I can now close
using Chips code.

Question is this:

Can I monitor the sub window as a trigger to initiate the Close Window Sub
and then launch another search? Reason is this, once the data has been
transferred to excel and the window is closed that search is complete. The
time for each search (30 or more searches in the routine) will vary
depending on the amount of data retrieved.

The Shell and Wait sub will start the external program search, but I believe
that as long as the primary window of the application is open, the macro
will continue to wait, even after the data has been transferred, which is
not desirable.

Currently the Sell command is used to perform a data search and a wait
function is set at 10 seconds, then performs the task again, with each
search opening another window of the search application.

Any information is greatly appreciated!

Thanks in advance

Regards,

ZABU

"Tom Ogilvy" wrote in message
...
This article should get you going on finding the information you need:


http://support.microsoft.com/default...b;en-us;147659
HOWTO: Get a Window Handle Without Specifying an Exact Title

(in case you don't have spy++ from visual studio)

--
Regards,
Tom Ogilvy


"ZABU" wrote in message
...
That is correct. I do not know the correct class name and am not

completely
sure of the window name - unless that is the text in teh title bar of

the
window. The window does not respond to the sent message to close. And
further, I am not sure what exit code the window I am trying to close

will
accept. Do you have any tools that will give the class knowing the

title
of
the window and how to determine the exit code?

Thanks in advance!

ZABU
"Chip Pearson" wrote in message
...
Zabu,

What specific problems are you having? Are you sure that you are
using the correct class name and window name for the call to
FindWindow (use Spy++ to find out the proper values)? Does the
window not respond to the sent messages?


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"ZABU" wrote in message
...
Peter, Vasant or Chip:

I have finally tested the code discussed in prior posts
regarding closing an
external application with VBA Code. I have successfully
executed the "Send
and Wait" command for the "Calc.exe" Test use of API calls and
monitoring.
Once the program is clsoed a message appears, which
communicates that the
program has been closed.

I am currently at the following step and am having diffuculty.
I need to
find a particular window and close the application associated
with the
window after a search and data transfer to excel (this will
occur about 30
times, so this many windows will have to be closed). I have
reviewed the
following code from Chip Pearson (I believe), but am having
difficulty. I
believe that I need to find the specific classname and window
name
associated with the "FindWindowA" function. This is shown in
the code below,
but I cannot get it to execute. Please send any informatin
that may assist
in my efforts. Example code will be very useful! Many thanks
in advance!

Kind Regards,

ZABU


Code located on the Google Groups:

Public Declare Function SendMessage Lib "user32" Alias
"SendMessageA" _
(ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As
Long, lParam As
Any) As Long
Public Declare Function FindWindow Lib "user32" Alias
"FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String)
As Long

Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
Public Const WM_NCDESTROY = &H82


Sub CloseWindow()
Dim HWnd As Long
'Dim lpClassName As String
'Dim lpWindowName As String

HWnd = FindWindow("CabinetWclass", "Baytek WinBLISS")
If HWnd 0 Then
SendMessage HWnd, WM_NCDESTROY, 0, 0
End If
End Sub










  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 115
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

Hi ZABU,

I think in the external application, we may try to monitor the sub window,
once it has been closed, we can notify the VBA that a sub window has been
closed by using interprocess communication mechanism. e.g. windows message.
Inter Process Communication with Registered Windows Messages
http://www.codeguru.com/vb/gen/vb_sy...int.php/c7401/

But I think a simple method to use a file, in the external application we
can write 1 to the file when something has happened. And in the VBA program
we can monitor the file by reading the file once in a while.

If you still have any concern, please feel free to post here.

Best regards,

Peter Huang
Microsoft Online Partner Support

Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.

  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 115
Default Peter Huang, Vasant, Chip Pearson - Close External Application VBA - ZABU

Hi ZABU,

Have you tried my suggestion?
If you still have any concern, please feel free to post here.

Best regards,

Peter Huang
Microsoft Online Partner Support

Get Secure! - www.microsoft.com/security
This posting is provided "AS IS" with no warranties, and confers no rights.

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Thank you Chip Pearson Michael Excel Discussion (Misc queries) 3 February 5th 05 08:35 PM
Question to Chip Pearson Doug[_9_] Excel Programming 2 January 19th 04 03:56 PM
Chip Pearson Ricardo[_2_] Excel Programming 0 November 10th 03 07:51 PM
CHIP PEARSON - THANX bertieBassett Excel Programming 0 November 3rd 03 02:01 PM
Chip Pearson or someone Chip Pearson Excel Programming 3 September 18th 03 05:22 AM


All times are GMT +1. The time now is 04:41 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"