Penulis Topik: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7  (Dibaca 15185 kali)

Offline M. Ridzky

  • Forum Developer
  • Pro200
  • ***
  • Tulisan: 227
  • Reputation: 23461
  • Jenis kelamin: Pria
    • Lihat Profil
(Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« pada: Januari 08, 2012, 03:26:56 PM »

:D ini ada source buat mendapatkan direktory aktif di windows vista atau windows 7, source ini berguna sekali bagi agan yang lagi mengembangkan antivirus buat kebutuhan RTP nya, dari thread" sebelumnya banyak menanyakan gimana cara bikin RTP dan cara mendapatkan direktory yg aktif di Windows 7, dari source yang bisa dipake di Windows XP rupanya tidak berfungsi di Windows 7, karena di Windows 7 classname" di Windows Explorer berbeda dengan yang ada di Windows XP, untuk itu kita harus menyesuaikan classnamenya yg ada di Windows 7 agar bisa mendapatkan lokasi directory aktif yang sedang dibuka melalui Windows Explorer.

 ;) Kode ini udah aq test sendiri di Windows 7 SP1 x64 bit - bisa berfungsi dengan baik  ;)

berikut kodenya :

Kode: [Pilih]
'HH        HH                                AA                    kk                    RRRRRRRRRR
'HH        HH                              AA  AA                  kk                    RR        RR
'HH        HH    aaaaaa    pp  pppp        AA  AA        cccccc    kk    kk    eeeeee    RR        RR
'HHHHHHHHHHHH  aa      aa  pppp    pp      AA  AA      cc      cc  kk  kk    ee      ee  RRRRRRRRRR
'HH        HH    aaaaaaaa  pp      pp    AA      AA    cc          kkkk      eeeeeeeeee  RR    RR
'HH        HH  aa      aa  pp      pp    AAAAAAAAAA    cc          kk  kk    ee          RR      RR
'HH        HH  aa    aaaa  pppp    pp  AA          AA  cc      cc  kk  kk    ee      ee  RR      RR
'HH        HH    aaaa  aa  pp  pppp    AA          AA    cccccc    kk    kk    eeeeee    RR        RR
'                          pp
'                          pp       [ Smadaver Community ]
'
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Private Declare Function SendMessageTimeoutString Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As String, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
Const WM_GETTEXT = &HD

Private Function GetText(ByVal hwnd As Long) As String
    Dim sText As String
    sText = Space$(1024)
    If SendMessageTimeoutString(hwnd, WM_GETTEXT, 1024, sText, SMTO_ABORTIFHUNG, 1000, 0) <> 0 Then
        GetText = Left$(sText, InStr(sText, vbNullChar) - 1)
    End If
End Function

Private Function DapatkanDirektoryAktif()
    On Error Resume Next
    Dim hand1 As Long
    Dim hand2 As Long
    Dim hand3 As Long
    Dim hand4 As Long
    Dim hand5 As Long
    Dim hand6 As Long
    Dim hand7 As Long
    Dim hand8 As Long
    Dim LokasiPath As String

    hand1 = FindWindow("ExploreWClass", vbNullString)
    hand2 = FindWindow("CabinetWClass", vbNullString)
    If hand1 = GetForegroundWindow Then
        hand3 = FindWindowEx(hand1, 0&, "WorkerW", vbNullString)
    ElseIf hand2 = GetForegroundWindow Then
        hand3 = FindWindowEx(hand2, 0&, "WorkerW", vbNullString)
    End If
    hand4 = FindWindowEx(hand3, 0&, "ReBarWindow32", vbNullString)
    hand5 = FindWindowEx(hand4, 0&, "Address Band Root", vbNullString)
    hand6 = FindWindowEx(hand5, 0&, "msctls_progress32", vbNullString)
    hand7 = FindWindowEx(hand6, 0&, "Breadcrumb Parent", vbNullString)
    hand8 = FindWindowEx(hand7, 0&, "ToolbarWindow32", vbNullString)
    
    LokasiPath = Replace(GetText(hand8), Chr(65) + Chr(100) + Chr(100) + Chr(114) + Chr(101) + Chr(115) + Chr(115) + Chr(58) + Chr(32), "")
    
    If PathFileExists(LokasiPath) = 1 Then
        DapatkanDirektoryAktif = LokasiPath
    Else
        DapatkanDirektoryAktif = ""
    End If
    
End Function

Cara makenya tinggal kita taruh hasilnya, misalkan di komponent text atau di variabel, klo disini aq simpen hasilnya di komponent text + Timer
Kode: [Pilih]
Text1.Text = DapatkanDirektoryAktif


Tambahan :

Source ini digunakan untuk mendapatkan direktori aktif saat dialog browse open dan save file muncul, lumayan buat RTP  :D


Kode: [Pilih]
Private Function GetDirektoryAktifBrowse()
    On Error Resume Next
    Dim hand1 As Long
    Dim hand2 As Long
    Dim hand3 As Long
    Dim hand4 As Long
    Dim hand5 As Long
    Dim hand6 As Long
    Dim hand7 As Long
    Dim hand8 As Long
    Dim LokasiPath As String
    Dim Teks As String * 255
    GetWindowText GetForegroundWindow, Teks, 255

    hand1 = FindWindow("#32770", Teks)
    If hand1 = GetForegroundWindow Then
        hand2 = FindWindowEx(hand1, 0&, "WorkerW", vbNullString)
        hand3 = FindWindowEx(hand2, 0&, "ReBarWindow32", vbNullString)
        hand4 = FindWindowEx(hand3, 0&, "Address Band Root", vbNullString)
        hand5 = FindWindowEx(hand4, 0&, "msctls_progress32", vbNullString)
        hand6 = FindWindowEx(hand5, 0&, "Breadcrumb Parent", vbNullString)
        hand7 = FindWindowEx(hand6, 0&, "ToolbarWindow32", vbNullString)

        LokasiPath = Replace(GetText(hand7), Chr(65) + Chr(100) + Chr(100) + Chr(114) + Chr(101) + Chr(115) + Chr(115) + Chr(58) + Chr(32), vbNullString)

        If PathFileExists(LokasiPath) = 1 Then
            GetDirektoryAktifBrowse = LokasiPath
        Else
            GetDirektoryAktifBrowse = ""
        End If

    End If

