Heenan, Lambert
Lambert.Heenan at chartisinsurance.com
Mon Dec 13 11:34:27 CST 2010
One API that took me so long to find was one that would provide Windows Authentication. In other words require the user to enter the name and password that was used to start the current Windows session: to prove that they are who fOsUsername says they are. Private Declare Function LogonUser Lib "Advapi32" Alias "LogonUserA" (ByVal _ lpszUserName As String, ByVal lpszDomain As String, _ ByVal lpszPassword As String, ByVal dwLogonType As Long, _ ByVal dwLogonProvider As Long, phToken As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As _ Long Const LOGON32_PROVIDER_DEFAULT = 0& Const LOGON32_LOGON_NETWORK = 3& ' Check whether a username/password pair is correct ' ' if DOMAIN is omitted, it uses the local account database ' and then asks trusted domains to search their account databases ' until it finds the account or the search is exhausted ' use DOMAIN="." to search only the local account database ' ' IMPORTANT: works only under Windows NT and 2000 and XP Private Function CheckWindowsUser(ByVal UserName As String, _ ByVal Password As String, Optional ByVal Domain As String) As Boolean Dim hToken As Long, ret As Long ' The handle hToken is not used by CheckWindowsUser ' but is required by the API LogonUser ' provide a default for the Domain name If Len(Domain) = 0 Then Domain = vbNullString ' check the username/password pair ' using LOGON32_LOGON_NETWORK delivers the best performance ret = LogonUser(UserName, Domain, Password, LOGON32_LOGON_NETWORK, _ LOGON32_PROVIDER_DEFAULT, hToken) ' a non-zero value means success If ret Then CheckWindowsUser = True CloseHandle hToken End If End Function Lambert -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Stuart McLachlan Sent: Friday, December 10, 2010 5:43 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Office API's On 10 Dec 2010 at 16:22, Susan Harkins wrote: > Yeah, and it's temperamental to boot! ;) > > Susan H. It works exactly the way it is intended. - just not the way you think it should :-) >From Win32.hlp: The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. HWND FindWindow( LPCTSTR lpClassName, // pointer to class name LPCTSTR lpWindowName // pointer to window name ); Parameters lpClassName Points to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to the GlobalAddAtom function. The atom, a 16-bit value, must be placed in the low-order word of lpClassName; the high-order word must be zero. lpWindowName Points to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match. Return Values If the function succeeds, the return value is the handle to the window that has the specified class name and window name. If the function fails, the return value is NULL. To get extended error information, call GetLastError. -- Stuart -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com