Questo sistema funziona perfettamente. Però per essere ancora più
comodo vorrei che la finestra di windows sia aperta sempre in primo
piano (always on top), e magari posizionarla in un punto preciso dello
schermo.
Suggerimenti??!?
Serve qualche manciata di Api per fare quello che chiedi... se digiti
proprio quello che hai scritto tra parentesi
accompagnato da VB6 troverai le dichiarazioni API
Ti manca solo l'hWnd dell'esplora risorse... potresti usare FindWindow
Api passando sia il ClassName che la Caption
per ricavarlo, ma io preferisco sfruttare il PID restituito dalla
Shell e ciclare tra i trheadprocessid per recuperarlo...
Ciao.
@Alex
Grazie Alex per il tuo intervento,
ho trovato esempi di codice tipo quello che includo in fondo al post.
Dovrebbero mandare on Top la finestra di access... ma non riesco a
farla funzionare o meglio: non mi da errore ma neanche sposta
l'applicazione in primo piano....
Inoltre, come fare per riferire il tutto ad una finestra esterna ad
access?
Forse chiedo troppo.... ho solo un infarinata di VBA e pretendo di
fargli fare anche il caffè....
modulo:
Public Const SWP_NOMOVE = 2
Public Const SWP_NOSIZE = 1
Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Declare Function SetWindowPos _
Lib "user32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
Public Function SetTopMostWindow(hwnd As Long, _
Topmost As Boolean) As Long
If Topmost = True Then
'Make the window topmost
SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, _
0, 0, 0, 0, FLAGS)
Else
'Make the window not topmost
SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, _
0, 0, 0, 0, FLAGS)
SetTopMostWindow = False
End If
End Function
nella maschera invece:
Private Sub Check1_Click()
If Check1.Value = vbChecked Then
SetTopMostWindow Me.hwnd, True
Else
SetTopMostWindow Me.hwnd, False
End If
End Sub
ma...quando spunto o "de-spunto" il check1, non succede nulla!
Ma tu chiedevi l'Esplora Risorse non Access...
Quel codice tuttavia attiva il TOPMOST solo per una MASCHERA, ma per
funzionare con Access deve essere POPUP perchè di Default Access è una
MDI_FORM...
Ora come ti dicevo devi recuperare con FindWindow se non riesci dal
PID, la proprietà HWND della finestra di EsploraRisorse e nella
funzione devi passare quello....
@Alex
Ho cercato di studiare un po' le tue guide e......
ce l'ho fatta!!!!! grazie! W le api!
Bravo, ottimo.
Ora se posti a tutti la soluzione farai cosa gradita a tutti quelli
che magari avranno la stessa esigenza.
@Alex
Ecco la soluzione:
Private Declare Function FindWindow Lib "user32" Alias
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As
String) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As
Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long,
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Sub Comando0_Click()
vardir = "C:\1ZIP"
Dim allegatoHwnd As Long
Call Shell("explorer " & vardir, 1)
allegatoHwnd = FindWindow("CabinetWClass", vbNullString)
SetWindowPos allegatoHwnd, -1, 0, 0, 500, 1500, SWP_NOACTIVATE
End Sub
il -1 della SetWindowPos imposta la finestra always on top.
per ripristinarla occorre impostare tale valore a -2.
Problemi riscontrati: funziona egregiamente in tutti i pc, a parte
quello del sottoscritto....:
utilizzando infatti i driver/software nvidia che gestiscono monitor in
dualview e relative finestre popup,
dopo aver impostato la finestra esplora risorse in primo piano, anche
tutte le altre esplora risorse riaperte in secondo tempo partono
direttamente popup.....
Quindi in questo contesto non è poi così ottimale.
Spero di essere stato utile a qualcun'altro dell'NG!
grazie alex
ciao