Warning: Illegal string offset 'status' in /home2/icentarb/public_html/icentar/print.php on line 190

Warning: Illegal string offset 'status' in /home2/icentarb/public_html/icentar/print.php on line 190

Warning: Illegal string offset 'status' in /home2/icentarb/public_html/icentar/print.php on line 190

Warning: Illegal string offset 'status' in /home2/icentarb/public_html/icentar/print.php on line 190

Warning: Illegal string offset 'status' in /home2/icentarb/public_html/icentar/print.php on line 190

Warning: Illegal string offset 'status' in /home2/icentarb/public_html/icentar/print.php on line 190
iCentar » Racunari i oprema » Programirannje i baze podataka » Access » Otvaranje i zatvaranje explorer prozora sa VBA
pmiroslav 13.02.2014 13:35
Predmet:Otvaranje i zatvaranje explorer prozora sa VBA

Ovo mi otvara folder, a kako ga zatvoriti ako je otvoren?

Function OtvoriFolder()
Dim Foldername As String
Foldername = "S:\"
Shell "C:\WINDOWS\explorer.exe """ & Foldername & "", vbNormalFocus
End Function

zxz 13.02.2014 14:17
Predmet:Re: Ili možda isto sa VBA

PreuzmiIzvorni kôd (Visual Basic):
  1. Function ZatvoriProgram(Imeprograma)
  2. Dim WO As Object
  3. Dim ProcesO
  4. Set WO = GetObject("winmgmts:")
  5.     Set ProcesO = WO.execquery("SELECT * FROM win32_process WHERE Name = '" & Imeprograma & "'")
  6.     For Each ProcesO In ProcesO
  7.         ProcesO.Terminate
  8.     Next
  9. End Function

zxz 13.02.2014 16:42
Predmet:Re: Ili možda isto sa VBA

PreuzmiIzvorni kôd (Visual Basic):
  1. Option Compare Database
  2. Option Explicit
  3. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  4. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  5. Const WM_CLOSE = &H10
  6.  
  7. Function ZatvoripProgram()
  8. Dim winHwnd As Long
  9. Dim RetVal As Long
  10. winHwnd = FindWindow(vbNullString, "ImeFoldera")
  11. If winHwnd <> 0 Then
  12. PostMessage winHwnd, WM_CLOSE, 0&, 0&
  13. Else
  14. MsgBox "NIJE OTVOREN"
  15. End If
  16. End Function


Promijeni naslov

pmiroslav 14.02.2014 08:09
Predmet:Re: Ili možda isto sa VBA

Nažalost neće da zatvori.
Napravio sam Autoexec makro koji
1. Pokrene Funkciju OtvoriFolder()
2. Otvori Form1
3. Pokrene Funkciju ZatvoriFolder()
    (Ovdje sam preimenovao onu tvoju ZatvoripProgram())
U zadnjoj akciji dobijem poruku "NIJE OTVOREN."

Ali da objasnim zašto mi ovo treba, možda ima bolje riješenje.
Kada pokrenem Front bazu koja ima linkane tablice sa drugog kompjutera često mi se pojavi poruka

'S:\' is not accessible

Zbog toga moram zatvoriti Access sa Ctri+Alt+Delete pa onda u exploreru ručno nači folder gdje su tablice i otvoriti ga da se inicijalizira, zatim se front baza otvori bez problema.
Zato bi želio da mi se po otvaranju to uradi automatski.
Prilozi:
OtvoriFolder.rar (Velicina datoteke:30.68 KB)

zxz 14.02.2014 12:37
Predmet:Re: Ili možda isto sa VBA

Kako vidim ti nisi dao ime foldera koji zatvara
winHwnd = FindWindow(vbNullString, ImeFoldera)
da kazemo da je ime foldera Baza, pa bi bilo
winHwnd = FindWindow(vbNullString, "Baza")

E sad sto se tice svega ukupno mislim d postoji bolji nacin.
Sta treba uraditi pri pokretanju app.
Prvo treba podici u rs. neku od linkovanih tabela i ukoliko se tu pojavi greska znaci da nisu linkovane tabele.
To bi bila prva procedura napr Provjera.
Druga procedura bi bila da se otvori dialog box za odabir putanje odnosno mdb gdje se nalaze podaci i tu vjerovatno imas u app.
To ti je ona Open File name.

