dcsimg
Results 1 to 14 of 14

Thread: [RESOLVED] Change Cursor while running the program (not at the beggining)

  1. #1

    Thread Starter
    Member
    Join Date
    Jan 2016
    Posts
    51

    Resolved [RESOLVED] Change Cursor while running the program (not at the beggining)

    Today I posted a thread asking how to change the cursor (http://www.vbforums.com/showthread.p...r-outside-form) and .paul. got me the code but now that I tried on my project I noticed that it only works on the event load (and closed) because the cursor/mouse isn't loaded or something like that.
    The thing is that in my project, I want to press Alt+1to9 (I have that code) that load a cursor if I press Alt+1, or other for Alt+2... (one cursor for each 1 to 9).
    Summing up, I wanna change the cursor using a WaitCursor or DeleteCursor or ChageCursor or wharever the right code is (I don't know).

    Please don't reply with links, but with the whole code that makes the cursor unload or disappear so that I can change it and that makes it load or appear again. I hope that this isn't too confusing

  2. #2

    Thread Starter
    Member
    Join Date
    Jan 2016
    Posts
    51

    Re: Change Cursor while running the program (not at the beggining)

    So, the project is this one:
    Code:
    Imports System.Runtime.InteropServices
    Public Class Form1
        <DllImport("user32.dll")> Public Shared Function CopyIcon(ByVal hIcon As IntPtr) As IntPtr
        End Function
        <DllImport("user32.dll")> Private Shared Function LoadCursorFromFile(ByVal fileName As String) As IntPtr
        End Function
        <DllImport("User32.dll")> Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
        End Function
        <DllImport("user32.dll")> Private Shared Function SetSystemCursor(ByVal hCursor As IntPtr, ByVal id As Integer) As Boolean
        End Function
        <DllImport("User32.dll")> Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
        End Function
        Const OCR_NORMAL As UInteger = 32512
        Dim oldCursor As IntPtr
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            oldCursor = CopyIcon(Cursors.Default.CopyHandle)
            SetSystemCursor(CopyIcon(LoadCursorFromFile("C:\Users\Rúben\Desktop\Rúben\Texturas\Cursor Grass Block 3D.cur")), OCR_NORMAL)
            Me.PictureBox2.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox2.Location))
            Me.PictureBox2.Parent = Me.PictureBox1
            Me.PictureBox3.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox3.Location))
            Me.PictureBox3.Parent = Me.PictureBox1
            Me.PictureBox4.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox4.Location))
            Me.PictureBox4.Parent = Me.PictureBox1
            Me.PictureBox5.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox5.Location))
            Me.PictureBox5.Parent = Me.PictureBox1
            Me.PictureBox6.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox6.Location))
            Me.PictureBox6.Parent = Me.PictureBox1
            Me.PictureBox7.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox7.Location))
            Me.PictureBox7.Parent = Me.PictureBox1
            Me.PictureBox8.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox8.Location))
            Me.PictureBox8.Parent = Me.PictureBox1
            Me.PictureBox9.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox9.Location))
            Me.PictureBox9.Parent = Me.PictureBox1
            Me.PictureBox10.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox10.Location))
            Me.PictureBox10.Parent = Me.PictureBox1
            RegisterHotKey(Me.Handle, 0, &H1, 0)
            RegisterHotKey(Me.Handle, 100, &H1, Keys.D1)
            RegisterHotKey(Me.Handle, 200, &H1, Keys.D2)
            RegisterHotKey(Me.Handle, 300, &H1, Keys.D3)
            RegisterHotKey(Me.Handle, 400, &H1, Keys.D4)
            RegisterHotKey(Me.Handle, 500, &H1, Keys.D5)
            RegisterHotKey(Me.Handle, 600, &H1, Keys.D6)
            RegisterHotKey(Me.Handle, 700, &H1, Keys.D7)
            RegisterHotKey(Me.Handle, 800, &H1, Keys.D8)
            RegisterHotKey(Me.Handle, 900, &H1, Keys.D9)
        End Sub
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            If m.Msg = &H312 Then
                Dim id As IntPtr = m.WParam
                Select Case (id.ToString)
                    Case "0"
                        PictureBox1.Image = My.Resources.Toolbar_0
                        PictureBox1.Visible = True
                    Case "100"
                        PictureBox1.Image = My.Resources.Toolbar_1
                        PictureBox1.Visible = True
                    Case "200"
                        PictureBox1.Image = My.Resources.Toolbar_2
                        PictureBox1.Visible = True
                    Case "300"
                        PictureBox1.Image = My.Resources.Toolbar_3
                        PictureBox1.Visible = True
                    Case "400"
                        PictureBox1.Image = My.Resources.Toolbar_4
                        PictureBox1.Visible = True
                    Case "500"
                        PictureBox1.Image = My.Resources.Toolbar_5
                        PictureBox1.Visible = True
                    Case "600"
                        PictureBox1.Image = My.Resources.Toolbar_6
                        PictureBox1.Visible = True
                    Case "700"
                        PictureBox1.Image = My.Resources.Toolbar_7
                        PictureBox1.Visible = True
                    Case "800"
                        PictureBox1.Image = My.Resources.Toolbar_8
                        PictureBox1.Visible = True
                    Case "900"
                        PictureBox1.Image = My.Resources.Toolbar_9
                        PictureBox1.Visible = True
                End Select
            End If
            MyBase.WndProc(m)
        End Sub
        Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
            PictureBox1.Visible = False
        End Sub
        Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)
            UnregisterHotKey(Me.Handle, 0)
            UnregisterHotKey(Me.Handle, 100)
            UnregisterHotKey(Me.Handle, 200)
            UnregisterHotKey(Me.Handle, 300)
            UnregisterHotKey(Me.Handle, 400)
            UnregisterHotKey(Me.Handle, 500)
            UnregisterHotKey(Me.Handle, 600)
            UnregisterHotKey(Me.Handle, 700)
            UnregisterHotKey(Me.Handle, 800)
            UnregisterHotKey(Me.Handle, 900)
        End Sub
        Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
            SetSystemCursor(CopyIcon(oldCursor), OCR_NORMAL)
        End Sub
    End Class
    to make it easier to understand(except red marks):
    Name:  Code.jpg
