Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Allegati: settare finestra esplora risorse SEMPRE in primo piano

126 views
Skip to first unread message

emibal

unread,
Oct 13, 2010, 3:55:35 AM10/13/10
to
Ho implementato in un database la gestione degli allegati tramite le
cartelle di windows.
Quando si preme un pulsante, access crea una cartella fisica sul disco
con il nome dell'ID del record. Poi la apre con questa funzione
hell("explorer.EXE \\percorso\" & Me.id, 1)
ed è possibile copiare o leggere i files presenti

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??!?

@Alex

unread,
Oct 16, 2010, 5:57:22 PM10/16/10
to

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

emi

unread,
Oct 21, 2010, 2:44:59 AM10/21/10
to

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!

@Alex

unread,
Oct 21, 2010, 4:04:50 AM10/21/10
to
> ma...quando spunto o "de-spunto" il check1, non succede nulla!- Nascondi testo citato
>
> - Mostra testo citato -

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

emi

unread,
Oct 21, 2010, 11:09:23 AM10/21/10
to

Ho cercato di studiare un po' le tue guide e......
ce l'ho fatta!!!!! grazie! W le api!

@Alex

unread,
Oct 21, 2010, 1:54:55 PM10/21/10
to

Bravo, ottimo.
Ora se posti a tutti la soluzione farai cosa gradita a tutti quelli
che magari avranno la stessa esigenza.

@Alex

emi

unread,
Oct 22, 2010, 3:15:49 AM10/22/10
to

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

0 new messages