Sada kada smo dobili novu putanju treba nam funkcija relink a mislim da ti i nju imas.
Ovo treba dozvoliti da se ponovi tri puta ukoliko se ne odabere prava baza te da poslije toga zatvori app.

Hajd pokusaj pa ako ne ide zajedno cemo to odraditi.

pmiroslav 14.02.2014 13:27
Predmet:Re: Ili možda isto sa VBA

Ovo drugo ću pokuÅ¡ati kasnije.
A kod prvog sam napisao
...
Dim ImeFoldera As String
ImeFoldera = "D:\"
winHwnd = FindWindow(vbNullString, ImeFoldera)
...
Voli bih da i ovo rijeÅ¡imo možda će trebati.

zxz 14.02.2014 13:41
Predmet:Re: Ili možda isto sa VBA

PreuzmiIzvorni kôd (Visual Basic):
  1. Function ZatvoripFolder(ImeFoldera As String)
  2. Dim winHwnd As Long
  3. Dim RetVal As Long
  4. winHwnd = FindWindow(vbNullString, ImeFoldera)
  5. If winHwnd <> 0 Then
  6. PostMessage winHwnd, WM_CLOSE, 0&, 0&
  7. Else
  8. MsgBox "NIJE OTVOREN"
  9. End If
  10. End Function

Poziva se:
ZatvoripFolder ("Sys1 (D:)")

Znaci pozivas ga po imenu koje se nalazi na prozoru kada ga podignes.

pmiroslav 14.02.2014 14:00
Predmet:Re: Ili možda isto sa VBA

Prozor je kao na slici , a u Immediate sam napisao:

?ZatvoripFolder("Server on 'Zeljko'(Z:)")

i opet oda na MsgBox "NIJE OTVOREN"

PS
Evo sada mi je proradilo bio je Å¡tos u razmaku između 'Zeljko' i (Z:)
Prilozi:
Image1.jpg (Velicina datoteke:90.86 KB)

zxz 14.02.2014 19:19
Predmet:Re: Ili možda isto sa VBA

Jeli sad ovo sve ok.
Ako jeste dobro bi bilo da postavis cio kod sa objasnjenjem.

pmiroslav 15.02.2014 07:58
Predmet:Re: Ili možda isto sa VBA

Pa evo ovako.
Kod je sliedeći_
PreuzmiIzvorni kôd (vbnet):
  1. Option Compare Database
  2. Option Explicit
  3. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  4. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  5. Const WM_CLOSE = &H10
  6.  
  7. Function OtvoriFolder()
  8. Dim ImeFoldera As String
  9. ImeFoldera = "D:"
  10.  
  11. Shell "C:\WINDOWS\explorer.exe """ & ImeFoldera & "", vbNormalFocus
  12.  
  13. End Function
  14.  
  15. Function ZatvoriFolder()
  16. Dim winHwnd As Long
  17. Dim RetVal As Long
  18. Dim ImeFoldera As String
  19. ImeFoldera = "D:"
  20. winHwnd = FindWindow(vbNullString, ImeFoldera)
  21. If winHwnd <> 0 Then
  22. PostMessage winHwnd, WM_CLOSE, 0&, 0&
  23. Else
  24. MsgBox "NIJE OTVOREN"
  25. End If
  26. End Function

Ovo sam spremio u jedan modul.
zatim sam napravo makor kojem sam dao ime Autoexec, tako da se pokrene pri otvaranju aplikacije.
Makro ima dvije naredbe
RunCode
Function Name: OtvoriFolder()
i
OpenForm
Form Name: npr. Login Forma

I sad na formi koja se prva otvara na OnClose napisao sam
Call ZatvoriFolder.

E sada opet dolazi problem. Na poslu sam na WindowsXP i sve radi OK, a sada sam kod kuće i tu imam Windows 7 i kada se podigne prozor na njemu ne piÅ¡e ime kao u Win Xp.
Tako da opet neće da se zatvori.