End Function


 :D Jangan lupa creditnya buat anak" Smadaver, Maju terus programmer indonesia  :-bd

« Edit Terakhir: Januari 11, 2012, 04:53:57 PM oleh hapackers »

Offline Ryan BeKaBe

  • Admin
  • Pro500
  • *******
  • Tulisan: 1.928
  • Reputation: 65534
  • ToS (Team of SmadAV)
    • Lihat Profil
    • BeKaBe
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #1 pada: Januari 08, 2012, 03:41:43 PM »
Wah, ini nih yang selama ini dicari rekan2 yang sudah mulai menuju level lanjutan dari teknik RTP.
Thq.
Berhubung saya tak pakai Windows 7 :( , saya main php lagi saja ah. ;)

Perbaikan dari http://smadaver.com/programming/(ask)-bagaimana-cara-membuat-rtp-di-antivirus-sendiri-(vb6)/msg176083/#msg176083 agar support Windows 7/Vista.
« Edit Terakhir: Januari 08, 2012, 03:46:17 PM oleh Ryan BeKaBe »
Kembangkan dan aplikasikan imajinasi mu!
Janganlah kau biarkan layu!
I believe you can do it!

Offline RifqiSah

  • Pro500
  • ******
  • Tulisan: 919
  • Reputation: 820
  • Jenis kelamin: Pria
  • © 2016 Alrif Technology
    • Lihat Profil
    • Alrif Technology
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #2 pada: Januari 08, 2012, 07:48:34 PM »
itu di windows xp jalan ga ya ? ???

Offline M. Ridzky

  • Forum Developer
  • Pro200
  • ***
  • Tulisan: 227
  • Reputation: 23461
  • Jenis kelamin: Pria
    • Lihat Profil
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #3 pada: Januari 08, 2012, 08:23:40 PM »
 :o Sesuai judul,, hanya untuk Windows Vista & Windows 7,,, klo di XP coba pke cara yg ada di thread sebelah,, klo mau bikin RTP AV tinggal sesuain aja, Cek versi windowsnya

Offline RifqiSah

  • Pro500
  • ******
  • Tulisan: 919
  • Reputation: 820
  • Jenis kelamin: Pria
  • © 2016 Alrif Technology
    • Lihat Profil
    • Alrif Technology
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #4 pada: Januari 08, 2012, 08:39:21 PM »
oh ... :)
barangkali bisa kan enak ( cuma 1 tidak dobel ) .. :D

# Nice share gan ... :-bd

Offline Dimas_97

  • Pro500
  • ******
  • Tulisan: 655
  • Reputation: 15149
  • Jenis kelamin: Pria
  • ninja's angel
    • Lihat Profil
    • Story place
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #5 pada: Januari 09, 2012, 01:39:34 PM »
Berarti harus ada bagian checking OS, kalo 7&vista pake yang di atas, XP ke bawah di thread sebelah.
Kutip
8) jadikan setiap langkah adalah ibadah! 8)

Offline M. Ridzky

  • Forum Developer
  • Pro200
  • ***
  • Tulisan: 227
  • Reputation: 23461
  • Jenis kelamin: Pria
    • Lihat Profil
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #6 pada: Januari 09, 2012, 04:23:11 PM »
 ;) Yup bener sekali, klo mau make kode diatas buat RTP antivirus, jangan lupa check dulu Windows yang digunakan, klo windowsnya Vista atw 7 silahkan pake kode diatas, nah klo windowsnya XP bisa pke kode di thread sebelah..  :-bd

Offline meong

  • Pro100
  • ****
  • Tulisan: 121
  • Reputation: 203
    • Lihat Profil

Offline fajar234

  • Pro100
  • ****
  • Tulisan: 178
  • Reputation: 210
  • Jenis kelamin: Pria
    • Lihat Profil
    • Simpel Tapi Menarik
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #8 pada: Januari 10, 2012, 07:51:20 AM »
sya ambil buat belajar gan ilmunya. Barangkali nanti brguna utk bkin Av sndri.

Offline M. Ridzky

  • Forum Developer
  • Pro200
  • ***
  • Tulisan: 227
  • Reputation: 23461
  • Jenis kelamin: Pria
    • Lihat Profil
Re: (Share) Mendapatkan Direktory Aktif - Windows Vista & 7
« Jawab #9 pada: Januari 10, 2012, 07:54:08 AM »
not recomended untuk rtp.. coba check methode hooking

http://smadaver.com/programming/sedikit-tutorial-tentang-hooking/
http://smadaver.com/programming/example-monitor-api/

Bener untuk teknik advanced cara diatas tidak direkomendasikan, tapi untuk ukuran AV Lokal itu udah lebih dari cukup daripada ngk bisa bikin RTP sama sekali, hehe tau sendiri lah AV lokal masih belum bisa menggunakan teknik hooking, untuk itu penggantinya yang sederhana aja  :P
« Edit Terakhir: Januari 10, 2012, 07:55:51 AM oleh hapackers »