Welcome Guest!
 VB 6 Helper
 Previous Message All Messages Next Message 
VB6 Helper Newsletter  Rod Stephens
 May 20, 2004 18:02 PDT 

An early newsletter this week because I'll be out of town this weekend.

Last week's newletter included a link to HouseCall
(http://housecall.trendmicro.com), a free Web-based virus checker. It
was buried deeply in the newsletter, however, so I thought I should
mention it again.

I also want to mention AdAware (www.lavasoft.nu). It's a free (for
private use) tool for removing adware, spyware, adn other scumware from
your system. You may be surprised at how much of this junk can sneak
onto your machine. There is a new batch of these programs out there and
if you haven't downloaded a new version of AdAware lately, it may be a
good time to update.

Have a great week and thanks for subscribing!

Rod
RodSte-@vb-helper.com
==========

    VB6 Contents:
1. New HowTo: Make an MDI child form that displays only the system close
button and no system menu
2. Converted HowTo: Shutdown Windows
3. Converted HowTo: Implement standard File and Help menu commands
4. Converted HowTo: Give a program a simple one-time password
5. Converted HowTo: Validate a user name/password in a database
6. Converted HowTo: Verify the user's Windows password
7. Converted HowTo: Use the PolyPolyline API function to draw lots of
lines quickly
8. Converted HowTo: Print a centered image of a form in Landscape mode
9. Converted HowTo: Print a form's Labels and TextBoxes

    Both Contents:
10. New Link
11. Karen Watterson's Weekly Destinations and Diversions (D & D)
==========
++++++++++
   <VB6>
++++++++++
==========
1. New HowTo: Make an MDI child form that displays only the system close
button and no system menu
http://www.vb-helper.com/howto_mdi_close_only.html
http://www.vb-helper.com/HowTo/howto_mdi_close_only.zip

Set the form's:

    - MinButton = False
    - MaxButton = False
    - BorderStyle = Fixed Dialog
    - Icon = (None)

To set the icon, select the icon value in the Properties window and
press Delete.

This will make the form display the close button but not the others and
not the system menu.
==========
2. Converted HowTo: Shutdown Windows
http://www.vb-helper.com/howto_shutdown_windows.html
http://www.vb-helper.com/HowTo/howto_shutdown_windows.zip

Use the ExitWindowsEx or ExitWindows API functions.

Note that other applications can prevent normal shutdown. For example,
if the user is editing a file, the program may ask the user whether it
should save the changes. If the user cancels, the program will stop the
shutdown.

This technique seems to work more or less in Win 3.x, Windows 95,
Windows NT, and Windows 98. Let me know if you find that it does not
work on your system.

#If Win32 Then
    Private Declare Function Shutdown Lib "user32" Alias "ExitWindowsEx"
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    Private Const EWX_LOGOFF = 0
    Private Const EWX_SHUTDOWN = 1
    Private Const EWX_REBOOT = 2
    Private Const EWX_FORCE = 4
#Else
    Private Declare Function Shutdown Lib "User" Alias "ExitWindows"
(ByVal dwReturnCode As Long, ByVal wReserved As Integer) As Integer
    Private Const EW_REBOOTSYSTEM = &H43
    Private Const EW_RESTARTWINDOWS = &H42
#End If

Private SelectedOption As Integer

Private Sub Form_Load()
    #If Win32 Then
        ' Prepare for 32 bit ExitWindowsEx.
        optExitOption(0).Caption = "Normal Shutdown"
        optExitOption(0).Tag = EWX_SHUTDOWN

        optExitOption(1).Caption = "Reboot"
        optExitOption(1).Tag = EWX_REBOOT
        
        optExitOption(2).Caption = "Log Off"
        optExitOption(2).Tag = EWX_LOGOFF
        
        optExitOption(3).Caption = "Forced Shutdown"
        optExitOption(3).Tag = EWX_FORCE
    #Else
        ' Prepare for 16 bit ExitWindows.
        optExitOption(0).Caption = "Normal Shutdown"
        optExitOption(0).Tag = 0

        optExitOption(1).Caption = "Reboot"
        optExitOption(1).Tag = EW_REBOOTSYSTEM

        optExitOption(2).Caption = "Restart Windows"
        optExitOption(2).Tag = EW_RESTARTWINDOWS
        
        optExitOption(3).Visible = False
    #End If
End Sub

Private Sub cmdOk_Click()
Dim exit_option As Long

    exit_option = CLng(optExitOption(SelectedOption).Tag)
    Shutdown exit_option, 0
