ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Need window handle for a userform (https://www.excelbanter.com/excel-programming/407287-need-window-handle-userform.html)

Henry

Need window handle for a userform
 
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.


--
Henry

RB Smissaert

Need window handle for a userform
 
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


"Henry" wrote in message
...
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.


--
Henry



Henry

Need window handle for a userform
 
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?


--
Henry


"RB Smissaert" wrote:

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


"Henry" wrote in message
...
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.


--
Henry




RB Smissaert

Need window handle for a userform
 
Haven't got that ready no. What messages are you interested in?

RBS


"Henry" wrote in message
...
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?


--
Henry


"RB Smissaert" wrote:

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


"Henry" wrote in message
...
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.


--
Henry





Henry

Need window handle for a userform
 
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.


--
Henry


"RB Smissaert" wrote:

Haven't got that ready no. What messages are you interested in?

RBS


"Henry" wrote in message
...
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?


--
Henry


"RB Smissaert" wrote:

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


"Henry" wrote in message
...
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.


--
Henry





RB Smissaert

Need window handle for a userform
 
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" wrote in message
...
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.


--
Henry


"RB Smissaert" wrote:

Haven't got that ready no. What messages are you interested in?

RBS


"Henry" wrote in message
...
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?


--
Henry


"RB Smissaert" wrote:

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


"Henry" wrote in message
...
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.


--
Henry






Henry

Need window handle for a userform
 
Okay, then let's stick to the question, how do I capture windows messages on
a form.


--
Henry


"RB Smissaert" wrote:

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" wrote in message
...
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.


--
Henry


"RB Smissaert" wrote:

Haven't got that ready no. What messages are you interested in?

RBS


"Henry" wrote in message
...
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?


--
Henry


"RB Smissaert" wrote:

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


"Henry" wrote in message
...
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.


--
Henry








All times are GMT +1. The time now is 10:48 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com