Need window handle for a userform

  • Thread starter Thread starter Henry
  • Start date Start date
H

Henry

Hi

I would like the window handle of a (user)form in my excel project, how do I
get that?

I need to use sendmessage to that form.
 
In a normal module:
--------------------------------

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

Function GetFormHwnd(strCaption As String) As Long
If Val(Application.Version) >= 9 Then
GetFormHwnd = FindWindow("ThunderDFrame", strCaption)
Else
GetFormHwnd = FindWindow("ThunderXFrame", strCaption)
End If
End Function


In your form module:
-------------------------------------

Private lFormHwnd As Long

Public Property Let propFormHwnd(lHwnd As Long)
lFormHwnd = lHwnd
End Property

Public Property Get propFormHwnd() As Long
propFormHwnd = lFormHwnd
End Property

Private Sub Userform_Initialize()

Dim hwnd As Long

hwnd = GetFormHwnd(Me.Caption)
Me.propFormHwnd = hwnd

End Sub

This will give your form a property propFormHwnd (will show up with
intelli-sense) and that can be useful for other purposes.
If you don't want this then just use the function.


RBS
 
Hi

Thanks!

Do you also happen to know how I can capture the "postmessage" message on
the form?

Must be some kind of hook right?
 
Haven't got that ready no. What messages are you interested in?

RBS
 
Hi

My own message, I would like to make a Progressform that can be updated by
posting a message with

postmessage(hWnd, WM_MY_MESSAGE_PROGRESS, iProgress, iMax)

from a "loop" where the work is done.


It seems that in VBA the system is upside down on such a thing, when most
examples are done by loading the progress form and letting the progressform
make the call back to the process function.

I don't like that, and I would like to have a progressform that is
independant of what work is to be done.


Posting a message with the progress values is so much easier.
 
I don't quite get what you are saying there and I don't think you need the
API to have a progressbar in Excel.
Have a look at the standard Progressbar control. I think it will do all you
want.

RBS


Henry said:
Hi

My own message, I would like to make a Progressform that can be updated by
posting a message with

postmessage(hWnd, WM_MY_MESSAGE_PROGRESS, iProgress, iMax)

from a "loop" where the work is done.


It seems that in VBA the system is upside down on such a thing, when most
examples are done by loading the progress form and letting the
progressform
make the call back to the process function.

I don't like that, and I would like to have a progressform that is
independant of what work is to be done.


Posting a message with the progress values is so much easier.
 
Okay, then let's stick to the question, how do I capture windows messages on
a form.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top