End Sub
==========
3. Converted HowTo: Implement standard File and Help menu commands
http://www.vb-helper.com/howto_standard_edit_menus.html
http://www.vb-helper.com/HowTo/howto_standard_edit_menus.zip

This example implements simple New, Open, Save, Save As, Exit, Help
Contents, Help Index, and Help About menu commands.

This example is somewhat limited. Search for "@@@" to find places you
may want to customize the program.

The program stores the name and title (file name without path) for the
loaded data file in the variables FileName and FileTitle. It tracks
whether the data is modified with the variable DataModified.

When the user wants to replace the current dadta (start a new file, open
an existing file, or close the program), it uses teh DataSafe function
to see if the current data is safe to discard. If DataModified is False,
then DataSafe simply returns True because there are no changes to save.

If the data has been modified, the program asks the user whether it
should save the changes. If the user clicks Yes, the program tries to
save the data. It then sets DataSafe to True if the save succeeded.

If the user clicks No, then DataSafe returns True to indicate that the
user doesn't want to save the data so it's okay to discard. If the user
clicks Cancel, then DataSafe returns False to indicate that it is not
safe to discard the changes.

Private FileName As String ' The full file name.
Private FileTitle As String ' The file name without path.

Private DataModified As Boolean

' Return True if the data is safe.
Private Function DataSafe() As Boolean
    ' No problem if the data is unmodified.
    If Not DataModified Then
        DataSafe = True
        Exit Function
    End If
    
    ' See if the user wants to save changes.
    Select Case MsgBox("The data has been modified. Do you want to save
the changes?", vbYesNoCancel)
        Case vbYes
            ' Save the data. Procedure SaveData
            ' will reset DataModified.
            mnuFileSave_Click
            DataSafe = Not DataModified
            
        Case vbNo
            ' Discard the changes to the data.
            DataSafe = True
            
        Case vbNo
            ' Cancel.
            DataSafe = False
    End Select
End Function

Subroutine LoadData loads data from a file. If it succeeds, it calls
SetDataModified to flag the data as not modified.

Subroutine SaveData saves the data and calls SetDataModified to flag the
data as not modified.

' Load data from the file.
'
' @@@ Modify to load data of the correct format.
Private Sub LoadData(ftitle As String, fname As String)
Dim fnum As Integer

    ' Open the file.
    fnum = FreeFile
    Open fname For Input As fnum
    
    ' Read all the bytes in the file into the
    ' TextBox.
    EditorText.Text = Input(LOF(fnum), fnum)
    
    ' Close the file.
    Close fnum

    ' Save the file name and title.
    FileTitle = ftitle
    FileName = fname
    
    ' Make sure the caption gets updated.
    DataModified = True
    SetDataChanged False
End Sub

' Save data into the file.
'
' @@@ Modify to save data in the correct format.
Private Sub SaveData(ftitle As String, fname As String)
Dim fnum As Integer

    ' Open the file.
    fnum = FreeFile
    Open fname For Output As fnum
    
    ' Write text from the TextBox into the file.
    Print #fnum, EditorText.Text
    
    ' Close the file.
    Close fnum
    
    ' Save the file name and title.
    FileTitle = ftitle
    FileName = fname
    
    ' Make sure the caption gets updated.
    DataModified = True
    SetDataChanged False
End Sub

Subroutine SetDataChanged sets DataModified to True or False and updates
the form's caption to show an asterisk if the data has been modified.

' Set DataModified. Display an asterisk in the
' form's Caption next to the file name if
' appropriate.
Private Sub SetDataChanged(changed As Boolean)
    ' Don't bother if it's already been done.
    If DataModified = changed Then Exit Sub
    
    DataModified = changed
    If changed Then
        Caption = "Editor*[" & FileTitle & "]"
    Else
        Caption = "Editor [" & FileTitle & "]"
    End If
End Sub

When the user changes the form's TextBox, its Change event handler calls
SetDataChanged to mark the data as changed.

' Mark the data as modified.
'
' @@@ Call DataChanged whenever the user
' @@@ changes the data.
Private Sub EditorText_Change()
    SetDataChanged True
End Sub

When the user tries to unload the form, the QueryUnload event handler
calls the DataSafe function and cancels the unload if the data is not
safe.

' Make sure the data is safe to unload.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Cancel = Not DataSafe
End Sub

If the user selects the Help menu's Contents command, the program sets a
Common Dialog control's HelpCommand property to cdlHelpContents. It sets
the dialog's HelpFile property to the path to the program's help file
and calls the dialog's ShowHelp method.

If the user selects the Help menu's Search command, the program sets a
Common Dialog control's HelpCommand property to cdlHelpIndex. It sets
the dialog's HelpFile property to the path to the program's help file
and calls the dialog's ShowHelp method.

See the code for details about the program's other menus work.

' Show the help contents.
'
' @@@ Create the help file SimpEdit.hlp.
Private Sub mnuHelpContents_Click()
    FileDialog.HelpCommand = cdlHelpContents
    FileDialog.HelpFile = App.Path & "\SimpEdit.hlp"
    FileDialog.ShowHelp
End Sub

' Display the help index so the user can search.
'
' @@@ Create the help file SimpEdit.hlp.
Private Sub mnuHelpSearch_Click()
    FileDialog.HelpCommand = cdlHelpIndex
    FileDialog.HelpFile = App.Path & "\SimpEdit.hlp"
    FileDialog.ShowHelp
End Sub
==========
4. Converted HowTo: Give a program a simple one-time password
http://www.vb-helper.com/howto_one_time_password.html
http://www.vb-helper.com/HowTo/howto_one_time_password.zip

When program starts, it looks for the encoded password in the Registry.
If it finds a value, it compares it to a desired encoded password stored
in the program.

If the two don't match, then the program prompts the user for a
password. It encodes that password and sees if it matches the desired
value. If it matches, the program saves the encoded password in the
Registry.

Finally, if the program has a valid encoded password, it displays the
main form. Otherwise it displays an error message.

' Make sure the user is authorized to run the
' program.
Public Sub main()

' This is the coded form of "thepassword"
Const WANTED_PASSWORD = "uifqbttxpse"

Dim coded_password As String
Dim plain_password As String

    ' See if the password is in the registry
    ' already.
    coded_password = GetSetting("PasswordChecker", "Parameters",
"Validation", "")
    
    If coded_password <> WANTED_PASSWORD Then
        ' The password is not saved. Ask for one.
        plain_password = InputBox("Enter password", "PasswordChecker",
"")
        coded_password = Encode(plain_password)
        
        ' If the password is correct, save it in
        ' the registry.
        If coded_password = WANTED_PASSWORD Then
            SaveSetting "PasswordChecker", _
                "Parameters", "Validation", _
                coded_password
        End If
    End If

    ' See if we got the password.
    If coded_password = WANTED_PASSWORD Then
        Form1.Show
    Else
        MsgBox "Invalid password.", vbOK, "Invalid Password"
    End If
End Sub

' Encode a text string by adding 1 to each letter.
Private Function Encode(plain_text As String) As String
Dim i As Integer
Dim ch As String
Dim coded_text As String

    For i = 1 To Len(plain_text)
        ch = Mid$(plain_text, i, 1)
        ch = Chr$(Asc(ch) + 1)
        If ch > "~" Then ch = " "
        coded_text = coded_text & ch
    Next i
    Encode = coded_text
End Function

The most important feature of this method is that the unencoded password
is not saved in the Registry so the user cannot dig it out. He could
find the encoded version and copy it to another computer's Registry but
this should be good enough for many applications. You can also make the
encoding method depend on the system's serial number or the program's
serial number.
==========
5. Converted HowTo: Validate a user name/password in a database
http://www.vb-helper.com/howto_validate_password_in_db.html
http://www.vb-helper.com/HowTo/howto_validate_password_in_db.zip

Look for the user name/password in the Users table.

Private Sub cmdOk_Click()
Dim db_file As String
Dim statement As String
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset

    ' Open the database.
    db_file = App.Path
    If Right$(db_file, 1) <> "\" Then db_file = db_file & "\"
    db_file = db_file & "data.mdb"

    ' Open a connection.
    Set conn = New ADODB.Connection
    conn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & db_file & ";" & _
        "Persist Security Info=False"
    conn.Open

    ' Look up the user name/password.
    statement = "SELECT COUNT (*) FROM Users WHERE " & _
        "UserName='" & Replace(txtUserName.Text, "'", "''") & "' AND " &
_
        "Password='" & Replace(txtPassword.Text, "'", "''") & "'"
    Set rs = conn.Execute(statement)

    ' See if we got anything.
    If CLng(rs.Fields(0)) < 1 Then
        ' There is no match.
        ' Do not allow the login.
        Unload Me
        MsgBox "Invalid user name/password."
    Else
        ' There is a match.
        ' Display the program's main form.
        Form1.Show
        Unload Me
    End If

    rs.Close
    conn.Close
End Sub

Note that this is not the most secure system since the passwords are
stored in plain text in the database. Anyone who can read the database
can get all the passwords. A more secure system would encrypt the
passwords and store the result in the database. Then to verify a user
name/password, the program reencrypts the password and checks that it
got the right result.
==========
6. Converted HowTo: Verify the user's Windows password
http://www.vb-helper.com/howto_verify_windows_password.html
http://www.vb-helper.com/HowTo/howto_verify_windows_password.zip

Thanks to David Roberts (dav-@vulcanind.com).

The VerifyWindowsLoginUserPassword function uses the WNetVerifyPassword
API function to verify that the user entered the correct password for
the user logged in.

Public Function VerifyWindowsLoginUserPassword(ByVal Password As String)
As Boolean
    Dim rtn As Long, Match As Long
    rtn = WNetVerifyPassword(Password, Match)
    If rtn Then
        VerifyWindowsLoginUserPassword = False
    Else
        VerifyWindowsLoginUserPassword = (Match <> 0)
    End If
End Function

Note that this program doesn't seem to run in Windows NT. I don't have
NT running right now so I cannot try it.
==========
7. Converted HowTo: Use the PolyPolyline API function to draw lots of
lines quickly
http://www.vb-helper.com/howto_polypolyline.html
http://www.vb-helper.com/HowTo/howto_polypolyline.zip

This program makes several spirals that start at the same point. It adds
the points for each spiral to a single array of POINTAPIs. It also
creates an array called counts that holds the number of points for each
spiral. The PolyPolygon API function uses the counts array to decide
which points belong to which polyline.

Private Sub Form_Load()
Const PI = 3.14159265
Const NUM_PLINES = 8
Const PTS_PER_PLINE = 30
Const Dtheta = 2 * PI / PTS_PER_PLINE

Dim cx As Single
Dim cy As Single
Dim num_points As Integer
Dim pts() As POINTAPI
Dim num_polylines As Integer
Dim counts() As Long
Dim i As Integer
Dim j As Integer
Dim theta As Single
Dim r As Single
Dim dr As Single

    ' Note that API drawing functions always work in pixels.
    picCanvas.ScaleMode = vbPixels
    picCanvas.AutoRedraw = True

    dr = picCanvas.ScaleWidth / 2 / PTS_PER_PLINE

    cx = picCanvas.ScaleWidth / 2
    cy = picCanvas.ScaleHeight / 2

    For i = 1 To NUM_PLINES
        ' Make a spiral.
        theta = i * 2 * PI / NUM_PLINES
        r = 0
        For j = 1 To PTS_PER_PLINE
            ' Make a point for this polyline.
            num_points = num_points + 1
            ReDim Preserve pts(1 To num_points)
            With pts(num_points)
                .X = cx + r * Cos(theta)
                .Y = cy + r * Sin(theta)
            End With
            theta = theta + Dtheta
            r = r + dr
        Next j

        ' Store the number of points in this polyline.
        num_polylines = num_polylines + 1
        ReDim Preserve counts(1 To num_polylines)
        counts(num_polylines) = PTS_PER_PLINE
    Next i

    ' Draw the polylines. pts is the array of points.
    ' counts is an array giving the number of points
    ' in each polyline. num_polylines is the number
    ' of entries in the counts array = the number of
    ' polylines to draw.
    PolyPolyline picCanvas.hdc, pts(1), counts(1), num_polylines
End Sub
==========
8. Converted HowTo: Print a centered image of a form in Landscape mode
http://www.vb-helper.com/howto_print_form_centered.html
http://www.vb-helper.com/HowTo/howto_print_form_centered.zip

The program simulates Alt-PrntScrn to copy an image of the form to the
clipboard. It pastes the image into a PictureBox and uses the Printer's
PaintPicture method to copy the image to the printer suitably scaled and
centered.

Private Sub CmdPrint_Click()
Dim xmin As Single
Dim ymin As Single
Dim wid As Single
Dim hgt As Single
Dim aspect As Single

    MousePointer = vbHourglass
    DoEvents
    
    ' ***************************************
    ' Copy the form's image to the clipboard.
    ' ***************************************
    ' Press Alt.
    keybd_event VK_MENU, 0, 0, 0
    DoEvents
    
    ' Press Print Scrn.
    keybd_event VK_SNAPSHOT, 1, 0, 0
    DoEvents

    ' Release Alt.
    keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
    DoEvents
    
    ' Copy the image into the hidden PictureBox.
    HiddenPict.Picture = Clipboard.GetData(vbCFBitmap)
    
    ' Print the image.
    Printer.Orientation = vbPRORLandscape
    
    If NormalOption.Value Then
        ' Center the image.
        wid = Printer.ScaleX(HiddenPict.ScaleWidth, ScaleMode,
Printer.ScaleMode)
        hgt = Printer.ScaleY(HiddenPict.ScaleHeight, ScaleMode,
Printer.ScaleMode)
        xmin = (Printer.ScaleWidth - wid) / 2
        ymin = (Printer.ScaleHeight - hgt) / 2
    Else
        ' Make the image as large as possible
        ' without distortion.
        aspect = HiddenPict.ScaleHeight / _
            HiddenPict.ScaleWidth
        wid = Printer.ScaleWidth
        hgt = Printer.ScaleHeight
        If hgt / wid > aspect Then
            hgt = aspect * wid
            xmin = Printer.ScaleLeft
            ymin = (Printer.ScaleHeight - hgt) / 2
        Else
            wid = hgt / aspect
            xmin = (Printer.ScaleWidth - wid) / 2
            ymin = Printer.ScaleTop
        End If
    End If
    
    Printer.PaintPicture HiddenPict.Picture, _
        xmin, ymin, wid, hgt
    Printer.EndDoc

    MousePointer = vbDefault
End Sub
==========
9. Converted HowTo: Print a form's Labels and TextBoxes
http://www.vb-helper.com/howto_print_labels_textboxes.html
http://www.vb-helper.com/HowTo/howto_print_labels_textboxes.zip

Subroutine PrintFormFields loops through the form's controls. For Labels
and TextBoxes, it calls subroutine PrintText.

Subroutine PrintText figures out where the control should be drawn and
draws its text. Then if the draw_box parameter is True (it is for
TextBoxes), it draws a box around the control.

' Print the Labels and TextBoxes.
Private Sub PrintFormFields(ptr As Object, frm As Form, draw_box As
Boolean)
Dim ctl As Control
Dim wid As Single
Dim hgt As Single

    For Each ctl In frm.Controls
        If TypeOf ctl Is Label Then
            PrintText ptr, frm, ctl, ctl.Caption, False
        ElseIf TypeOf ctl Is TextBox Then
            PrintText ptr, frm, ctl, ctl.Text, True
        End If
    Next ctl

    If draw_box Then
        wid = frm.ScaleX(frm.ScaleWidth, frm.ScaleMode, vbTwips)
        hgt = frm.ScaleY(frm.ScaleHeight, frm.ScaleMode, vbTwips)
        ptr.Line (0, 0)-Step(wid, hgt), , B
    End If
End Sub

' Print text where the control belongs.
Private Sub PrintText(ptr As Object, frm As Form, ctl As Control, txt As
String, draw_box As Boolean)
Dim l As Single
Dim t As Single
Dim wid As Single
Dim hgt As Single

    l = frm.ScaleX(ctl.Left, frm.ScaleMode, vbTwips)
    t = frm.ScaleY(ctl.Top, frm.ScaleMode, vbTwips)
    If draw_box Then
        ptr.CurrentX = l + _
            ScaleX(0.2 * ctl.Font.size, vbPoints, vbTwips)
        ptr.CurrentY = t + _
            ScaleY(0.2 * ctl.Font.size, vbPoints, vbTwips)
    Else
        ptr.CurrentX = l
        ptr.CurrentY = t
    End If
    
    ' Select the printer font.
    ptr.Font.Name = ctl.Font.Name
    ptr.Font.size = ctl.Font.size

    ptr.Print txt
    If draw_box Then
        wid = frm.ScaleX(ctl.Width, frm.ScaleMode, vbTwips)
        hgt = frm.ScaleY(ctl.Height, frm.ScaleMode, vbTwips)
        ptr.Line (l, t)-Step(wid, hgt), , B
    End If
End Sub

Drawing text and lines on the Printer in this way is much faster than
dumping a whole bitmap image of the form to the printer.
==========
++++++++++
<Both>
++++++++++
==========
10. New Link
http://www.vb-helper.com/links.html

Parature.com
http://www.parature.com
Web-based help desk software products.

==========
11. Karen Watterson's Weekly Destinations and Diversions (D & D)
http://www.vb-helper.com/karens_weekly_diversions.html

Readable
- Read Bill Boswell's Q&A column
<http://mcpmag.com/columns/article.asp?EditorialsID=708> (from "MCP
Magazine") on enforcing "stronger" passwords - and about how Windows
stores passwords using the crackable MD4 hash algorithm. Comments worth
reading, too. Also worth reading: Roberta Bragg's scary column on the
risks of "process control"
<http://mcpmag.com/columns/article.asp?EditorialsID=702> (think 9/11
when so many "automated" systems went offline). Finally, another useful
article on how to install multiple OSes help systems on a single
computer <http://mcpmag.com/columns/article.asp?EditorialsID=705>.

