gecko-dev/cmd/winfe/confhook.cpp

296 строки
6.8 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
// confhook.cpp : implementation file
//
#include "stdafx.h"
#include <shellapi.h>
#include "confhook.h"
extern "C" {
#include "xpgetstr.h"
extern int MK_MSG_CANT_FIND_CALLPOINT;
};
//
// NEEDED STRINGS
// ==============
// MK_MSG_CANT_FIND_CONFAPP - Can't find the app to run
// IDS_CONFAPP - "Conferencing Application" type string, I think?
//
//
// Other internal defines...
//
#define CONFAPP_UNAVAILABLE 0
#define CONFAPP_CONFERENCE 1
#define CONFAPP_THIRDPARTY 2
//
// Registry stuff:
//
#define _MAX_ARG_LEN_ 128
//
// Sections for profile lookups...
//
static TCHAR lpszWin32ConfAppBranch[] = _T("Software\\Netscape\\ConfApplication");
static TCHAR lpszWin16ConfAppSection[] = _T("ConfApplication");
static int confAppAvailibility = CONFAPP_UNAVAILABLE;
BOOL
FileExists(LPCSTR szFile)
{
struct _stat buf;
int result;
result = _stat( szFile, &buf );
return (result == 0);
}
//
// This routine is specific to looking up values in the new ConfApp
// registry/ini file section.
//
CString
FEU_GetConfAppProfileString(const CString &queryString)
{
char argBuffer[_MAX_PATH + 1];
CString returnVal("");
returnVal = "";
strcpy(argBuffer, "");
//
// If the defined conference application on the system is
// still a leftover NSCP Conference, we should still use
// that setting. In this case, simply return the default
// value for Netscape Conference.
//
if (confAppAvailibility == CONFAPP_CONFERENCE)
{
//
// First, we will assign a value to argBuffer that corresponds
// to NSCP Conference's value for this particular argument.
//
if (queryString == IDS_CONFAPP_FULLPATHNAME)
{
CString installDirectory, executable;
#ifdef WIN32
installDirectory = FEU_GetInstallationDirectory(szLoadString(IDS_CONFERENCE_REGISTRY), szLoadString(IDS_PATHNAME));
executable = "\\NSCONF32.EXE";
#else // XP_WIN16
installDirectory = FEU_GetInstallationDirectory(szLoadString(IDS_CONFERENCE),szLoadString(IDS_INSTALL_DIRECTORY));
executable = "\\NSCSTART.EXE";
#endif
wsprintf(argBuffer, "%s%s", installDirectory, executable);
}
else if (queryString == IDS_CONFAPP_NOBANNER)
{
strcpy(argBuffer, "/b");
}
else if (queryString == IDS_CONFAPP_MIMEFILE)
{
strcpy(argBuffer, "/f");
}
else if (queryString == IDS_CONFAPP_DIRECTIP)
{
strcpy(argBuffer, "/d");
}
else if (queryString == IDS_CONFAPP_EMAIL)
{
strcpy(argBuffer, "/i");
}
else if (queryString == IDS_CONFAPP_SERVER)
{
strcpy(argBuffer, "/s");
}
else if (queryString == IDS_CONFAPP_USERNAME)
{
strcpy(argBuffer, "");
}
returnVal = argBuffer;
return returnVal;
}
#ifdef _WIN32
HKEY hKey;
LONG lResult;
char szVal[_MAX_PATH + 1];
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszWin32ConfAppBranch, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
unsigned long cbData = sizeof(szVal);
lResult = RegQueryValueEx(hKey, queryString, NULL, NULL, (LPBYTE) szVal, &cbData);
RegCloseKey(hKey);
if (lResult == ERROR_SUCCESS)
{
returnVal = szVal;
}
}
#else // XP_WIN16
char szPath[_MAX_PATH + 1];
const char *pOldProfile = theApp.m_pszProfileName;
UINT nSize = GetWindowsDirectory(szPath, _MAX_PATH + 1);
XP_STRCPY(szPath + nSize, szLoadString(IDS_NSCPINI));
theApp.m_pszProfileName = szPath;
returnVal = theApp.GetProfileString(lpszWin16ConfAppSection, queryString, NULL);
theApp.m_pszProfileName = pOldProfile;
#endif
return returnVal;
}
//
// This function is needed to see if a conferencing endpoint
// is defined on the machine. Return true if there is or false
// if it doesn't exist.
//
BOOL
FEU_IsConfAppAvailable(void)
{
//
// Check to see if a conf. app is defined on the local
// machine.
//
CString fileName = FEU_GetConfAppProfileString(IDS_CONFAPP_FULLPATHNAME);
if (fileName.IsEmpty())
{
if (FEU_IsConferenceAvailable())
{
confAppAvailibility = CONFAPP_CONFERENCE;
return TRUE;
}
else
{
confAppAvailibility = CONFAPP_UNAVAILABLE;
return FALSE;
}
}
//
// We should really make sure there is something at the location
// defined before we go further.
//
if (FileExists(fileName))
{
confAppAvailibility = CONFAPP_THIRDPARTY;
return TRUE;
}
else
{
confAppAvailibility = CONFAPP_UNAVAILABLE;
return FALSE;
}
}
//
// This will be the central function where we will do the launching
// of Conference on this endpoint.
//
// Args: makeCall - true if this is going to make a call or false
// if we are just launching the appliction.
//
void
LaunchConfEndpoint(char *commandLine, HWND parent)
{
CString executable;
char *cline = commandLine;
char cbuf[_MAX_ARG_LEN_];
executable = FEU_GetConfAppProfileString(IDS_CONFAPP_FULLPATHNAME);
//
// Check to see if the executable is defined on the machine. If it is not, then
// show a message and return.
//
if (executable.IsEmpty())
{
CString s;
if (s.LoadString( IDS_CONFERENCE ))
{
::MessageBox(parent, XP_GetString(MK_MSG_CANT_FIND_CALLPOINT), s, MB_OK | MB_APPLMODAL);
}
return;
}
//
// Check if the commandline is null...if so, we need to try to find the banner
// suppression flag and pass it to the executable.
//
if (!commandLine)
{
CString nobannerFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_NOBANNER);
strcpy(cbuf, nobannerFlag);
cline = &(cbuf[0]);
}
int uSpawn = (int) ShellExecute(NULL, "open", executable, cline, ".", SW_SHOW);
if(uSpawn <= 32)
{
char szMsg[80];
switch(uSpawn)
{
case 0:
case 8:
sprintf(szMsg, szLoadString(IDS_WINEXEC_0_8));
break;
case 2:
case 3:
sprintf(szMsg, szLoadString(IDS_WINEXEC_2_3));
break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
sprintf(szMsg, szLoadString(IDS_WINEXEC_10_THRU_15));
break;
case 16:
sprintf(szMsg, szLoadString(IDS_WINEXEC_16));
break;
case 21:
sprintf(szMsg, szLoadString(IDS_WINEXEC_21));
break;
default:
sprintf(szMsg, szLoadString(IDS_WINEXEC_XX), uSpawn);
break;
}
CString s;
if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
{
::MessageBox(parent, szMsg, s, MB_OK | MB_APPLMODAL);
}
}
}