Views: 86
Size:  79.1 KB
    ...the form looks like this(except red comments):
    Name:  Form.jpg
Views: 83
Size:  16.6 KB
    ...and finally, an important thing is this properties of the form:
    Name:  Properties.png
Views: 83
Size:  2.1 KB
    The form is invisible (and, btw, screen size) which makes the cursor be like it outside the form (thats why I wanted that code on the other thread) AND the form isn't Sizable (none) which I don't know why but makes an error (kind off) that doesn't do the code of the closed event... (every time I run it I have to go to the Control Panel to change my default cursor to the right one
    This is confusing! Help me!

    EDIT: You may wanna look at this too...
    Name:  Documents.jpg
Views: 85
Size:  23.2 KB

  3. #3
    .NUT jmcilhinney's Avatar
    Join Date
    May 2005
    Location
    Sydney, Australia
    Posts
    102,607

    Re: Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by rdrmdr View Post
    Please don't reply with links, but with the whole code that makes the cursor unload or disappear so that I can change it and that makes it load or appear again. I hope that this isn't too confusing
    I don't know the answer to your question but I felt compelled to address this. It's not really for you to say what we can reply with. If someone provides some help and you want to ignore it then that's your prerogative but what you've said there basically amounts to "I don't want to have to make any effort to put a solution together from relevant information. I just want you to write my code for me". I can't speak for others but that tends to make me very unlikely to offer help of any kind.

  4. #4

    Thread Starter
    Member
    Join Date
    Jan 2016
    Posts
    51

    Re: Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by jmcilhinney View Post
    I don't know the answer to your question but I felt compelled to address this. It's not really for you to say what we can reply with. If someone provides some help and you want to ignore it then that's your prerogative but what you've said there basically amounts to "I don't want to have to make any effort to put a solution together from relevant information. I just want you to write my code for me". I can't speak for others but that tends to make me very unlikely to offer help of any kind.
    *Poker Face*
    You probably didn't saw the other thread...
    I only said that because people like to send links without even known exactly if the information is there, like, they search on google (which I know how to do that) and give me an link to a site that I probably already searched on.
    The problem is that there's no explicit information about what I need and I know that there are people who know this but sometimes they say to do something but I don't really know how to.

    Believe me, I'm searching for this problem for 4 days
    EDIT: ...and you can see that I really need it, I wouldn't post all of that information for nothing. I want for the expert helpers to have no questions about what I'm asking. Sometimes, people link an really old program, or not of VB2010 (my version) or even C++/C#...(if I help someone I will try the code myself before posting it, just, Sayan)
    Last edited by rdrmdr; Jan 29th, 2016 at 05:14 AM.

  5. #5

    Thread Starter
    Member
    Join Date
    Jan 2016
    Posts
    51

    Re: Change Cursor while running the program (not at the beggining)

    I'm gonna set this thread as [RESOLVED] because it's almost all explained on this other thread:
    http://www.vbforums.com/showthread.p...e-document-cur

  6. #6
    VB For Fun Edgemeal's Avatar
    Join Date
    Sep 2006
    Location
    WindowFromPoint
    Posts
    4,251

    Re: Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by rdrmdr View Post
    SetSystemCursor(CopyIcon(LoadCursorFromFile("C:\Users\Rúben\Desktop\Rúben\Texturas\Cursor Grass Block 3D.cur")), OCR_NORMAL)

    FYI: ^ that has a GDI leak which will eventually crash your app!
    CopyIcon(LoadCursorFromFile) is creating a copy of the cursor LoadCursorFromFile has just created, so now you have two cursors in memory.

    When you create cursors and icons its also your job to destroy them when no longer needed otherwise your app eventually exceeds the GDI limit and crashes. In this case the SetSystemCursor API destroys the cursor you pass to it, but that still leaves one cursor in memory, and since you have no reference to it you can''t even destroy it if you wanted to, the simple fix is to remove CopyIcon.

  7. #7

    Thread Starter
    Member
    Join Date
    Jan 2016
    Posts
    51

    Re: Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by Edgemeal View Post
    FYI: ^ that has a GDI leak which will eventually crash your app!
    CopyIcon(LoadCursorFromFile) is creating a copy of the cursor LoadCursorFromFile has just created, so now you have two cursors in memory.

    When you create cursors and icons its also your job to destroy them when no longer needed otherwise your app eventually exceeds the GDI limit and crashes. In this case the SetSystemCursor API destroys the cursor you pass to it, but that still leaves one cursor in memory, and since you have no reference to it you can''t even destroy it if you wanted to, the simple fix is to remove CopyIcon.
    Are you saying that it's not destroying automaticaly when I close the program!? If so, where can I go check it manually (like, a a folder) or how do I delete it and what code do I add to destroy it?

    In another part, help me whith this problem:
    http://www.vbforums.com/showthread.php?821173

  8. #8
    VB For Fun Edgemeal's Avatar
    Join Date
    Sep 2006
    Location
    WindowFromPoint
    Posts
    4,251

    Re: Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by rdrmdr View Post
    Are you saying that it's not destroying automaticaly when I close the program!? If so, where can I go check it manually (like, a a folder) or how do I delete it and what code do I add to destroy it?
    In most cases VB doesn't have a clue what you're do with Win32 API calls.
    My main concern is the (CopyIcon(LoadCursorFromFile() call.

    When you use SetSystemCursor(CopyIcon(LoadCursorFromFile() then your apps GDI count is most likely going up every time you call that line of code, thats bad!
    If instead you use SetSystemCursor(LoadCursorFromFile()then your apps GDI count should be stable.

    To see the GDI count I just use Windows TaskManager with the GDI Object column showing, I think each app is limited to 10,000 objects by default.

  9. #9

    Thread Starter
    Member
    Join Date
    Jan 2016
    Posts
    51

    Re: Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by Edgemeal View Post
    In most cases VB doesn't have a clue what you're do with Win32 API calls.
    My main concern is the (CopyIcon(LoadCursorFromFile() call.

    When you use SetSystemCursor(CopyIcon(LoadCursorFromFile() then your apps GDI count is most likely going up every time you call that line of code, thats bad!
    If instead you use SetSystemCursor(LoadCursorFromFile()then your apps GDI count should be stable.

    To see the GDI count I just use Windows TaskManager with the GDI Object column showing, I think each app is limited to 10,000 objects by default.
    Okay, I think I got it. I removed the CopyIcon that weren't necessary and it stills works fine.
    I understood what you mean now. I was confusing at first because it seemed like you were saying that it was saving the icons on a folder or something like that, but now I know you were talking about the (temporal) memory of the app that cleans up when I end the app.
    Go help me on this other problem (please) so that I can continue doing my project
    http://www.vbforums.com/showthread.php?821173
    Last edited by rdrmdr; Feb 1st, 2016 at 03:45 PM. Reason: Grammar

  10. #10
    eXtreme Programmer .paul.'s Avatar
    Join Date
    May 2007
    Location
    Chelmsford UK
    Posts
    22,365

    Re: [RESOLVED] Change Cursor while running the program (not at the beggining)

    @Edgemeal...

    CopyIcon is recommended because the cursor loaded in SetSystemCursor is deleted:

    https://msdn.microsoft.com/en-us/lib...or=-2147217396

  11. #11
    VB For Fun Edgemeal's Avatar
    Join Date
    Sep 2006
    Location
    WindowFromPoint
    Posts
    4,251

    Re: [RESOLVED] Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by .paul. View Post
    @Edgemeal...

    CopyIcon is recommended because the cursor loaded in SetSystemCursor is deleted:

    https://msdn.microsoft.com/en-us/lib...or=-2147217396
    All it says to me is, don't expect to use the cursor you just created anywhere else because this API destrys the cursor you pass to it,

    Run this and it will stop with an error, look at the apps GDI count, now remove CopyIcon from the call and run again, no more error and GDI count is still very-very low.

    Code:
    Imports System.Runtime.InteropServices
    
    Public Class Form1
    
        Private old_NORMAL As IntPtr
    
        Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            RestoreSystemCursors() ' restore cursor on exit
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ' save copy of sys cursor.
            If old_NORMAL = IntPtr.Zero Then old_NORMAL = CopyIcon(Cursors.Default.CopyHandle)
    
            ' Load cursor from file multiple times,
            For i = 1 To 4000
                ' NOTE: Using CopyIcon will eventually use up all your GDI objects!
                If Not (SetSystemCursor(CopyIcon(LoadCursorFromFile("m:\aero_pen.cur")), OCR_NORMAL)) Then
                    MessageBox.Show("Stopped at " & i.ToString & " -  WARNING!!! SetSystemCursor API FAILED!")
                    Exit For
                End If
            Next
        End Sub
    
        Private Sub RestoreSystemCursors()
            If old_NORMAL <> IntPtr.Zero Then
                If Not (SetSystemCursor(old_NORMAL, OCR_NORMAL)) Then MessageBox.Show("WARNING!!! SetSystemCursor OCR_NORMAL FAILED!")
                old_NORMAL = IntPtr.Zero
            End If
        End Sub
    
    #Region "API"
    
        Private Const OCR_NORMAL As Integer = 32512
    
        <DllImport("user32.dll")> _
        Private Shared Function SetSystemCursor(ByVal hCursor As IntPtr, ByVal id As Integer) As Boolean
        End Function
    
        <DllImport("user32.dll")>
        Private Shared Function LoadCursorFromFile(ByVal fileName As String) As IntPtr
        End Function
    
        <DllImport("user32.dll")> _
        Public Shared Function CopyIcon(ByVal hIcon As IntPtr) As IntPtr
        End Function
    
    #End Region
    
    End Class

  12. #12
    eXtreme Programmer .paul.'s Avatar
    Join Date
    May 2007
    Location
    Chelmsford UK
    Posts
    22,365

    Re: [RESOLVED] Change Cursor while running the program (not at the beggining)

    Maybe i misread it...

  13. #13

    Thread Starter
    Member
    Join Date
    Jan 2016
    Posts
    51

    Re: [RESOLVED] Change Cursor while running the program (not at the beggining)

    No need for more conversation about it. I think that using the CopyIcon is only necessary to the variable oldCursor so that you can change it back to the original. No need to copy the custom cursors, only load...
    Last edited by rdrmdr; Feb 2nd, 2016 at 08:10 AM.
    When someone talks sh*t about me:


    Are you ta'king to me?..
    Are you ta'king to the special one?..
    Are you ta'king to the special one?..
    There's nobody else here,
    you must be talking to the special one!
    Are you ta'king to me?
    Are are, are you ta'king to me?


  14. #14
    VB For Fun Edgemeal's Avatar
    Join Date
    Sep 2006
    Location
    WindowFromPoint
    Posts
    4,251

    Re: [RESOLVED] Change Cursor while running the program (not at the beggining)

    Quote Originally Posted by rdrmdr View Post
    No need to copy the custom cursors, only load...
    That all depends, cursors don't generally use much memory and would be more efficient and have better performance if loaded from memory instead of files.

    In this case SetSystemCursor is destroying the cursor that you pass to it, So what I'd probably do if working with cursor files then would be to only load the cursor from files once and store their handles in a list, and when I call SetSystemCursor I would pass it a COPY of my cursor using CopyIcon.

    Also to make sure we only make one copy of a system cursor (as needed) and avoid another possible GDI leak I simply check and set my old_system_cursor variables to Zero. Since I wrote it up that way I might as well share it..

    Code:
    Imports System.Runtime.InteropServices
    
    Public Class Form1
        Private old_NORMAL As IntPtr
    
        ' list to hold our cursor handles.
        Private hCursors As New List(Of IntPtr)
    
        Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
            RestoreSystemCursors() ' restore system cursors.
            ' clean up the cursors we created!
            For Each hCur In hCursors ' death to GDI leaks!
                If hCur <> IntPtr.Zero Then DestroyCursor(hCur)
            Next
            hCursors.Clear() ' clear list of invalid handles!
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ' 2 buttons,..
            Button1.Text = "Next Cursor"
            Button2.Text = "Restore"
            ' Load all cursors in C:\WINDOWS\CURSORS\, save cursor handles to list.
            For Each cursorFile In IO.Directory.GetFiles("C:\WINDOWS\CURSORS\", "*.cur")
                Dim hCur = LoadCursorFromFile(cursorFile) 'If successful, the return value is a handle to the new cursor.
                If hCur <> IntPtr.Zero Then hCursors.Add(hCur) 'If fails, the return value is NULL.
            Next
            ' Return the count of GDI objects.
            Me.Text = GetGuiResources(Process.GetCurrentProcess.Handle, GR_GDIOBJECTS).ToString
        End Sub
    
        ' example, change to next cursor in list.
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Static index As Integer
            If index > hCursors.Count - 1 Then index = 0 ' end reached, start from the begining.
            ChangeStandardArrow(hCursors(index))
            index += 1 ' increment index
        End Sub
    
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            RestoreSystemCursors()
            Me.Text = GetGuiResources(Process.GetCurrentProcess.Handle, GR_GDIOBJECTS).ToString
        End Sub
    
        Private Sub RestoreSystemCursors()
            ' standard arrow
            If old_NORMAL <> IntPtr.Zero Then
                If Not (SetSystemCursor(old_NORMAL, OCR_NORMAL)) Then MessageBox.Show("WARNING!!! Restoring OCR_NORMAL FAILED!")
                old_NORMAL = IntPtr.Zero ' SetSystemCursor destroyed the cursor (or is invalid), so reset our variable!
            End If
        End Sub
    
        ' change standard arrow cursor.
        Private Sub ChangeStandardArrow(hCursor As IntPtr)
            ' NOTE: SetSystemCursor destroys the cursor you pass to it, so make & use a copy!
            Dim hIcon = CopyIcon(hCursor) 'If the function succeeds, the return value is a handle to the duplicate icon.
            'If the function fails, the return value is NULL.
            If hIcon <> IntPtr.Zero Then
                ' save a copy of the current standard arrow cursor if we don't already have a copy!
                If old_NORMAL = IntPtr.Zero Then old_NORMAL = CopyIcon(Cursors.Default.CopyHandle)
                ' Change cursor.
                If Not (SetSystemCursor(hIcon, OCR_NORMAL)) Then
                    MessageBox.Show("WARNING!!! SetSystemCursor(MyCursor, OCR_NORMAL) FAILED!")
                End If
            Else
                MessageBox.Show("WARNING!!! CopyIcon(hCursor) FAILED!")
            End If
            Me.Text = GetGuiResources(Process.GetCurrentProcess.Handle, GR_GDIOBJECTS).ToString
        End Sub
    
    #Region "API"
    
        Private Const OCR_NORMAL As Integer = 32512
    
        <DllImport("user32.dll")> _
        Private Shared Function CopyIcon(ByVal hIcon As IntPtr) As IntPtr
        End Function
    
        <DllImport("user32.dll")> _
        Private Shared Function SetSystemCursor(ByVal hCursor As IntPtr, ByVal id As Integer) As Boolean
        End Function
    
        <DllImport("user32.dll")>
        Private Shared Function LoadCursorFromFile(ByVal fileName As String) As IntPtr
        End Function
    
        <DllImport("user32.dll")> _
        Private Shared Function DestroyCursor(hCursor As IntPtr) As Boolean
        End Function
    
        <DllImport("User32")> _
        Private Shared Function GetGuiResources(hProcess As IntPtr, uiFlags As Integer) As Integer
        End Function
    
        'GetGuiResources, uiFlags, https://msdn.microsoft.com/en-us/library/windows/desktop/ms683192(v=vs.85).aspx
        Private Const GR_GDIOBJECTS = 0 'Return the count of GDI objects.
        Private Const GR_GDIOBJECTS_PEAK = 2 'Return the peak count of GDI objects.
        '                                     Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP:  This value is not supported
        '                                     until Windows 7 and Windows Server 2008 R2.
        Private Const GR_USEROBJECTS = 1 'Return the count of USER objects.
        Private Const GR_USEROBJECTS_PEAK = 4 'Return the peak count of USER objects.
        '                                       Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP:  This value is not supported
        '                                       until Windows 7 and Windows Server 2008 R2.
    #End Region
    
    End Class
    Last edited by Edgemeal; Feb 2nd, 2016 at 03:13 PM. Reason: Code Changes

Posting Permissions

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



Featured


Click Here to Expand Forum to Full Width