- PDF security can be beefed up beyond the simple password many of us
use. Adobe's new Policy Server
e.com/aboutadobe/pressroom/pressreleases/200402/021704POLICYSERVER.html>
"gives document authors and IT administrators the power to dynamically
control who can view a PDF document, and determine whether the recipient
can modify, copy, print or forward the document. Moreover, these
permissions can be changed after the document has been distributed.
Adobe Policy Server provides assurances that only intended recipients
can open a protected document inside and outside the firewall. Documents
can be made to expire on a specific date..."

- It's official: Forrester Research Survey Shows Majority of Development
on .NET
/c75837dc-90bb-44d8-ae70-db7bcc5980b9/TheStateofTechnologyAdoption.pdf>.
Also from Forrester: Free (until June 31) 22-page report on making
dashboards actionable
<http://www.proclarity.com/registration/id_forrester_login.asp> (reg
required).

- Are you 133t?
<http://www.nwfusion.com/news/2004/0517widernetleet.html> (and other
topics leet-speak). Other good "Network World" articles in the 5/17
issue: potential privacy problem with UCSD student/alum/employee data
<http://www.nwfusion.com/columnists/2004/0517bradner.html>, and a great
article on application security
<http://www.nwfusion.com/techinsider/2004/0517techinsider.html>.

