Results 1 to 25 of 25

Thread: [RESOLVED] Find all open windows to close

  1. #1

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Resolved [RESOLVED] Find all open windows to close

    I'm trying to make a simple shutdown program, but it takes my slow computer to shutdown 5-10 big programs, so to save time I want the program to shutdown all open windows for me. I'v got a code to close the window, but how would I get a list of open windows and maybe put them in an array.

    Shutdown code:

    In module
    VB Code:
    1. Option Explicit
    2.  
    3. Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    4.  
    5. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    6.         (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    7. Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" _
    8.         (ByVal hwnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
    9. Private Declare Function EnumWindows Lib "user32.dll" _
    10.         (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    11.  
    12. 'close apps
    13. Private Const WM_CLOSE = &H10
    14. Private Const WM_QUIT = &H12
    15. Private Target As String
    16.  
    17. ' Check a returned task to see if we should kill it.
    18. Private Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
    19. Dim buf As String * 256
    20. Dim title As String
    21. Dim length As Long
    22.  
    23.     ' Get the window's title.
    24.     length = GetWindowText(app_hWnd, buf, Len(buf))
    25.     title = Left$(buf, length)
    26.  
    27.     ' See if this is the target window.
    28.     If InStr(title, Target) <> 0 Then
    29.         ' Kill the window.
    30.         SendMessage app_hWnd, WM_CLOSE, 0, 0
    31.     End If
    32.  
    33.     ' Continue searching.
    34.     EnumCallback = 1
    35. End Function
    36. ' Ask Windows for the list of tasks.
    37. Public Sub TerminateTask(app_name As String)
    38.     Target = app_name
    39.     EnumWindows AddressOf EnumCallback, 0
    40. End Sub

    Close code
    VB Code:
    1. TerminateTask "Microsoft Visual Basic"

    Any help appreciated!
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  2. #2
    PowerPoster
    Join Date
    Feb 2006
    Location
    East of NYC, USA
    Posts
    5,691

    Re: Find all open windows to close

    If you force shut down a program you may damage data, which is why Windows takes a long time to shut down. It effectively calls Form_QueryUnload in every running program to see whether it can shut down. If a program says no, Windows stops shutting down.
    The most difficult part of developing a program is understanding the problem.
    The second most difficult part is deciding how you're going to solve the problem.
    Actually writing the program (translating your solution into some computer language) is the easiest part.

    Please indent your code and use [HIGHLIGHT="VB"] [/HIGHLIGHT] tags around it to make it easier to read.

    Please Help Us To Save Ana

  3. #3
    Oi, fat-rag! bushmobile's Avatar
    Join Date
    Mar 2004
    Location
    on the poop deck
    Posts
    5,592

    Re: Find all open windows to close

    He's not forcing them - he's just posting a WM_CLOSE - which is pretty much what happens at Shutdown anyway...I don't really see the point in doing it.

  4. #4
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    this is forcing ...?

    One program that hates just turning off the power .. is FireFox .. im always loosing my Bookmarks cause of that . .. like in Power Outages .. nothing else ever gets corrupted .. just darn firefox .. :-(

    VB Code:
    1. Option Explicit
    2.  
    3. Private Sub Command1_Click()
    4.     TerminateProcess ("msmsgs.exe")
    5. End Sub
    6.  
    7. Private Sub TerminateProcess(app_exe As String)
    8.     Dim Process As Variant
    9.     For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process Where Name = '" & app_exe & "'")
    10.         Process.Terminate
    11.     Next
    12. End Sub

    So i imagine it would be something like this .. though if a program is locked by another program you will have to keep looping until the other program is closed then .. anyway i havent tested this ..

    VB Code:
    1. Dim Process As Variant
    2.     For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process Where Name <> 'myVBProgram.exe'")
    3.         Process.Terminate
    4.     Next
    5. 'shut down now  ..

    PS. Bush, do you know what tpye the Process would be, instead of using Variant? thanks.
    Last edited by rory; Jun 22nd, 2006 at 04:57 PM.

  5. #5
    Oi, fat-rag! bushmobile's Avatar
    Join Date
    Mar 2004
    Location
    on the poop deck
    Posts
    5,592

    Re: Find all open windows to close

    yes, i believe that is forcing it - that's why Fx goes weird. You can test it by opening a new word document and then trying it - if you don't get a prompt to save then it's forcing it.

    Regarding the process type - since you're late-binding you won't be able to declare it as anything more specific than Object.

  6. #6
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    Yep that killed word without the question ..

  7. #7

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Exclamation Re: Find all open windows to close

    Actually, My code works wonderfully (for me), but is there a code to get a list of all open windows? Thanx

    EDIT:
    WM_CLOSE - which is pretty much what happens at Shutdown anyway...I don't really see the point in doing it.
    I'd like to use this in other programs too, like this, so as not to be guessing at the names of programs when trying to work with them, e.g. add a list of all open windows to a list box.
    Last edited by ididntdoit; Jun 22nd, 2006 at 06:20 PM.
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  8. #8
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    all processes .. or just the windows ..?

    also, Was just playing a round with the services .. check this code out ..
    Turns Themes off then on again .. :-)

    VB Code:
    1. Option Explicit
    2.  
    3. Private Sub Command1_Click()
    4.     If RunService("Themes", False) Then
    5.         MsgBox "Themes Turned Off"
    6.         If RunService("Themes", True) Then MsgBox ("Themes Back on")
    7.     Else
    8.         MsgBox "Error"
    9.     End If
    10. End Sub
    11.  
    12. Private Function RunService(Name As String, Enabled As Boolean)
    13.     Dim colServices As Variant
    14.     Dim objService As Variant
    15.     Dim ret As Long
    16.     Set colServices = GetObject("winmgmts:").ExecQuery _
    17.             ("Select * from Win32_Service where Name='" & Name & "'")
    18.     For Each objService In colServices
    19.         If Enabled Then
    20.             ret = objService.StartService()
    21.         Else
    22.             ret = objService.StopService()
    23.         End If
    24.         If ret = 0 Then
    25.             RunService = True
    26.         End If
    27.     Next
    28. End Function

  9. #9
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    VB Code:
    1. Private Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
    2.     Dim buf As String * 256
    3.     Dim title As String
    4.     Dim length As Long
    5.     length = GetWindowText(app_hWnd, buf, Len(buf))
    6.     title = Left$(buf, length)
    7.  
    8.     If Len(Trim$(title)) Then Debug.Print title '***** SHOW THE TITLES ****
    9.  
    10.     If InStr(title, Target) <> 0 Then
    11.         TargetOpen = True
    12.         SendMessage app_hWnd, WM_CLOSE, 0, 0
    13.     End If
    14.     EnumCallback = 1
    15. End Function

  10. #10
    Oi, fat-rag! bushmobile's Avatar
    Join Date
    Mar 2004
    Location
    on the poop deck
    Posts
    5,592

    Re: Find all open windows to close

    as rory hasn't explained - you are already enumerating through all the open windows with EnumWindows - just post WM_CLOSE messages to all of them (you'll want to use PostMessage)
    VB Code:
    1. Private Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
    2.     PostMessage app_hWnd, WM_CLOSE, 0, 0
    3.     EnumCallback = True
    4. End Function
    but i don't think this does what you (ultimately) want - your trying to recreate something that already happens at the time it would normally happen - i just don't see the point

  11. #11
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    Yep .. that will close the titles .. but wont get all programs .. eg. MSN messenger when minimized in the SYstem tray .. Enum doesnt catch it ..

    Here is the same thing above modified with the Processes .. to enter everything in a TExt box ..

    Put a Text1 Textbox on your Form1 .. MultiLine, Vertical Scroll bars .. make it tall and wide ..

    This replaces the module code above .. this will list all open windows and processes seperately .. doesnt close anything BTW.

    VB Code:
    1. Option Explicit
    2.  
    3. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    4. (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    5. Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" _
    6. (ByVal hwnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
    7. Private Declare Function EnumWindows Lib "user32.dll" _
    8. (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    9.  
    10. Private Const WM_CLOSE = &H10
    11. Private Const WM_QUIT = &H12
    12.  
    13. Private Target As String
    14. Public TargetOpen As Boolean
    15.  
    16. Private Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
    17.     Dim buf As String * 256
    18.     Dim title As String
    19.     Dim length As Long
    20.     length = GetWindowText(app_hWnd, buf, Len(buf))
    21.     title = Left$(buf, length)
    22.     If Len(Trim$(title)) Then
    23.         Form1.Text1 = Form1.Text1 & vbCrLf & title
    24.     End If
    25.     'If InStr(title, Target) <> 0 Then
    26.     '    TargetOpen = True
    27.     '    SendMessage app_hWnd, WM_CLOSE, 0, 0
    28.     'End If
    29.     EnumCallback = 1
    30. End Function
    31.  
    32. Public Sub TerminateTask(app_name As String, app_exe As String)
    33.     Dim Process As Variant
    34.     Form1.Text1 = Form1.Text1 & "WINDOW TITLES:" & vbCrLf & "=====================" & vbCrLf
    35.     'TargetOpen = False
    36.     'Target = app_name
    37.     EnumWindows AddressOf EnumCallback, 0
    38.     Form1.Text1 = Form1.Text1 & vbCrLf & vbCrLf & "PROCESS NAMES:" & _
    39.                   vbCrLf & "=====================" & vbCrLf & vbCrLf
    40.     For Each Process In GetObject("winmgmts:").ExecQuery("Select Name from Win32_Process")
    41.         Form1.Text1 = Form1.Text1 & Process.Name & vbCrLf
    42.     Next
    43. End Sub
    Last edited by rory; Jun 22nd, 2006 at 06:39 PM.

  12. #12

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Lightbulb Re: Find all open windows to close

    Don't Want to mess with processes, never know what there is in there to screw up accidentally

    EDIT: Srry. forgot to refresh my browser-

    How do you call the EnumCallBack? This is the sub that will list all the open windows right (i'm still new to a lot of system-related programming)?

    EDIT: Got it-it lists over 60 things as being open windows though, including things like Hamer Of Thor, and list sime things twice. I've never even heard of Hammer of Thor, and it's certainly not running on my computer. Help!
    Last edited by ididntdoit; Jun 22nd, 2006 at 06:46 PM.
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  13. #13
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    same as above ..

    CloseAllWindows

    VB Code:
    1. Option Explicit
    2.  
    3. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    4. (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    5. Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" _
    6. (ByVal hwnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
    7. Private Declare Function EnumWindows Lib "user32.dll" _
    8. (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    9.  
    10. Private Const WM_CLOSE = &H10
    11. Private Const WM_QUIT = &H12
    12.  
    13. Private Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
    14.     SendMessage app_hWnd, WM_CLOSE, 0, 0
    15.     EnumCallback = 1
    16. End Function
    17.  
    18. Public Sub CloseAllWindows()
    19.     EnumWindows AddressOf EnumCallback, 0
    20. End Sub

  14. #14
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    BTW that just brings up the ShutDown Dialog also as it closes the windows .. doesnt terminate all the processes either ..

  15. #15

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Re: Find all open windows to close

    I liked the code before my last post, but is there a way to make it only list windows, and only visible ones? (the only program ever in the tray is BitComet, which I always close manually), othere than a few issues of listing a million programs, it was great!
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  16. #16

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Cool Re: Find all open windows to close

    If possible, is there also/instead a method to get the class name of a window? I'm working on a panic program that hides any visible programs chosen as 'target' programs at a mouse click or key combo. I know ther's a manual way to do this with Spy++, but can you do it with code (and do you need the window name first?)?
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  17. #17
    Oi, fat-rag! bushmobile's Avatar
    Join Date
    Mar 2004
    Location
    on the poop deck
    Posts
    5,592

    Re: Find all open windows to close

    use the GetClassName API. you need the handle, but presumably you'll be enumerating all the windows anyway.

  18. #18

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Talking Re: Find all open windows to close

    Thanx, this code works great exept for needing the exact title of it, but my original question still stands: how can I get a list ofall open windows? Pls reply people!
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  19. #19
    Oi, fat-rag! bushmobile's Avatar
    Join Date
    Mar 2004
    Location
    on the poop deck
    Posts
    5,592

    Re: Find all open windows to close

    you already are - that is what EnumWindows does.

  20. #20
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: Find all open windows to close

    see post #11 .. title = Window Name of Every Open window ..

  21. #21

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Talking Re: Find all open windows to close

    Hmmmm... That code works perfectly, except for one crucial thing: it lists like 60 things, processes and hidden windows and all sorts of useless crap, I just want to 4-9 windws I have open - i.e. anything I can see, or anything in the task bar. Any way to mod that code toonly shot that which is in the task bar? Any suggestions greatly appreciated!
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  22. #22

    Thread Starter
    Fanatic Member ididntdoit's Avatar
    Join Date
    Apr 2006
    Location
    :uoıʇɐɔoן
    Posts
    765

    Talking Re: Find all open windows to close

    Never mind people, I got some code my self.

    VB Code:
    1. Option Explicit
    2.  
    3. Global qwerty As Integer
    4.  
    5. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    6.     ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    7.    
    8. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
    9.     ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    10.    
    11. ' Process And Memory
    12. Private Declare Function GetWindowThreadProcessId Lib "user32" ( _
    13.     ByVal hWnd As Long, lpdwProcessId As Long) As Long
    14.    
    15. Private Declare Function OpenProcess Lib "kernel32" ( _
    16.     ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    17.    
    18. Private Declare Function CloseHandle Lib "kernel32" ( _
    19.     ByVal hObject As Long) As Long
    20.    
    21. Private Declare Function VirtualFreeEx Lib "kernel32" ( _
    22.     ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
    23.    
    24. Private Declare Function VirtualAllocEx Lib "kernel32" ( _
    25.     ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, _
    26.     ByVal flProtect As Long) As Long
    27.    
    28. Private Declare Function ReadProcessMemory Lib "kernel32" ( _
    29.     ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, _
    30.     Optional lpNumberOfBytesWritten As Long) As Long
    31.  
    32. Const PROCESS_VM_READ = (&H10)
    33. Const PROCESS_VM_WRITE = (&H20)
    34. Const PROCESS_VM_OPERATION = (&H8)
    35. Const MEM_COMMIT = &H1000
    36. Const MEM_RESERVE = &H2000
    37. Const MEM_RELEASE = &H8000
    38. Const PAGE_READWRITE = &H4
    39.  
    40. Const WM_USER = &H400
    41. Const TB_ISBUTTONHIDDEN = (WM_USER + 12)
    42. Const TB_BUTTONCOUNT = (WM_USER + 24)
    43. Const TB_GETBUTTONTEXTA = (WM_USER + 45)
    44.  
    45. Public Sub ShowOpenWindows()
    46.     Dim hTaskBar As Long, pID As Long, hProcess As Long
    47.     Dim N As Long, lCount As Long, lNum As Long, lLen As Long
    48.     Dim sCaption As String * 128, lpCaption As Long
    49.      
    50.     hTaskBar = GetNotificationWindow
    51.     GetWindowThreadProcessId hTaskBar, pID
    52.     hProcess = OpenProcess(PROCESS_VM_READ Or PROCESS_VM_WRITE Or PROCESS_VM_OPERATION, 0, pID)
    53.    
    54.     lpCaption = VirtualAllocEx(hProcess, ByVal 0&, Len(sCaption), MEM_COMMIT Or MEM_RESERVE, PAGE_READWRITE)
    55.     lNum = SendMessage(hTaskBar, TB_BUTTONCOUNT, 0, ByVal 0&)
    56.    
    57.     Do Until lCount = lNum
    58.         lLen = SendMessage(hTaskBar, TB_GETBUTTONTEXTA, N, ByVal lpCaption)
    59.         If lLen > -1 Then
    60.             If SendMessage(hTaskBar, TB_ISBUTTONHIDDEN, N, 0&) = 0 Then
    61.                 ReadProcessMemory hProcess, ByVal lpCaption, ByVal sCaption, Len(sCaption)
    62.                   For qwerty = 0 To 5
    63.                      Form1.lstwindows(qwerty).AddItem Left$(sCaption, InStr(sCaption, vbNullChar) - 1)
    64.                   Next qwerty
    65.             End If
    66.             lCount = lCount + 1
    67.         End If
    68.         N = N + 1
    69.     Loop
    70.        
    71.     VirtualFreeEx 0, lpCaption, 0, MEM_RELEASE
    72.     CloseHandle hProcess
    73. End Sub
    74.  
    75. Private Function GetNotificationWindow() As Long
    76.     Dim lhWnd As Long
    77.     lhWnd = FindWindowEx(0&, 0&, "Shell_TrayWnd", vbNullString)
    78.     lhWnd = FindWindowEx(lhWnd, 0&, "ReBarWindow32", vbNullString)
    79.     lhWnd = FindWindowEx(lhWnd, 0&, "MSTaskSwWClass", vbNullString)
    80.     GetNotificationWindow = FindWindowEx(lhWnd, 0&, "ToolbarWindow32", vbNullString)
    81. End Function

    Don't recoall now where I got it, but if I got it from VBForums, and it was yours, let me know so I can reputate and thank you.
    Visit here to learn to make the VB interface fit you!.
    "I have not failed 10,000 times. I have successfully identified 10,000 ways that will not work" Thomas Edison
    "The day Microsoft makes something that doesn't suck is probably the day they start making vacuum cleaners" -- Ernst Jan Plugge

  23. #23

  24. #24
    PowerPoster
    Join Date
    May 2006
    Posts
    2,988

    Re: [RESOLVED] Find all open windows to close

    Quote Originally Posted by bushmobile
    I posted that today in answer to my own question: http://www.vbforums.com/showthread.php?t=413154
    is there a way to get it by Processes ..? or enum windows ..?

  25. #25
    PoorPoster iPrank's Avatar
    Join Date
    Oct 2005
    Location
    In a black hole
    Posts
    2,729

    Re: [RESOLVED] Find all open windows to close

    [NON-VB]
    I have set my computer's Power Button to Hibernet. In normal cases, if I need to shutdown/reboot, I use Start>Shutdown.
    But in case of a power cut or similar emergency, I just hibernate it by pressing the Power Button.
    During shutdown/hibernate process, turning off monitor will give you more battery power.
    Also, if you set the Power Button to Shutdown, it will always do a force shutdown.
    [/NON-VB]
    Usefull VBF Threads/Posts I Found . My flickr page .
    "I love being married. It's so great to find that one special person you want to annoy for the rest of your life." - Rita Rudner


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width