Newsgroup: it.comp.lang.visual-basic
Titolo: [?] ShellExecute: apertura documento readonly

Salve
sto cercando di aprire un documento Word, in modalità ReadOnly,
utilizzando ShellExecute.
Ho provato con
dim ROString as String, Risposta as long
ROString = "ReadOnly:=True" & Chr$(0)
Risposta = ShellExecute(Me.hwnd, "open", StrNomeDoc, ROString,
vbNullString, SW_SHOWNORMAL)
ma non riconosce il parametro ReadOnly.
Inoltre, le costanti SW_ non sono riconosciute dal mio VB (versione
6.0 SP3), qualcuno ne conosce i valori?
Grazie
Federico
--
 
federic...@planet.it
Eliminare NOSPAM dall'indirizzo! Delete NOSPAM from address!

 6.0 SP3), qualcuno ne conosce i valori?
ecco qui (le trovi nell'API Viewer):
Public Const SW_ERASE = &H4
Public Const SW_HIDE = 0
Public Const SW_INVALIDATE = &H2
Public Const SW_MAX = 10
Public Const SW_MAXIMIZE = 3
Public Const SW_MINIMIZE = 6
Public Const SW_NORMAL = 1
Public Const SW_OTHERUNZOOM = 4
Public Const SW_OTHERZOOM = 2
Public Const SW_PARENTCLOSING = 1
Public Const SW_PARENTOPENING = 3
Public Const SW_RESTORE = 9
Public Const SW_SCROLLCHILDREN = &H1
Public Const SW_SHOW = 5
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1
Ciao
Faber

6.0 SP3), qualcuno ne conosce i valori?
Da quanto ho capito leggendo l'MSDN la tua ROString è la stringa dei
parametri per il file lanciato, solo che viene ignorata se il file non è
un'eseguibile.
Il passaggio di stringhe alle api non necessita l'aggiunta del null
(chr$(0)) finale poichè le stringhe VB sono già delle AsciiZ string.
le costanti SW_* per la ShellExecute dovrebbero essere le stesse usate per
la Shell di VB (es. vbNormalFocus, vbHide ecc...)
Ciao


Ho capito, grazie.
Nessuna idea di come sia possibile far aprire un documento Word in
sola lettura?


 sola lettura?
potresti usare SetAttr sul documento prima di aprirlo in modo da impostarlo
Read-Only...
Ciao
Faber


I problemi hanno sempre diversi punti da cui guardarli. Il tuo punto
non l'avevo preso in considerazione. Ma ha una controindicazione,
almeno nel mio caso: dovrei reimpostarlo non read-only all'uscita da
Word, ma io non so quando si esce da Word, nel senso che lancio la
shell, ma poi il mio programma prosegue e non intendo stare dietro a
tutti gli eventuali documenti che vengono aperti. Dovrei, tra l'altro,
modificare pesantemente il programma per poterlo fare.
Grazie comunque.


 modificare pesantemente il programma per poterlo fare.
metodo grezzissimo (ma c'è sempre di peggio):
metti un timer che controlla ogni tot se Word è ancora aperto.
in una variabile a livello di Form metti il PID restituito da Shell, poi
nell'evento Timer usi questa funzione (che ti restituisce l'hWnd) per
determinare se è ancora aperto (se è = 0 vuol dire che è chiuso...)
Ciao ciao
Faber
Public Function IDToHwnd(ByVal ID As Long) As Long
    Dim test_hwnd As Long
    Dim test_pid As Long
    Dim test_thread_id As Long
    test_hwnd = FindWindow(vbNullString, vbNullString)
    Do While test_hwnd <> 0
        If GetParent(test_hwnd) = 0 Then
            test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
            If test_pid = ID Then
                IDToHwnd = test_hwnd
                Exit Function
            End If
        End If
        test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
    Loop
End Function


Grazie, proverò.