- "Business Week" profiles several women of tech
<http://www.businessweek.com/technology/tc_special/tc_04women.htm> such
as Francine Berman, director of the San Diego Supercomputing Center. In
contrast, Washington Technology's recent profile of the top 20 (and top
100) federal primes contractors
tp://www.washingtontechnology.com/news/19_3/special-report/23418-1.html>
showed all male CEOs. (Oh, Lockheed Martin continues #1, raking in about
$5.5B US tax dollars. Embattled Halliburton was only 32nd, netting a
measly $242M. Of course, those dollars are dated, based on fiscal Q4
2002 through the Q3 2003.)

- MSDN Windows XP SP2 info for developers
<http://msdn.microsoft.com/security/productinfo/XPSP2/default.aspx>.

- Good article on how SQL Server's optimizer uses stats
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql2k/html/statquery.asp>.


- Migrate Code and Concepts from ADO Classic to ADO.NET
<http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnadonet/html/adocnet4.asp>.


- Protect Your Web Applications from SQL Injection Attacks
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsqlmag04/html/InjectionProtection.asp>.


- Populate an Excel Spreadsheet from Data in Active Directory
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting05112004.asp>.


- Get the Best of Both Worlds: Combine XPath with XmlReader
<http://msdn.microsoft.com/XML/BuildingXML/XMLColumns/default.aspx?pull=/library/en-us/dnexxml/html/xml05192004.asp>.


