Thread View: be.comp.programming
6 messages
6 total messages
Started by Cofke
Tue, 22 Apr 2003 13:01
Api SetWindowsText
Author: Cofke
Date: Tue, 22 Apr 2003 13:01
Date: Tue, 22 Apr 2003 13:01
10 lines
1297 bytes
1297 bytes
Met de API SetWindowsText kan ik de caption van windows en buttons aanpassen in andere programma's. Bestaat er ook een API die de text in een textvak kan aanpassen. Ik krijg de handle van een textbox wel opgevraagd door er als parameter de inhoud van de textbox aan mee te geven en schijnbaar aangepast ook (met enumchilds is de naam verandert), alleen de inhoud van de textbox zelf verandert niet mee. Greetz Cofke
Re: Api SetWindowsText
Author: KLinZ
Date: Tue, 22 Apr 2003 18:00
Date: Tue, 22 Apr 2003 18:00
36 lines
2285 bytes
2285 bytes
Cofke wrote:
> Met de API SetWindowsText kan ik de caption van windows en buttons
> aanpassen in andere programma's.
> Bestaat er ook een API die de text in een textvak kan aanpassen.
> Ik krijg de handle van een textbox wel opgevraagd door er als
> parameter de inhoud van de textbox aan mee te geven en schijnbaar
> aangepast ook (met enumchilds is de naam verandert), alleen de inhoud
> van de textbox zelf verandert niet mee.
De documentatie van SetWindowText() maakt melding van een kleine feature;
"SetWindowText cannot change the text of a control in another application."
en:
"If the target window is owned by the current process, SetWindowText causes
a WM_SETTEXT message to be sent to the specified window or control"
Om die controle te omzeilen kun je doen wat SetWindowText doet:
var
str: PChar;
begin
str := 'kl0nt';
SendMessage(WindowHandleGevondenMetEnumChilds, WM_SETTEXT, Lenght(str),
longint(str));
end;
Als dit niet mocht werken is er nog wel een andere oplossing, maar die voert
technisch erg ver en is bovendien niet echt betrouwbaar (code injection).
--
www.zenobits.com
Re: Api SetWindowsText
Author: Cofke
Date: Tue, 22 Apr 2003 21:12
Date: Tue, 22 Apr 2003 21:12
8 lines
1161 bytes
1161 bytes
"KLinZ" <klinz@NOSPAMMERTSzenobits.com> wrote in news:uqfpa.2933$KF1.86438@amstwist00: Ik heb het ondertussen opgelost met subclassing, maar jou methode ga ik ook zeker eens testen. Bedankt Greetz Cofke
Re: Api SetWindowsText
Author: KLinZ
Date: Wed, 23 Apr 2003 16:25
Date: Wed, 23 Apr 2003 16:25
14 lines
1663 bytes
1663 bytes
Cofke wrote: > "KLinZ" <klinz@NOSPAMMERTSzenobits.com> wrote in > news:uqfpa.2933$KF1.86438@amstwist00: > > Ik heb het ondertussen opgelost met subclassing, maar jou methode ga > ik ook zeker eens testen. Subclassing ook echt! Lijkt me redelijk overkill voor wat je wilt. Ik ben trouwens wel benieuwd hoe jij subclassing gebruikt om de window text te zetten. Kun je wat hints geven? -- www.zenobits.com
Re: Api SetWindowsText
Author: Cofke
Date: Wed, 23 Apr 2003 19:59
Date: Wed, 23 Apr 2003 19:59
32 lines
2098 bytes
2098 bytes
Ik had men licht nog eens opgestoken bij www.allapi.net.
Mijn test-projectje schrijft gewoon met de ene form text in de textbox van
de andere form.(2 verschillende projecten).
Bij de zender ga je ;-opvragen de handle van het windowchild (textbox) waar
je naar wil schrijven.
-sendmessage(handle etc..) uMsg=2000
Bij de ontvanger -CallWindowProc
**********************************
Public Sub HookForm(F As Form)
PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookForm(F As Form)
SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal
wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = 2000 Then
Form1.Text1 = Form1.Text1 & Str(uMsg) & vbCrLf & Str(lParam)
End If
End Function
************************************
Als wilt stuur ik de 2 projecten wel eens door.
Greetz
Cofke
Re: Api SetWindowsText
Author: KLinZ
Date: Wed, 23 Apr 2003 23:22
Date: Wed, 23 Apr 2003 23:22
44 lines
3022 bytes
3022 bytes
Cofke wrote: > Ik had men licht nog eens opgestoken bij www.allapi.net. > Mijn test-projectje schrijft gewoon met de ene form text in de > textbox van de andere form.(2 verschillende projecten). > > Bij de zender ga je ;-opvragen de handle van het windowchild > (textbox) waar je naar wil schrijven. > -sendmessage(handle etc..) uMsg=2000 > > Bij de ontvanger -CallWindowProc > ********************************** > Public Sub HookForm(F As Form) > PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc) > End Sub > > Public Sub UnHookForm(F As Form) > SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc > End Sub > > Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, > ByVal wParam As Long, ByVal lParam As Long) As Long > WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam) > If uMsg = 2000 Then > Form1.Text1 = Form1.Text1 & Str(uMsg) & vbCrLf & Str(lParam) > End If > End Function > ************************************ > > Als wilt stuur ik de 2 projecten wel eens door. Nee, dat hoeft niet. Ik ben wel met subclassing e.d. bekend. Ik vroeg me alleen af waarom je godsnaam subclassing zou gebruiken om zoiets op te lossen :-) Ik was eerst in de veronderstelling dat je geen toegang tot de broncode van de applicatie waarvan je de caption wilde wijzigen. In dat geval zou je namelijk wel van de SendMessage(hWnd, WM_SETTEXT, ... , ...) constructie gebruik moeten maken. In jouw geval levert dat weinig voordeel op omdat je toch op de 1/andere manier die handle moet doorgeven danwel op moet vragen. En dan maakt het niet veel meer uit of dat je dat met subclassing of op een andere manier doet. -- www.zenobits.com
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads