Solved

Displaying PopUp Terminal window (dialup networking)

Posted on 1998-03-05
15
631 Views
Last Modified: 2013-12-03
I'm in process developing RAS connection program for NT using VB5.
In this case I have used several RAS API functions, in order to access to dial up networking. What I'd like to do is : each time my program dials out, I want to see the 'Pop UpTerminal Window' (as we usually see when we dial out thru normal NT dialup networking menu).
Does anyone know how to activate this terminal window from RAS API function ? (or maybe there is another way instead of using API fucntion ?)
thanks
0
Comment
Question by:asiasoft
  • 8
  • 7
15 Comments
 
LVL 23

Expert Comment

by:chensu
ID: 1411731
Use the RasSetEntryProperties() function. The RASENTRY structure contains two related members,

RASEO_TerminalBeforeDial
 If this flag is set, RAS displays a terminal window for user input before dialing the connection.
 
RASEO_TerminalAfterDial
 If this flag is set, RAS displays a terminal window for user input after dialing the connection.

0
 
LVL 23

Expert Comment

by:chensu
ID: 1411732
Sorry, it should be:

The RASENTRY structure contains the member dwfOptions to which you can apply the flags,

RASEO_TerminalBeforeDial
 If this flag is set, RAS displays a terminal window for user input before dialing the connection.
 
RASEO_TerminalAfterDial
 If this flag is set, RAS displays a terminal window for user input after dialing the connection.
0
 

Author Comment

by:asiasoft
ID: 1411733
Could you give me a more detailed info about how to use RasSetEntryProperties() function ? It's new for me and I have no reference about that function. Please specify how to pass the related parameter to set the flags you just mentioned, like as follows :
RasSetEntryProperties(param1,parm2,etc)
i would be happy if you can give the detailed steps about how to get this thing works.

thanks
0
 
LVL 23

Accepted Solution

by:
chensu earned 50 total points
ID: 1411734
C++ example:

RASENTRY RasEntry =
{
    sizeof(RASENTRY)
};

// get the current settings
RasGetEntryProperties(
NULL, // pointer to full path and filename of phone-book file, NULL for default
"entry name", // pointer to an entry name
&RasEntry, // buffer that contains entry information
sizeof(RasEntry), // size, in bytes, of the lpRasEntry buffer
NULL, // buffer that contains device-specific configuration information
0 // size, in bytes, of the lpbDeviceInfo buffer
);

// apply RASEO_TerminalAfterDial flag to the current flags using OR (|)
RasEntry.dwfOptions |= RASEO_TerminalAfterDial;

// set the settings
RasSetEntryProperties(
NULL, // pointer to full path and filename of phone-book file, NULL for default
"entry name", // pointer to an entry name
&RasEntry, // buffer that contains entry information
sizeof(RasEntry), // size, in bytes, of the lpRasEntry buffer
NULL, // buffer that contains device-specific configuration information
0 // size, in bytes, of the lpbDeviceInfo buffer
);



RasSetEntryProperties  
The RasSetEntryProperties function changes the connection information for an entry in the phone book or creates a new phone-book entry.

DWORD RasSetEntryProperties( LPTSTR lpszPhonebook,
 // pointer to full path and filename of phone-book file
 
LPTSTR lpszEntry,
 // pointer to an entry name
 
LPRASENTRY lpRasEntry,
 // buffer that contains entry information
 
DWORD dwEntryInfoSize,
 // size, in bytes, of the lpRasEntry buffer
 
LPBYTE lpbDeviceInfo,
 // buffer that contains device-specific configuration information
 
DWORD dwDeviceInfoSize
 // size, in bytes, of the lpbDeviceInfo buffer
 
);
 


Parameters
lpszPhonebook

Windows NT: Pointer to a null-terminated string that specifies the full path and filename of a phone-book (.PBK) file. If this parameter is NULL, the function uses the current default phone-book file. The default phone-book file is the one selected by the user in the User Preferences property sheet of the Dial-Up Networking dialog box.

lpszEntry

Pointer to a null-terminated string containing an entry name.

If the entry name matches an existing entry, RasSetEntryProperties modifies the properties of that entry.

If the entry name does not match an existing entry, RasSetEntryProperties creates a new phone-book entry. For new entries, call the RasValidateEntryName function to validate the entry name before calling RasSetEntryProperties.

lpRasEntry

Pointer to a RASENTRY structure that contains the new connection data to be associated with the phone-book entry specified by the lpszEntry parameter.

The structure might be followed by an array of null-terminated alternate phone number strings. The last string is terminated by two consecutive null characters. The dwAlternateOffset member of the RASENTRY structure contains the offset to the first string.

dwEntryInfoSize

Specifies the size, in bytes, of the buffer specified by the lpRasEntry parameter.

lpbDeviceInfo

Pointer to a buffer containing device-specific configuration information. This is opaque TAPI device configuration information. For more information about TAPI device configuration, see the Win32 Telephony (TAPI) Programmer’s Reference.

dwDeviceInfoSize

Specifies the size, in bytes, of the lpbDeviceInfo buffer.

Return Values
If the function succeeds, the return value is zero.

If the function fails, the return value can be one of the following error codes. Value
 Meaning
 
ERROR_BUFFER_INVALID
 The address or buffer specified by lpRasEntry is invalid.
 
ERROR_CANNOT_OPEN_PHONEBOOK
 The phone book is corrupted or missing components.
 

RASENTRY  
The RASENTRY structure describes a phone-book entry. The RasSetEntryProperties and RasGetEntryProperties functions use this structure to set and retrieve the properties of a phone-book entry.

typedef struct tagRASENTRY {
  DWORD      dwSize;
  DWORD      dwfOptions;
  //
  // Location/phone number.
  //
  DWORD      dwCountryID;
  DWORD      dwCountryCode;
  TCHAR      szAreaCode[ RAS_MaxAreaCode + 1 ];
  TCHAR      szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
  DWORD      dwAlternateOffset;
  //
  // PPP/Ip
  //
  RASIPADDR  ipaddr;
  RASIPADDR  ipaddrDns;
  RASIPADDR  ipaddrDnsAlt;
  RASIPADDR  ipaddrWins;
  RASIPADDR  ipaddrWinsAlt;
  //
  // Framing
  //
  DWORD      dwFrameSize;
  DWORD      dwfNetProtocols;
  DWORD      dwFramingProtocol;
  //
  // Scripting
  //
  TCHAR      szScript[ MAX_PATH ];
  //
  // AutoDial
  //
  TCHAR       szAutodialDll[ MAX_PATH ];
  TCHAR       szAutodialFunc[ MAX_PATH ];
  //
  // Device
  //
  TCHAR      szDeviceType[ RAS_MaxDeviceType + 1 ];
  TCHAR      szDeviceName[ RAS_MaxDeviceName + 1 ];
  //
  // X.25
  //
  TCHAR      szX25PadType[ RAS_MaxPadType + 1 ];
  TCHAR      szX25Address[ RAS_MaxX25Address + 1 ];
  TCHAR      szX25Facilities[ RAS_MaxFacilities + 1 ];
  TCHAR      szX25UserData[ RAS_MaxUserData + 1 ];
  DWORD      dwChannels;
  //
  // Reserved
  //
  DWORD       dwReserved1;
  DWORD       dwReserved2;
#if (WINVER >= 0x401)
  //
  // Multilink
  //
  DWORD       dwSubEntries;
  DWORD       dwDialMode;
  DWORD       dwDialExtraPercent;
  DWORD       dwDialExtraSampleSeconds;
  DWORD       dwHangUpExtraPercent;
  DWORD       dwHangUpExtraSampleSeconds;
  //
  // Idle timeout
  //
  DWORD       dwIdleDisconnectSeconds;
#endif
} RASENTRY;
 
Members
dwSize

Specifies the size, in bytes, of the RASENTRY structure. Before calling RasSetEntryProperties or RasGetEntryProperties, set dwSize to sizeof(RASENTRY) to identify the version of the structure.

dwfOptions

A set of bit flags that specify connection options. You can set one or more of the following flags. Flag
 Description
 
RASEO_UseCountryAndAreaCodes
 If this flag is set, the dwCountryID, dwCountryCode, and szAreaCode members are used to construct the phone number. If this flag is not set, these members are ignored.

This flag corresponds to the Use Country and Area Codes check box in the Phone dialog box.
 
RASEO_SpecificIpAddr
 If this flag is set, RAS tries to use the IP address specified by ipaddr as the IP address for the dial-up connection. If this flag is not set, the value of the ipaddr member is ignored.

Setting the RASEO_SpecificIpAddr flag corresponds to selecting the Specify an IP Address setting in the TCP/IP settings dialog box. Clearing the RASEO_SpecificIpAddr flag corresponds to selecting the Server Assigned IP Address setting in the TCP/IP settings dialog box.

Currently, an IP address set in the phone-book entry properties or retrieved from a server overrides the IP address set in the network control panel.
 
RASEO_SpecificNameServers
 If this flag is set, RAS uses the ipaddrDns, ipaddrDnsAlt, ipaddrWins, and ipaddrWinsAlt members to specify the name server addresses for the dial-up connection. If this flag is not set, RAS ignores these members.

Setting the RASEO_SpecificNameServers flag corresponds to selecting the Specify Name Server Addresses setting in the TCP/IP Settings dialog box. Clearing the RASEO_SpecificNameServers flag corresponds to selecting the Server Assigned Name Server Addresses setting in the TCP/IP Settings dialog box.
 
RASEO_IpHeaderCompression
 If this flag is set, RAS negotiates to use IP header compression on PPP connections.

If this flag is not set, IP header compression is not negotiated.

This flag corresponds to the Use IP Header Compression check box in the TCP/IP settings dialog box. It is generally advisable to set this flag because IP header compression significantly improves performance. The flag should be cleared only when connecting to a server that does not correctly negotiate IP header compression.
 
RASEO_RemoteDefaultGateway
 If this flag is set, the default route for IP packets is through the dial-up adapter when the connection is active. If this flag is clear, the default route is not modified.

This flag corresponds to the Use Default Gateway on Remote Network check box in the TCP/IP settings dialog box.
 
RASEO_DisableLcpExtensions
 If this flag is set, RAS disables the PPP LCP extensions defined in RFC 1570. This may be necessary to connect to certain older PPP implementations, but interferes with features such as server callback. Do not set this flag unless specifically required.
 
RASEO_TerminalBeforeDial
 If this flag is set, RAS displays a terminal window for user input before dialing the connection.
 
RASEO_TerminalAfterDial
 If this flag is set, RAS displays a terminal window for user input after dialing the connection.

Do not set this flag if a dial-up networking script is to be associated with the connection, because scripting has its own terminal implementation.
 
RASEO_ModemLights
 This flag is currently ignored.
 
RASEO_SwCompression
 If this flag is set, software compression is negotiated on the link. Setting this flag causes the PPP driver to attempt to negotiate CCP with the server. This flag should be set by default, but clearing it can reduce the negotiation period if the server does not support a compatible compression protocol.
 
RASEO_RequireEncryptedPw
 If this flag is set, only secure password schemes can be used to authenticate the client with the server. This prevents the PPP driver from using the PAP plain-text authentication protocol to authenticate the client. The CHAP and SPAP authentication protocols are also supported. Clear this flag for increased interoperability, and set it for increased security.

This flag corresponds to the Require Encrypted Password check box in the Security dialog box. See also RASEO_RequireMsEncryptedPw.
 
RASEO_RequireMsEncryptedPw
 If this flag is set, only Microsoft’s secure password schemes can be used to authenticate the client with the server. This prevents the PPP driver from using the PPP plain-text authentication protocol, MD5-CHAP, MS-CHAP, or SPAP. The flag should be cleared for maximum interoperability and should be set for maximum security. This flag takes precedence over RASEO_RequireEncryptedPw.

This flag corresponds to the Require Microsoft Encrypted Password check box in the Security dialog box. See also RASEO_RequireDataEncryption.
 
RASEO_RequireDataEncryption
 If this flag is set, data encryption must be negotiated successfully or the connection should be dropped. This flag is ignored unless RASEO_RequireMsEncryptedPw is also set.

This flag corresponds to the Require Data Encryption check box in the Security dialog box.
 
RASEO_NetworkLogon
 If this flag is set, RAS logs on to the network after the point-to-point connection is established.

This flag currently has no effect under Windows NT.
 
RASEO_UseLogonCredentials
 If this flag is set, RAS uses the user name, password, and domain of the currently logged-on user when dialing this entry. This flag is ignored unless RASEO_RequireMsEncryptedPw is also set.

Note that this setting is ignored by the RasDial function, where specifying empty strings for the szUserName and szPassword members of the RASDIALPARAMS structure gives the same result.

This flag corresponds to the Use Current Username and Password check box in the Security dialog box.
 
RASEO_PromoteAlternates
 This flag has an effect when alternate phone numbers are defined by the dwAlternateOffset member. If this flag is set, an alternate phone number that connects successfully becomes the primary phone number, and the current primary phone number is moved to the alternate list.

This flag corresponds to the check box in the Alternate Numbers dialog box.
 
RASEO_SecureLocalFiles
 Windows NT only: If this flag is set, RAS checks for existing remote file system and remote printer bindings before making a connection with this entry. Typically, you set this flag on phone-book entries for public networks to remind users to break connections to their private network before connecting to a public network.
 


dwCountryID

Specifies the TAPI country identifier. Use the RasGetCountryInfo function to enumerate country identifiers. This member is ignored unless the dwfOptions member specifies the RASEO_UseCountryAndAreaCodes flag.

dwCountryCode

Specifies the country code portion of the phone number. The country code must correspond to the country identifier specified by dwCountryID. If dwCountryCode is zero, the country code is based on the country identifier specified by dwCountryID. This member is ignored unless dwfOptions specifies the RASEO_UseCountryAndAreaCodes flag.

szAreaCode

Specifies the area code as a null-terminated string. If the dialing location does not have an area code, specify an empty string (““). Do not include brackets or other delimiters in the area code string. (For example, “206” is a valid area code; “(206)” is not. This member is ignored unless the dwfOptions member specifies the RASEO_UseCountryAndAreaCodes flag.

szLocalPhoneNumber

Specifies a null-terminated string containing a telephone number. The way RAS uses this string depends on whether the dwfOptions member specifies the RASEO_UseCountryAndAreaCodes flag. If the flag is set, RAS combines szLocalPhoneNumber with the country and area codes specified by the dwCountryID, dwCountryCode , and szAreaCode members. If the flag is not set, RAS uses the szLocalPhoneNumber string as the entire phone number.

dwAlternateOffset

Specifies the offset, in bytes, from the beginning of the structure to a list of consecutive null-terminated strings. The last string is terminated by two consecutive null characters. The strings are alternate phone numbers that RAS dials in the order listed if the primary number (see szLocalPhoneNumber) fails to connect. The alternate phone number strings are ANSI or Unicode, depending on whether you use the ANSI or Unicode version of the structure.

ipaddr

Specifies the IP address to be used while this connection is active. This member is ignored unless dwfOptions specifies the RASEO_SpecificIpAddr flag.

ipaddrDns

Specifies the IP address of the DNS server to be used while this connection is active. This member is ignored unless dwfOptions specifies the RASEO_SpecificNameServers flag.

ipaddrDnsAlt

Specifies the IP address of a secondary or backup DNS server to be used while this connection is active. This member is ignored unless dwfOptions specifies the RASEO_SpecificNameServers flag.

ipaddrWins

Specifies the IP address of the WINS server to be used while this connection is active. This member is ignored unless dwfOptions specifies the RASEO_SpecificNameServers flag.

ipaddrWinsAlt

Specifies the IP address of a secondary WINS server to be used while this connection is active. This member is ignored unless dwfOptions specifies the RASEO_SpecificNameServers flag.

dwFrameSize

Specifies the network protocol frame size. The value should be either 1006 or 1500. This member is ignored unless dwFramingProtocol specifies the RASFP_Slip flag.

dwfNetProtocols

Specifies the network protocols to negotiate. This member can be a combination of the following flags. Flag
 Description
 
RASNP_Netbeui
 Negotiate the NetBEUI protocol.
 
RASNP_Ipx
 Negotiate the IPX protocol.
 
RASNP_Ip
 Negotiate the TCP/IP protocol.
 


dwFramingProtocol

Specifies the framing protocol used by the server. PPP is the emerging standard. SLIP is used mainly in UNIX environments. This member can be one of the following flags. Flag
 Description
 
RASFP_Ppp
 Point-to-Point Protocol (PPP)
 
RASFP_Slip
 Serial Line Internet Protocol (SLIP)
 
RASFP_Ras
 Microsoft proprietary protocol implemented in Windows NT 3.1 and Windows for Workgroups 3.11
 


To use Compressed SLIP, set the RASFP_Slip flag and set the RASEO_IpHeaderCompression flag in the dwfOptions member.

szScript

Specifies a null-terminated string containing the name of the script file. The filename should be a full path.

Windows NT: To indicate a Windows NT SWITCH.INF script name, set the first character of the name to “[“.

szAutodialDll

Specifies a null-terminated string containing the full path and filename of the dynamic-link library (DLL) for the customized AutoDial handler. If szAutodialDll contains an empty string (““), RAS uses the default dialing user interface and the szAutodialFunc member is ignored.

szAutodialFunc

Specifies a null-terminated string containing the exported name of the RASADFunc function for the customized AutoDial handler. An AutoDial DLL must provide both ANSI and Unicode versions of the RASADFunc handler. However, do not include the “A” or “W” suffix in the name specified by szAutodialFunc.

szDeviceType

Specifies a null-terminated string indicating the RAS device type referenced by szDeviceName. This member can be one of the following string constants. String
 Description
 
RASDT_Modem
 A modem accessed through a COM port.
 
RASDT_Isdn
 An ISDN card with corresponding NDISWAN driver installed.
 
RASDT_X25
 An X.25 card with corresponding NDISWAN driver installed.
 


szDeviceName

Contains a null-terminated string containing the name of a TAPI device to use with this phone-book entry. To enumerate all available RAS-capable devices, use the RasEnumDevices function.

szX25PadType

Contains a null-terminated string that identifies the X.25 PAD type. Set this member to ““ unless the entry should dial using an X.25 PAD.

Windows NT: Under Windows NT, the szX25PadType string maps to a section name in PAD.INF.

szX25Address

Contains a null-terminated string that identifies the X.25 address to connect to. Set this member to ““ unless the entry should dial using an X.25 PAD or native X.25 device.

szX25Facilities

Contains a null-terminated string that specifies the facilities to request from the X.25 host at connection. This member is ignored if szX25Address is an empty string (““).

szX25UserData

Contains a null-terminated string that specifies additional connection information supplied to the X.25 host at connection. This member is ignored if szX25Address is an empty string (““).

dwChannels;

dwReserved1

Reserved; must be zero.

dwReserved2

Reserved; must be zero.

dwSubEntries

Specifies the number of multilink subentries associated with this entry. When calling RasSetEntryProperties, set this member to zero. To add subentries to a phone-book entry, use the RasSetSubEntryProperties function.

dwDialMode

Indicates whether RAS should dial all of this entry’s multilink subentries when the entry is first connected. This member can be one of the following values. Value
 Meaning
 
RASEDM_DialAll
 Dial all subentries initially.
 
RASEDM_DialAsNeeded
 Adjust the number of subentries as bandwidth is needed. RAS uses the dwDialExtraPercent, dwDialExtraSampleSeconds, dwDialHangUpExtraPercent, and dwHangUpExtraSampleSeconds members to determine when to dial or disconnect a subentry.
 


dwDialExtraPercent

Specifies a percent of the total bandwidth available from the currently connected subentries. RAS dials an additional subentry when the total bandwidth used exceeds dwDialExtraPercent percent of the available bandwidth for at least dwDialExtraSampleSeconds seconds.

This member is ignored unless the dwDialMode member specifies the RASEDM_DialAsNeeded flag.

dwDialExtraSampleSeconds

Specifies the number of seconds that current bandwidth usage must exceed the threshold specified by dwDialExtraPercent before RAS dials an additional subentry.

This member is ignored unless the dwDialMode member specifies the RASEDM_DialAsNeeded flag.

dwHangUpExtraPercent

Specifies a percent of the total bandwidth available from the currently connected subentries. RAS terminates (hangs up) an existing subentry connection when total bandwidth used is less than dwHangUpExtraPercent percent of the available bandwidth for at least dwHangUpExtraSampleSeconds seconds.

This member is ignored unless the dwDialMode member specifies the RASEDM_DialAsNeeded flag.

dwHangUpExtraSampleSeconds

Specifies the number of seconds that current bandwidth usage must be less than the threshold specified by dwHangUpExtraPercent before RAS terminates an existing subentry connection.

This member is ignored unless the dwDialMode member specifies the RASEDM_DialAsNeeded flag.

dwIdleDisconnectSeconds

Specifies the number of seconds after which the connection is terminated due to inactivity. Note that unless the idle timeout is disabled, the entire connection is terminated if the connection is idle for the specified interval. This member can specify a number of seconds, or one of the following values. Value
 Meaning
 
RASIDS_Disabled
 There is no idle timeout for this connection.
 
RASIDS_UseGlobalValue
 Use the user preference value as the default.

0
 

Author Comment

by:asiasoft
ID: 1411735
Sorry for giving you late response.
But seems that I still have problem. Since I'm more familiar with Vb 5.0, could you tell me what is the value of the constant variable of RASEO_TerminalAfterDial ?

IF you're also familiar with VB would you also tell me how to declare the api functions for RasGetentryProperties as well as RasSetentryProperties in VB ? (I have difficulty in translating the "C" variable type into  VB's variable type).

Thanks
0
 
LVL 23

Expert Comment

by:chensu
ID: 1411736
The value of RASEO_TerminalAfterDial is 0x00000080 in hex (128 in decimal). Sorry, I am not familiar with VB. You may check with some other similar functions. Or, I can explain the C types to you.
0
 

Author Comment

by:asiasoft
ID: 1411737
Must confirm with you one thing :
the functions are inside 'RasApi32.dll", is that right ?
But when I call this function from my program, I got :
"Cannot find the .dll entry point for RasGetEntryProperties"

Have you typed the function name correctly ?
Oh, yes, I still tested this function on my win95 machine. are the functions also applicable on this platform ?

Please comment, (i'm still working on it).

0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 23

Expert Comment

by:chensu
ID: 1411738
Yes, they reside in RasApi32.dll. Keep in mind that the function names are actually macros. Use either RasGetEntryPropertiesA for ANSI version or RasGetEntryPropertiesW for Unicode version.

According to the documentation, Windows 95 does not support these two functions.
0
 

Author Comment

by:asiasoft
ID: 1411739
Yes, I must test it directly on my NT.
The error disappears already, but when I check the return code (after calling RasGetEntryProperties), the result is 632 (decimal). Could you provide me with the error code description for the specified error ?

thanks
0
 
LVL 23

Expert Comment

by:chensu
ID: 1411740
The error is ERROR_INVALID_SIZE ("The structure size is incorrect."). It is likely that you didn't set the dwSize member of RASENTRY structure correctly before calling RasGetEntryProperties(). It must be sizeof(RASENTRY), which is 1768 (decimal) without the final (WINVER >= 0x401) part.
0
 

Author Comment

by:asiasoft
ID: 1411741
Well, now I got another return code = 621.
Could you tell me what it means ?
thanx
0
 
LVL 23

Expert Comment

by:chensu
ID: 1411742
That's ERROR_CANNOT_OPEN_PHONEBOOK ("Cannot open the phone book file.").
0
 

Author Comment

by:asiasoft
ID: 1411743
Chensu, my program still fails to call this function. It doesn't return any return code, and my program makes my NT run very slowly. I'm sure it's caused by my program that calls this function improperly.
Do you still have any suggestion ?

0
 
LVL 23

Expert Comment

by:chensu
ID: 1411744
I would suggest that you make a small program first, which does nothing other than changing this setting. After running this program, look at the phone book properties to see if the setting has changed.
0
 

Author Comment

by:asiasoft
ID: 1411745
Chensu, I have followed your suggestion, but still the same problem occurs. And still I have no idea which part of my little program that caused this such problem.
I allege that I may have defined the RASENTRY structure wrongly in VB. So, I think I need to consult with the vb expert in this case. Anyway thanks so much for your efforts so far. At least you have given me a clearer direction.

regards.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This article shows a few slightly more advanced techniques for Windows 7 gadget programming, including how to save and restore user settings for your gadget and how to populate the "details" panel that is displayed in the Windows 7 gadget gallery.  …
This article describes how to programmatically preset the "Pages per Sheet" option that's available with most printer drivers.   This setting lets you do "n-Up" printing, where two, four, or more pages are printed on each sheet of paper. If your …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now