- Navigate the .NET Framework and Your Projects with "My"
<http://msdn.microsoft.com/msdnmag/issues/04/05/VisualBasic2005/default.aspx>.


- Serve Dynamic Content with HTTP Handlers
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/httphandl.asp>.


- Leverage the ASP.NET Cache API in a Tiered Web App Design
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/cencachv3.asp>.


- Info about Microsoft Windows XP Tablet PC Edition 2005
://www.microsoft.com/WindowsXP/tabletpc/evaluation/lonestar/default.asp>
aka Londstar.

Selected KB articles
- 314188 How to search for the URI property of a sender's e-mail
submission and to send an e-mail message by using this property in
Visual Basic .NET.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b314188>

- 839202 The DesignMode property of a nested user control is always set
to False in Visual Studio .NET
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839202>

- 839018 The NET SEND command may not work correctly on a computer that
is running Windows XP Service Pack 2
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839018>

- 839332 You receive an error message when you try to install the Hosted
Exchange 2003 Plans Database Engine
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839332>

- 839278 BUG: The changes in a remote subscriber are not updated to the
publisher for a queued updating replication that uses Message Queuing on
a computer that is running Windows XP SP2
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839278>

- 305977 INF: Frequently Asked Questions - SQL Server 2000 - Table
Variables.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b305977>

