Newsgroup: it.comp.lang.visual-basic
Titolo: Domanda sul sendmessage

Ciao a tutti volevo porvi un quesito :
volevo creare un programmino che mi mettesse il focus su una pagina notepad 
aperta e mi simuli la pressione dei tasti ( non con il sendkey)
allora ho usato findwindow per trovare hwnd della finestra e 
setforgroudwindow per metterla in primo piano poi volevo usare il 
sendmessage per simulare la pressione dei tasti in questa maniera
Const WM_KEYUP = &H101
Const WM_KEYDOWN = &H100
Const VK_SPACE = &H20
Dim X as Long
X = SendMessage(hwnd, WM_KEYDOWN, VK_SPACE, 0)
X = SendMessage(hwnd, WM_KEYUP, VK_SPACE, 0)
Che teoricamente dovrebbe simularmi la barra spazziatrice ma non da nessun 
risultato.
Per caso sbaglio qualcosa????
Seconda domanda il sendmessage funziona solo su una finestra attiva oppure 
essendo che gli do hwnd della finestra a cui invio il messaggio la 
simulazione avviene anche se la finestra non è attiva????
Grazie

 
non e' il sendmessage che funziona solo sulla finestra attiva ma
i messaggi che invii che arrivano solo alla finestra attiva
guarda qui:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardInput.asp
bye
r

 ho trovato sendmessage, sendkey, sendinput
Trovare una soluzione alternativa...
Non sto scherzando.
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
se devi inviare un testo ad un textbox ti conviene usare WM_SETTEXT,
altrimenti ... bho?!?
bye
r



 Secondo voi qual'č il metodo migliore per simulare la pressione dei

Ma non č meglio che apri Notepad e gli scivi dentro senza tanto simulate
uno che scrive.....???
Ad esempio:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA"
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal
lpsz2 As String) As Long
Private Declare Function SendMessageSTRING Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam
As String) As Long
Private Const WM_SETTEXT = &HC
Shell "notepad.exe"
----------------------------------------------------------------------------
----------------
Con questo assegni un Nome alla Caption dell'istanza di Notepad
----------------------------------------------------------------------------
----------------
Dim lNotepadHwnd As Long
Dim sCaption As String
    lNotepadHwnd = FindWindow("Notepad", vbNullString)
    sCaption = InputBox("Che CAPTION devo inserire ?")
    SendMessageSTRING lNotepadHwnd, WM_SETTEXT, 256, sCaption
----------------------------------------------------------------------------
----------------
Con questo scrivi dentro Notepad
----------------------------------------------------------------------------
----------------
Dim lNotepadHwnd As Long
Dim lNotepadEdit As Long
Dim sCaption As String
    lNotepadHwnd = FindWindow("Notepad", vbNullString)
    lNotepadEdit = FindWindowEx(lNotepadHwnd, 0&, "Edit", vbNullString)
    sCaption = InputBox("Cosa devo scriverci ?")
    SendMessageSTRING lNotepadEdit, WM_SETTEXT, 256, sCaption
Ovviamente essendo Notepad istanziabile piů volte puoi assegnare un Nome
alla Finestra di conseguenza cercarla in modo corretto, altrimenti recupera
il PID restituito da SHELL e ricavane l'Handle per essere sicuro di scrivere
nell'istanza giusta.
----------------------------------------------------------------------------
----------------
Con questo ricavi l'Handle dell'istanza passando il PID
----------------------------------------------------------------------------
----------------
Public Function PidToHwnd(ByVal target_pid As Long) As Long
  Dim test_hwnd As Long
  Dim test_pid As Long
  test_hwnd = FindWindow(ByVal 0&, ByVal 0&)
  Do While test_hwnd <> 0
   If GetParent(test_hwnd) = 0 Then
      Call GetWindowThreadProcessId(test_hwnd, test_pid)
      If test_pid = target_pid Then
         PidToHwnd = test_hwnd
         Exit Do
      End If
   End If
   test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
  Loop
End Function
Forse ti ho fatto un pň di confusione, ma io la vedo piů semplice cosě
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

Mi interessava la simulazione dei tasti come le frecce e l'invio il notepad 
era solo come esempio 

 era solo come esempio 
Se la finestra dell'applicazione target e' in primo piano allora
va benissimo keybd_event(). Da win2000 in poi Microsoft consiglia
di usare SendInput(), piu' completa e sicura.
Se non fosse in primo piano, dovresti portarla in primo piano ;-)
-- 
ciao, hal

 Grazie
Prego,
Andrea

Allora ho usato sendinput mi sembra quello che va meglio li altri non so 
perchč ogni tanto mi perdono una pressione dei tasti
prima della chiamata sendimput faccio un forgroudwindow per metterla in 
primo piano cosě sono sicuro che l'esecuzione avviane sulla finestra che 
voglio.
Ultima cosa si usa emuchildWindow per trovare hwnd dei componenti della 
finestra??? per esempio l'hwnd del pulsante ok se ci fosse questo pulsante 
sulla finestra???
grazie

 sulla finestra???
la spiegazione ufficiale per come usare EnumChildWindows() da
visual basic e' ovviamente del supporto Microsoft:
How To Enumerate Windows Using the WIN32 API
http://support.microsoft.com/kb/183009
-- 
ciao, hal

Ok ho fatto tutto non so se ti ricordi il progettino che stavo creando 
dell'autoinstaller cosi' funziona benissimo fa tutto da solo senza che 
l'utente interagisca 


be', complimenti :-)
pero', se ho ben capito, operi su un installer gia' noto a priori, giusto?
-- 
ciao, hal

Si si alrimenti penso sia impossibile crearne uno che possa funzionare con 
qualsiasi installer 

 
ha scritto nel messaggio news:zHPQd.50191$2h5....@tornado.fastwebnet.it...