- 841252 How to manually enable TCP/IP on Windows XP SP2 for SQL Server
2000.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b841252>

- 311209 HOW TO: Configure ASP.NET for Persistent SQL Server Session
State Management.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b311209>

- 839405 You may receive an access violation exception when you try to
use SQL Mail on a multiprocessor computer.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839405>

- 841251 How to enable SQL Server connectivity on Windows XP SP2.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b841251>

- 842192 How to install SQL Server 7.0 Enterprise Edition on Microsoft
Cluster Server
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b842192>

- 841412 The SQL Database Adapter Wizard generates incorrect stored
procedure code for tables that contain UDTs in VS.NET 2003
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b841412>

- 839781 You may receive an error message when you try to open a data
access page in Access 2002.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839781>

- 837937 You may receive an error message when you try to save an edited
record that is based on a multi-table view in Access.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b837937>

- 295334 Jet compact utility (for Jet 3.x, 4.x) available in Download
Center.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b295334>

- 822346 The Office XP, Office 2000 and Office 97 Converter Packs are no
longer available.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b822346>

- 833267 Set up or repair of Office 2003 or Office XP quits unexpectedly
with no error message.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b833267>

- 839372 You can't add an attachment to an e-mail message as part of the
mail-merge operation in Word.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839372>

- 831120 "This document template does not exist" error message when you
try to create a new document that is based on a template that is
contained in a Web folder in Word 2000.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b831120>

- 832580 Word 2002 stops responding and you receive an error message
when you run a VBA macro that uses the .ReplaceAll property.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b832580>

- 839745 You receive an error message when you try to use the SMIGRATE
tool to migrate a SharePoint Team Services Web site to a Windows
SharePoint Services Web site that is on another computer.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b839745>

- 840465 JPG or GIF images may not appear correctly when you try to
preview a Web site in FrontPage.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b840465>

- 837937 You may receive an error message when you try to save an edited
record that is based on a multi-table view in Access.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b837937>

Browsable
- John Savill's Windows 2000 FAQs <http://www.windows2000faq.com>.

- Stephen Wynkoop's SQL Server Worldwide User Group
<http://www.sswug.org> (which also has good content on Oracle and DB2,
such as a recent "When Configuring DB2, default equals danger") Although
402 articles/links are free, with registration, a lot, such as the DB2
article, requires membership. (9.50/month, 69.50/yr).

- Jolt award finalist (websites and dev networks) JavaRanch
<http://www.javaranch.com/>tigris.org for hosting open source projects.
The Grand Winner in the category? developerWorks
<http://www-136.ibm.com/developerworks/>.

Tip
- Did you know that you can run Microsoft's MBSA (download latest
version 1.2 <http://www.microsoft.com/mbsa>) from the command line,
using any of two dozen parameters? Locate the Microsoft Baseline
Security Analyzer folder (defaults to the Program Files directory), and
then run mbsacli.exe /? to see the switches.

Downloadable
- XMLFox <http://www.rustemsoft.com/XMLFox.htm> freeware XML editor.

- XMill <http://www.cs.washington.edu/homes/suciu/XMILL/>, an open
source XML compressor. Related: XML data files you can use for testing:
XMill Experiments
<http://www.research.att.com/sw/tools/xmill/experiments.html> and
XMLData Repository <http://www.cs.washington.edu/research/xmldatasets/>.


- (DB2) Intelligent Miner Add-in for Microsoft Excel
<http://www.alphaworks.ibm.com/tech/im4excel?Open&ca=daw-flnt-050604>.

- Windows Template Library <http://sourceforge.net/projects/wtl>, a C++
library for developing Windows apps and UI components.

- OnTarget <http://www.ontargetreports.com/form2.html> reporting beta.

Travel Opps
- Enterprise Architecture Summit
<http://www.ftponline.com/conferences/eas/>, June 6-8, Palm Springs.

- JavaOne <http://java.sun.com/javaone/>, June 28-July 1, at Moscone in
San Francisco.

- VSLive! <http://www.ftponline.com/conferences/vslive/2004/ny/>, July
26-29, NYC.

- VOIP DevCon <http://www.tmcnet.com/voipdeveloper/>, Aug 7-8 in San
Jose. Related: VoIP talk tops NetWorld+Interop
<http://www.nwfusion.com/news/2004/0517nivoip.html?docid=2063>.

- TDWI 04 <http://www.dw-institute.com/sandiego2004> Aug 8-13 in San
Diego (data warehousing, mining, BI).

Misc
- Moog at 40
<http://go.hotwired.com/news/digiwood/0,1412,63523,00.html/wn_ascii>.

- InfoWorld at 20
<http://www.infoworld.com/pageone/news/features/anniversary/98ann.best.shtml>.


- LaserJet at 20
<http://www.hp.com/hpinfo/abouthp/histnfacts/museum/imagingprinting/0018/index.html>.


- Only in California - what can I say? Awful Plastic Surgery
<http://www.awfulplasticsurgery.com/>.

- Intel & Microsoft are selling devs a Speech Start Kit for $995. You
get a 180-day trial version of Microsoft Speech Server 2004, an Intel
Dialogic D/41JCT-LS combined media board, Intel's NetMerge Call Manager
telephony interface manager, and drivers. Get info here
<ftp://download.intel.com/network/csp/pdf/8993ds.pdf>.

- Sir Michael Atiyah and Isadore Singer jointly win the 2004 Abel prize
<http://plus.maths.org/latestnews/jan-apr04/abel04/index.html> for their
discovery and proof of the "index theorem." They're also credited with
helping repair the rift between the worlds of pure mathematics and
theoretical particle physics.

- The Scholarly Electronic Publishing Bibliography
<http://info.lib.uh.edu/sepb/sepb.html>.

- Request a free Oracle JDeveloper 10g CD
<http://oracle.sy10.net/r/?ZXU=91588&ZXD=1254627> (will come in the
mail). Related: Free online Oracle 9i training
/ilearn/en/learner/jsp/rco_details_find.jsp?srchfor=null&rcoid=10357662>
for anyone of the J2EE persuasion.

- Ian Horrocks' Website
<http://www.cs.man.ac.uk/~horrocks/Publications/publications.html>
reflects his interest in knowledge representation, ontologies, and their
application to the Semantic Web.

- Peter Singer, Australian ethicist home page
<http://www.petersingerlinks.com/> with awesome links.

- Link tester <http://www.cyberspyder.com/>.

- Michael Quinion's website on international English from a British
viewpoint <http://www.worldwidewords.org/>.

- Online Dictionary of Playground Slang <http://www.odps.org/>.

- Fred Moore has written a good article on enterprise information
lifecycle management <http://www.zjournal.com/PDF/infolifecycle.pdf>.

- Titanic central. <http://www.encyclopedia-titanica.org/index.php>

- Ampioxus <http://workshop.molecularevolution.org/resources/amphioxus/>
(song about biology, with links to more). Sample lyrics: It's a long way
from Amphioxus. It's a long way to us...(think "It's a long way to
Tipperary"). Related: what amphioxuses are
<http://www.ucmp.berkeley.edu/chordata/cephalo.html>.

- UC Berkeley Internet search tutorial
<http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/About.html>.

- Free is good <http://www.FreeAfterRebate.info>.

- "California Agriculture's" current issue is all about biotech and
genetically modified plants <http://californiaagriculture.ucop.edu/>.

- Portal to locations of sex offenders
<http://www.klaaskids.org/pg-legmeg2.htm>.

- With Google Print you can search inside both books and mags
<http://print.google.com/print/faq.html> for pages that include your
particular keywords. Related: Googleblog
<http://www.google.com/googleblog/>.

- High school science teacher Steve Silverman's useless information site
<http://home.nycap.rr.com/useless/site_index/index.html>.

- Watch a replay of Toni Morrison and Cornel West In Conversation
http://www.freespeech.org/fsitv/fscm2/contentviewer.php?content_id=802>.
Abridged version, "Blues, Love and Politics" in the May 24 issue of The
Nation <http://www.thenation.com>). Selections: are Americans being
called upon as consumers rather than citizens? Are "the mendacious
elites" mighty, but not almighty?

- How the Data Ecosystem Affects Process Development and the Bottom Line
line.com/user/user.fas/s=695/fp=3/tp=64?T=open_article,604748&P=article>
from BioProcess International <http://www.bioprocessintl.com>.

- The US Navy's eBusiness Ops unit has issued a call for pilot project
proposals for fiscal 2005 <http://www.don-ebusiness.navsup.navy.mil>.

- Info on what states are doing in IT.

- Info on what EU members are doing in IT
<http://europa.eu.int/information_society/index_en.htm>.
==========
Archives:
    http://www.topica.com/lists/VBHelper
    http://www.topica.com/lists/VB6Helper
    http://www.topica.com/lists/VBNetHelper
    
http://www.vb-helper.com/cgi-bin/mojo/mojo.cgi?flavor=archive&list=VB_Helper_Newsletter


Post questions at:
    http://www.topica.com/lists/VBHelperQA
	
 Previous Message All Messages Next Message 
  Check It Out!

  Topica Channels
 Best of Topica
 Art & Design
 Books, Movies & TV
 Developers
 Food & Drink
 Health & Fitness
 Internet
 Music
 News & Information
 Personal Finance
 Personal Technology
 Small Business
 Software
 Sports
 Travel & Leisure
 Women & Family

  Start Your Own List!
Email lists are great for debating issues or publishing your views.
Start a List Today!

© 2001 Topica Inc. TFMB
Concerned about privacy? Topica is TrustE certified.
See our Privacy Policy.