move some files into base/applications

svn path=/trunk/; revision=21018
This commit is contained in:
Ged Murphy 2006-02-16 23:18:11 +00:00
parent 2ae57249c0
commit a54e551b70
143 changed files with 28968 additions and 0 deletions

View file

@ -0,0 +1,723 @@
/* Device manager
* (C) 2005 - Hervé Poussineau (hpoussin@reactos.org)
* GUI: Michael Fritscher (michael@fritscher.net)
*
*/
#define INITGUID
#include <windows.h>
#include <setupapi.h>
#include <stdio.h>
#include <tchar.h>
#include <commctrl.h>
#include <windows.h>
#include <commctrl.h>
#if defined (__GNUC__)
#include <winioctl.h>
#endif
/* FIXME: should be in cfgmgr32.h */
typedef DWORD CONFIGRET;
typedef DWORD DEVINST, *PDEVINST;
#define CM_DRP_DEVICEDESC 0x00000001
#define MAX_DEVICE_ID_LEN 200
#define MAX_CLASS_NAME_LEN 32
#define CR_SUCCESS 0x00000000
#define CR_NO_SUCH_DEVINST 0x0000000D
#define CR_NO_SUCH_VALUE 0x00000025
#ifdef _UNICODE
typedef WCHAR *DEVINSTID_W;
CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW(DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG);
CONFIGRET WINAPI CM_Locate_DevNodeW(PDEVINST, DEVINSTID_W, ULONG);
#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyW
#define CM_Locate_DevNode CM_Locate_DevNodeW
#else
typedef CHAR *DEVINSTID_A;
CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA(DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG);
CONFIGRET WINAPI CM_Locate_DevNodeA(PDEVINST, DEVINSTID_A, ULONG);
#define CM_Get_DevNode_Registry_Property CM_Get_DevNode_Registry_PropertyA
#define CM_Locate_DevNode CM_Locate_DevNodeA
#endif
CONFIGRET WINAPI CM_Enumerate_Classes(ULONG, LPGUID, ULONG);
CONFIGRET WINAPI CM_Get_Child(PDEVINST, DEVINST, ULONG);
CONFIGRET WINAPI CM_Get_Sibling(PDEVINST, DEVINST, ULONG);
/* end of cfgmgr32.h */
/**************************************************************************
Function Prototypes
**************************************************************************/
BOOL InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
void CreateListView(HINSTANCE, HWND);
void ResizeListView(HWND);
BOOL InitListView();
void InsertIntoListView(int, LPTSTR, LPTSTR);
LRESULT ListViewNotify(HWND, LPARAM);
void SwitchView(HWND, DWORD);
BOOL DoContextMenu(HWND, WPARAM, LPARAM);
void UpdateMenu(HWND, HMENU);
BOOL InsertListViewItems();
void PositionHeader();
void CreateButtons();
void ListByClass();
/**************************************************************************
Global Variables
**************************************************************************/
HINSTANCE g_hInst;
TCHAR g_szClassName[] = TEXT("VListVwClass");
HWND hWnd;
HWND hwndListView;
HWND hwndButtonListByClass;
HWND hwndButtonListByConnection;
HWND hwndButtonListByInterface;
HWND hwndButtonExit;
TCHAR temp [255];
HDC hDC;
TCHAR empty [255] = TEXT(" ");
void ListByClass()
{
GUID ClassGuid;
TCHAR ClassDescription[MAX_PATH];
TCHAR ClassName[MAX_CLASS_NAME_LEN];
TCHAR PropertyBuffer[256];
HKEY KeyClass;
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
int i = 0, j;
long Size;
long rc;
SendMessage(hwndListView, WM_SETREDRAW, FALSE, 0);
ListView_DeleteAllItems(hwndListView);
while (1)
{
CONFIGRET res;
res = CM_Enumerate_Classes(i, &ClassGuid, 0);
if (res == CR_NO_SUCH_VALUE)
break;
i++;
ClassName[0] = '\0';
if (!SetupDiClassNameFromGuid(
&ClassGuid,
ClassName,
sizeof(ClassName) / sizeof(ClassName[0]),
NULL))
{
_tprintf(_T("SetupDiClassNameFromGuid() failed with status 0x%lx\n"), GetLastError());
continue;
}
/* Get class description */
KeyClass = SetupDiOpenClassRegKey(
&ClassGuid,
KEY_READ);
if (KeyClass == INVALID_HANDLE_VALUE)
{
_tprintf(_T("SetupDiOpenClassRegKey() failed with status 0x%lx\n"), GetLastError());
continue;
}
Size = sizeof(ClassDescription);
rc = RegQueryValue(KeyClass, NULL, ClassDescription, &Size);
if (rc == ERROR_SUCCESS)
{
InsertIntoListView(i,ClassDescription,ClassName);
TextOut(hDC, 200, 40, empty, strlen(empty));
TextOut(hDC, 200, 40, ClassDescription, strlen(ClassDescription));
_tprintf(_T("%d %s (%s)\n"), i, ClassName, ClassDescription);
}
else
_tprintf(_T("RegQueryValue() failed with status 0x%lx\n"), rc);
RegCloseKey(KeyClass);
/* Enumerate devices in the class */
hDevInfo = SetupDiGetClassDevs(
&ClassGuid,
NULL, /* Enumerator */
NULL, /* hWnd parent */
DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE)
continue;
j = 0;
while (1)
{
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
if (!SetupDiEnumDeviceInfo(
hDevInfo,
j,
&DeviceInfoData))
{
break;
}
j++;
if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
NULL, /* Property reg data type */
(PBYTE)PropertyBuffer,
sizeof(PropertyBuffer),
NULL) /* Required size */)
{
_tprintf(_T("- %s\n"), PropertyBuffer);
InsertIntoListView(0,PropertyBuffer," ");
}
else if (SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_PHYSICAL_DEVICE_OBJECT_NAME,
NULL, /* Property reg data type */
(PBYTE)PropertyBuffer,
sizeof(PropertyBuffer),
NULL) /* Required size */)
{
_tprintf(_T("- %s\n"), PropertyBuffer);
InsertIntoListView(0,PropertyBuffer," ");
TextOut(hDC, 200, 40, empty, strlen(empty));
TextOut(hDC, 200, 40, PropertyBuffer, strlen(PropertyBuffer));
}
else
_tprintf(_T("SetupDiGetDeviceRegistryProperty() failed with status 0x%lx\n"), GetLastError());
}
SetupDiDestroyDeviceInfoList(hDevInfo);
}
SendMessage(hwndListView, WM_SETREDRAW, TRUE, 0);
}
CONFIGRET GetDeviceName(DEVINST DevInst, LPTSTR Buffer, DWORD BufferLength)
{
ULONG BufferSize = BufferLength * sizeof(TCHAR);
CONFIGRET cr;
cr = CM_Get_DevNode_Registry_Property(DevInst, CM_DRP_DEVICEDESC, NULL, Buffer, &BufferSize, 0);
if (cr != CR_SUCCESS)
{
_tprintf(_T("CM_Get_DevNode_Registry_Property() failed, cr= 0x%lx\n"), cr);
}
return cr;
}
CONFIGRET ListSubNodes(DEVINST parent, DWORD Level)
{
CONFIGRET cr;
DEVINST child;
cr = CM_Get_Child(&child, parent, 0);
if (cr == CR_NO_SUCH_DEVINST)
return CR_SUCCESS;
else if (cr != CR_SUCCESS)
{
_tprintf(_T("CM_Get_Child() failed, cr= 0x%lx\n"), cr);
return cr;
}
do
{
#define DISPLAY_LENGTH (MAX_PATH + MAX_DEVICE_ID_LEN)
DWORD DisplayLength = DISPLAY_LENGTH;
TCHAR DisplayName[DISPLAY_LENGTH];
ULONG i = Level;
TCHAR LevelSpaces [ 255 ];
cr = GetDeviceName(child, DisplayName, DisplayLength);
LevelSpaces[0] = '\0';
while (i-- != 0)
{
_tprintf(_T(" "));
sprintf(LevelSpaces,"%s%s",LevelSpaces," ");
}
if (cr == CR_SUCCESS)
{
_tprintf(_T("%s\n"), DisplayName);
sprintf(temp,"%s%s",LevelSpaces,DisplayName);
InsertIntoListView(0,temp," ");
TextOut(hDC, 200, 40, empty, strlen(empty));
TextOut(hDC, 200, 40, DisplayName, strlen(DisplayName));
}
else
{
_tprintf(_T("(unknown device)\n"));
sprintf(temp,"%s%s",LevelSpaces,"(unknown device)");
InsertIntoListView(0,temp," ");
TextOut(hDC, 200, 40, empty, strlen(empty));
TextOut(hDC, 200, 40, "(unknown device)", strlen("(unknown device)"));
}
cr = ListSubNodes(child, Level + 1);
if (cr != CR_SUCCESS)
return cr;
cr = CM_Get_Sibling(&child, child, 0);
if (cr != CR_SUCCESS && cr != CR_NO_SUCH_DEVINST)
{
_tprintf(_T("CM_Get_Sibling() failed, cr= 0x%lx\n"), cr);
return cr;
}
} while (cr == CR_SUCCESS);
return CR_SUCCESS;
}
int ListByConnection()
{
CONFIGRET cr;
DEVINST root;
ListView_DeleteAllItems(hwndListView);
cr = CM_Locate_DevNode(&root, NULL, 0);
if (cr != CR_SUCCESS)
{
_tprintf(_T("CM_Locate_DevNode() failed, cr= 0x%lx\n"), cr);
return 1;
}
SendMessage(hwndListView, WM_SETREDRAW, FALSE, 0);
cr = ListSubNodes(root, 0);
SendMessage(hwndListView, WM_SETREDRAW, TRUE, 0);
if (cr != CR_SUCCESS)
return 2;
return 0;
}
int ListByInterface(const GUID* guid)
{
HDEVINFO hDevInfo;
CHAR Buffer[sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + 0x100];
PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;
DWORD i;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
ListView_DeleteAllItems(hwndListView);
DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)Buffer;
DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
hDevInfo = SetupDiGetClassDevs(
guid,
NULL, /* Enumerator */
NULL, /* hwndParent */
DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
printf("SetupDiGetClassDevs() failed with status 0x%lx\n", GetLastError());
return 1;
}
i = 0;
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
SendMessage(hwndListView, WM_SETREDRAW, FALSE, 0);
while (TRUE)
{
if (!SetupDiEnumDeviceInterfaces(
hDevInfo,
NULL,
guid,
i,
&DeviceInterfaceData))
{
if (GetLastError() != ERROR_NO_MORE_ITEMS)
printf("SetupDiEnumDeviceInterfaces() failed with status 0x%lx\n", GetLastError());
break;
}
i++;
if (SetupDiGetDeviceInterfaceDetail(hDevInfo, &DeviceInterfaceData, DeviceInterfaceDetailData, sizeof(Buffer), NULL, NULL))
{
_tprintf(_T("- device %-2ld: %s\n"), i, DeviceInterfaceDetailData->DevicePath);
TextOut(hDC, 200, 40, empty, strlen(empty));
TextOut(hDC, 200, 40, DeviceInterfaceDetailData->DevicePath, strlen(DeviceInterfaceDetailData->DevicePath));
InsertIntoListView(i,DeviceInterfaceDetailData->DevicePath," ");
}
else
{
_tprintf(_T("- device %ld\n"), i);
InsertIntoListView(i," "," ");
}
}
SendMessage(hwndListView, WM_SETREDRAW, TRUE, 0);
SetupDiDestroyDeviceInfoList(hDevInfo);
return 0;
}
/*int main(void)
{
ListByClass();
ListByInterface(&GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR);
ListByConnection();
return 0;
}*/
//GUI
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
g_hInst = hInstance;
if(!hPrevInstance)
if(!InitApplication(hInstance))
return FALSE;
//required to use the common controls
InitCommonControls();
/* Perform initializations that apply to a specific instance */
if (!InitInstance(hInstance, nCmdShow))
return FALSE;
/* Acquire and dispatch messages until a WM_QUIT uMessage is received. */
while(GetMessage( &msg, NULL, 0x00, 0x00))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
ATOM aReturn;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = 0;
wcex.lpfnWndProc = (WNDPROC)MainWndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW );
wcex.lpszMenuName = 0;
wcex.lpszClassName = g_szClassName;
wcex.hIcon = 0;
wcex.hIconSm = 0;
aReturn = RegisterClassEx(&wcex);
if(0 == aReturn)
{
WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = (WNDPROC)MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = 0;
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
wc.lpszMenuName = 0;
wc.lpszClassName = g_szClassName;
aReturn = RegisterClass(&wc);
}
return aReturn;
}
BOOL InitInstance( HINSTANCE hInstance,
int nCmdShow)
{
HWND hWnd;
TCHAR szTitle[MAX_PATH] = TEXT("Device viewer");
g_hInst = hInstance;
/* Create a main window for this application instance. */
hWnd = CreateWindowEx( 0,
g_szClassName,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
/* If window could not be created, return "failure" */
if (!hWnd)
return FALSE;
/* Make the window visible; update its client area; and return "success" */
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hDC = GetDC(hWnd);
return TRUE;
}
LRESULT CALLBACK MainWndProc( HWND hWnd,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
switch (uMessage)
{
case WM_CREATE:
// create the TreeView control
CreateListView(g_hInst, hWnd);
//initialize the TreeView control
InitListView();
CreateButtons(g_hInst, hWnd);
TextOut(hDC, 200, 40, empty, strlen(empty));
break;
case WM_SIZE:
ResizeListView(hWnd);
break;
case WM_DESTROY:
ReleaseDC(hWnd, hDC);
PostQuitMessage(0);
break;
case WM_COMMAND:
if (HIWORD(wParam) == BN_CLICKED &&
(HWND) lParam == hwndButtonListByClass)
{
ListByClass();
}
if (HIWORD(wParam) == BN_CLICKED &&
(HWND) lParam == hwndButtonListByConnection)
{
ListByConnection();
}
if (HIWORD(wParam) == BN_CLICKED &&
(HWND) lParam == hwndButtonListByInterface)
{
ListByInterface(&GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR);
}
if (HIWORD(wParam) == BN_CLICKED &&
(HWND) lParam == hwndButtonExit)
{
/* Close the window. */
DestroyWindow (hWnd);
} return 0;
break;
default:
break;
}
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
void CreateListView(HINSTANCE hInstance, HWND hwndParent)
{
DWORD dwStyle;
dwStyle = WS_TABSTOP |
WS_CHILD |
WS_BORDER |
WS_VISIBLE |
LVS_AUTOARRANGE |
LVS_REPORT ;//|
//LVS_OWNERDATA;
hwndListView = CreateWindowEx( WS_EX_CLIENTEDGE, // ex style
WC_LISTVIEW, // class name - defined in commctrl.h
TEXT(""), // dummy text
dwStyle, // style
0, // x position
0, // y position
0, // width
0, // height
hwndParent, // parent
0,//(HMENU)ID_LISTVIEW, // ID
g_hInst, // instance
NULL); // no extra data
ResizeListView(hwndParent);
}
void ResizeListView(HWND hwndParent)
{
RECT rc;
GetClientRect(hwndParent, &rc);
MoveWindow( hwndListView,
rc.left,
rc.top+60,
rc.right - rc.left,
rc.bottom - rc.top-60,
TRUE);
}
void PositionHeader()
{
HWND hwndHeader = GetWindow(hwndListView, GW_CHILD);
DWORD dwStyle = GetWindowLong(hwndListView, GWL_STYLE);
/*To ensure that the first item will be visible, create the control without
the LVS_NOSCROLL style and then add it here*/
dwStyle |= LVS_NOSCROLL;
SetWindowLong(hwndListView, GWL_STYLE, dwStyle);
//only do this if we are in report view and were able to get the header hWnd
if(((dwStyle & LVS_TYPEMASK) == LVS_REPORT) && hwndHeader)
{
RECT rc;
HD_LAYOUT hdLayout;
WINDOWPOS wpos;
GetClientRect(hwndListView, &rc);
hdLayout.prc = &rc;
hdLayout.pwpos = &wpos;
Header_Layout(hwndHeader, &hdLayout);
SetWindowPos( hwndHeader,
wpos.hwndInsertAfter,
wpos.x,
wpos.y,
wpos.cx,
wpos.cy,
wpos.flags | SWP_SHOWWINDOW);
ListView_EnsureVisible(hwndListView, 0, FALSE);
}
}
BOOL InitListView()
{
LV_COLUMN lvColumn;
int i;
TCHAR szString[3][20] = {TEXT("#"), TEXT("Name"), TEXT("Intern name")};
//empty the list
ListView_DeleteAllItems(hwndListView);
//initialize the columns
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_LEFT;
i=0;
lvColumn.cx = 20;
lvColumn.pszText = szString[i];
ListView_InsertColumn(hwndListView, i, &lvColumn);
i=1;
lvColumn.cx = 400;
lvColumn.pszText = szString[i];
ListView_InsertColumn(hwndListView, i, &lvColumn);
i=2;
lvColumn.cx = 150;
lvColumn.pszText = szString[i];
ListView_InsertColumn(hwndListView, i, &lvColumn);
return TRUE;
}
typedef struct tagLINE_INFO
{
DWORD dwValType;
LPTSTR name;
void* val;
size_t val_len;
} LINE_INFO, *PLINE_INFO;
void InsertIntoListView(int typ, LPTSTR name, LPTSTR intern_name)
{
//MessageBox(hWnd, "You just pressed Ctrl+a", "Hotkey", MB_OK | MB_ICONINFORMATION);
TCHAR temp[ 255 ];
//LINE_INFO* linfo;
LVITEM item;
int index;
//linfo->name = Name;
item.mask = LVIF_TEXT;
item.iItem = 9999;
item.iSubItem = 0;
item.state = 0;
//item.statemask = 0;
item.pszText=malloc(10);
if (typ>=1)
{
sprintf(temp,"%i",typ);
item.pszText = temp;
}
else
item.pszText = "";
item.cchTextMax = _tcslen(item.pszText);
if (item.cchTextMax == 0)
item.pszText = LPSTR_TEXTCALLBACK;
item.iImage = 0;
//item.iIdent = 0;
//item.iGroupId = 0;
//item.cColumns = 0 ;
//item.puColumns = 0;
//item.lParam = (LPARAM)linfo;
index = ListView_InsertItem(hwndListView, &item);
ListView_SetItemText(hwndListView, index, 1, name);
ListView_SetItemText(hwndListView, index, 2, intern_name);
}
void CreateButtons(HINSTANCE hInstance, HWND hwndParent)
{
hwndButtonListByClass = CreateWindowEx (
0,
"button", /* Builtin button class */
"List by Class",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0, 0, 190, 30,
hwndParent, /* Parent is this window. */
0, /* Control ID: 1 */
g_hInst,
NULL
);
hwndButtonListByConnection = CreateWindowEx (
0,
"button", /* Builtin button class */
"List by Connection",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
200, 0, 190, 30,
hwndParent, /* Parent is this window. */
0, /* Control ID: 1 */
g_hInst,
NULL
);
hwndButtonListByInterface = CreateWindowEx (
0,
"button", /* Builtin button class */
"List by Interface",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
400, 0, 190, 30,
hwndParent, /* Parent is this window. */
0, /* Control ID: 1 */
g_hInst,
NULL
);
hwndButtonExit = CreateWindowEx (
0,
"button", /* Builtin button class */
"Exit",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0, 30, 190, 30,
hwndParent, /* Parent is this window. */
0, /* Control ID: 1 */
g_hInst,
NULL
);
}

View file

@ -0,0 +1,6 @@
/* $Id$ */
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS W32 Device Manager Utility\0"
#define REACTOS_STR_INTERNAL_NAME "devmgr\0"
#define REACTOS_STR_ORIGINAL_FILENAME "devmgr.exe\0"
#include <reactos/version.rc>

View file

@ -0,0 +1,12 @@
<module name="devmgrapp" type="win32cui" installbase="system32" installname="devmgr.exe">
<define name="__USE_W32API" />
<define name="DEFINE_GUID" />
<library>ntdll</library>
<library>setupapi</library>
<library>gdi32</library>
<library>kernel32</library>
<library>user32</library>
<library>comctl32</library>
<file>devmgr.c</file>
<efile>devmgr.rc</efile>
</module>

View file

@ -0,0 +1,44 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/En.rc
* PURPOSE: English resources
* COPYRIGHT: Copyright 2004 Mike McCormack for CodeWeavers
* Copyright 2005 Ge van Geldorp (gvg@reactos.org)
*/
/*
* Based on Wine dlls/shdocvw/En.rc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT
IDD_GETFIREFOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
STYLE DS_MODALFRAME | DS_CENTER | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Lade Firefox herunter"
FONT 8, "MS Shell Dlg"
{
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
CHECKBOX "Entferne ""Get Firefox"" nach Fertigstellung aus dem Startmenü", IDC_REMOVE,
10, 44, 200, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
}
STRINGTABLE
BEGIN
IDS_START_MENU_NAME "Get Firefox"
END

View file

@ -0,0 +1,44 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/En.rc
* PURPOSE: English resources
* COPYRIGHT: Copyright 2004 Mike McCormack for CodeWeavers
* Copyright 2005 Ge van Geldorp (gvg@reactos.org)
*/
/*
* Based on Wine dlls/shdocvw/En.rc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
IDD_GETFIREFOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
STYLE DS_MODALFRAME | DS_CENTER | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Downloading Firefox"
FONT 8, "MS Shell Dlg"
{
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
CHECKBOX "Remove ""Get Firefox"" from Start Menu when done", IDC_REMOVE,
10, 44, 200, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
}
STRINGTABLE
BEGIN
IDS_START_MENU_NAME "Get Firefox"
END

View file

@ -0,0 +1,45 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/En.rc
* PURPOSE: French resources
* COPYRIGHT: Copyright 2004 Mike McCormack for CodeWeavers
* Copyright 2005 Ge van Geldorp (gvg@reactos.org)
* Copyright 2005 G. Maton (mustang9@gmail.com) - French translation
*/
/*
* Based on Wine dlls/shdocvw/En.rc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
IDD_GETFIREFOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
STYLE DS_MODALFRAME | DS_CENTER | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Téléchargement de Firefox"
FONT 8, "MS Shell Dlg"
{
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
CHECKBOX "Supprimer ""Obtenir Firefox"" du Menu démarrer une fois terminé", IDC_REMOVE,
10, 44, 200, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Annuler", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
}
STRINGTABLE
BEGIN
IDS_START_MENU_NAME "Obtenir Firefox"
END

View file

@ -0,0 +1,45 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/En.rc
* PURPOSE: English resources
* COPYRIGHT: Copyright 2004 Mike McCormack for CodeWeavers
* Copyright 2005 Ge van Geldorp (gvg@reactos.org)
* Copyright 2005 Robert Horvath (talley@cubeclub.hu) - Hungarian translation
*/
/*
* Based on Wine dlls/shdocvw/En.rc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
LANGUAGE LANG_HUNGARIAN, SUBLANG_NEUTRAL
IDD_GETFIREFOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
STYLE DS_MODALFRAME | DS_CENTER | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "A Firefox letöltése"
FONT 8, "MS Shell Dlg"
{
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER
CHECKBOX "A ""Szerezd meg a Firefoxot"" elvátolítása a Start Menübõl befejezés után", IDC_REMOVE,
10, 44, 200, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Mégse", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
}
STRINGTABLE
BEGIN
IDS_START_MENU_NAME "Szerezd meg Firefoxot"
END

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,383 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/getfirefox.c
* PURPOSE: Main program
* COPYRIGHT: Copyright 2001 John R. Sheets (for CodeWeavers)
* Copyright 2004 Mike McCormack (for CodeWeavers)
* Copyright 2005 Ge van Geldorp (gvg@reactos.org)
*/
/*
* Based on Wine dlls/shdocvw/shdocvw_main.c
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <precomp.h>
#define NDEBUG
#include <debug.h>
#define DOWNLOAD_URL L"http://links.reactos.org/getfirefox"
typedef struct _IBindStatusCallbackImpl
{
const IBindStatusCallbackVtbl *vtbl;
LONG ref;
HWND hDialog;
BOOL *pbCancelled;
} IBindStatusCallbackImpl;
static HRESULT WINAPI
dlQueryInterface(IBindStatusCallback* This, REFIID riid, void** ppvObject)
{
if (NULL == ppvObject)
{
return E_POINTER;
}
if (IsEqualIID(riid, &IID_IUnknown) ||
IsEqualIID(riid, &IID_IBindStatusCallback))
{
IBindStatusCallback_AddRef( This );
*ppvObject = This;
return S_OK;
}
return E_NOINTERFACE;
}
static ULONG WINAPI
dlAddRef(IBindStatusCallback* iface)
{
IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
return InterlockedIncrement(&This->ref);
}
static ULONG WINAPI
dlRelease(IBindStatusCallback* iface)
{
IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
DWORD ref = InterlockedDecrement(&This->ref);
if( !ref )
{
DestroyWindow( This->hDialog );
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
}
static HRESULT WINAPI
dlOnStartBinding(IBindStatusCallback* iface, DWORD dwReserved, IBinding* pib)
{
DPRINT1("OnStartBinding not implemented\n");
return S_OK;
}
static HRESULT WINAPI
dlGetPriority(IBindStatusCallback* iface, LONG* pnPriority)
{
DPRINT1("GetPriority not implemented\n");
return S_OK;
}
static HRESULT WINAPI
dlOnLowResource( IBindStatusCallback* iface, DWORD reserved)
{
DPRINT1("OnLowResource not implemented\n");
return S_OK;
}
static HRESULT WINAPI
dlOnProgress(IBindStatusCallback* iface, ULONG ulProgress,
ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
{
IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
HWND Item;
LONG r;
WCHAR OldText[100];
Item = GetDlgItem(This->hDialog, IDC_PROGRESS);
if (NULL != Item && 0 != ulProgressMax)
{
SendMessageW(Item, PBM_SETPOS, (ulProgress * 100) / ulProgressMax, 0);
}
Item = GetDlgItem(This->hDialog, IDC_STATUS);
if (NULL != Item)
{
SendMessageW(Item, WM_GETTEXT, sizeof(OldText) / sizeof(OldText[0]),
(LPARAM) OldText);
if (sizeof(OldText) / sizeof(OldText[0]) - 1 <= wcslen(OldText) ||
0 != wcscmp(OldText, szStatusText))
{
SendMessageW(Item, WM_SETTEXT, 0, (LPARAM) szStatusText);
}
}
SetLastError(0);
r = GetWindowLongPtrW(This->hDialog, GWLP_USERDATA);
if (0 != r || 0 != GetLastError())
{
*This->pbCancelled = TRUE;
DPRINT("Cancelled\n");
return E_ABORT;
}
return S_OK;
}
static HRESULT WINAPI
dlOnStopBinding(IBindStatusCallback* iface, HRESULT hresult, LPCWSTR szError)
{
DPRINT1("OnStopBinding not implemented\n");
return S_OK;
}
static HRESULT WINAPI
dlGetBindInfo(IBindStatusCallback* iface, DWORD* grfBINDF, BINDINFO* pbindinfo)
{
DPRINT1("GetBindInfo not implemented\n");
return S_OK;
}
static HRESULT WINAPI
dlOnDataAvailable(IBindStatusCallback* iface, DWORD grfBSCF,
DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
{
DPRINT1("OnDataAvailable implemented\n");
return S_OK;
}
static HRESULT WINAPI
dlOnObjectAvailable(IBindStatusCallback* iface, REFIID riid, IUnknown* punk)
{
DPRINT1("OnObjectAvailable implemented\n");
return S_OK;
}
static const IBindStatusCallbackVtbl dlVtbl =
{
dlQueryInterface,
dlAddRef,
dlRelease,
dlOnStartBinding,
dlGetPriority,
dlOnLowResource,
dlOnProgress,
dlOnStopBinding,
dlGetBindInfo,
dlOnDataAvailable,
dlOnObjectAvailable
};
static IBindStatusCallback*
CreateDl(HWND Dlg, BOOL *pbCancelled)
{
IBindStatusCallbackImpl *This;
This = HeapAlloc(GetProcessHeap(), 0, sizeof(IBindStatusCallbackImpl));
This->vtbl = &dlVtbl;
This->ref = 1;
This->hDialog = Dlg;
This->pbCancelled = pbCancelled;
return (IBindStatusCallback*) This;
}
static BOOL
GetShortcutName(LPWSTR ShortcutName)
{
if (! SHGetSpecialFolderPathW(0, ShortcutName, CSIDL_PROGRAMS, FALSE))
{
return FALSE;
}
if (NULL == PathAddBackslashW(ShortcutName))
{
return FALSE;
}
if (0 == LoadStringW(GetModuleHandle(NULL), IDS_START_MENU_NAME,
ShortcutName + wcslen(ShortcutName),
MAX_PATH - wcslen(ShortcutName)))
{
return FALSE;
}
if (MAX_PATH - 5 < wcslen(ShortcutName))
{
return FALSE;
}
wcscat(ShortcutName, L".lnk");
return TRUE;
}
static DWORD WINAPI
ThreadFunc(LPVOID Context)
{
static const WCHAR szUrl[] = DOWNLOAD_URL;
IBindStatusCallback *dl;
WCHAR path[MAX_PATH], ShortcutName[MAX_PATH];
LPWSTR p;
STARTUPINFOW si;
PROCESS_INFORMATION pi;
HWND Dlg = (HWND) Context;
DWORD r;
BOOL bCancelled = FALSE;
BOOL bTempfile = FALSE;
/* built the path for the download */
p = wcsrchr(szUrl, L'/');
if (NULL == p)
{
goto end;
}
if (! GetTempPathW(MAX_PATH, path))
{
goto end;
}
wcscat(path, p + 1);
/* download it */
bTempfile = TRUE;
dl = CreateDl(Context, &bCancelled);
r = URLDownloadToFileW(NULL, szUrl, path, 0, dl);
if (NULL != dl)
{
IBindStatusCallback_Release(dl);
}
if (S_OK != r || bCancelled )
{
goto end;
}
ShowWindow(Dlg, SW_HIDE);
/* run it */
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
r = CreateProcessW(path, NULL, NULL, NULL, 0, 0, NULL, NULL, &si, &pi);
if (0 == r)
{
goto end;
}
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
if (BST_CHECKED == SendMessageW(GetDlgItem(Dlg, IDC_REMOVE), BM_GETCHECK,
0, 0) &&
GetShortcutName(ShortcutName))
{
DeleteFileW(ShortcutName);
}
end:
if (bTempfile)
{
DeleteFileW(path);
}
EndDialog(Dlg, 0);
return 0;
}
static INT_PTR CALLBACK
dlProc(HWND Dlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
HANDLE Thread;
DWORD ThreadId;
HWND Item;
HICON Icon;
WCHAR ShortcutName[MAX_PATH];
switch (Msg)
{
case WM_INITDIALOG:
Icon = LoadIconW((HINSTANCE) GetWindowLongPtr(Dlg, GWLP_HINSTANCE),
MAKEINTRESOURCEW(IDI_ICON_MAIN));
if (NULL != Icon)
{
SendMessageW(Dlg, WM_SETICON, ICON_BIG, (LPARAM) Icon);
SendMessageW(Dlg, WM_SETICON, ICON_SMALL, (LPARAM) Icon);
}
SetWindowLongPtrW(Dlg, GWLP_USERDATA, 0);
Item = GetDlgItem(Dlg, IDC_PROGRESS);
if (NULL != Item)
{
SendMessageW(Item, PBM_SETRANGE, 0, MAKELPARAM(0,100));
SendMessageW(Item, PBM_SETPOS, 0, 0);
}
Item = GetDlgItem(Dlg, IDC_REMOVE);
if (NULL != Item)
{
if (GetShortcutName(ShortcutName) &&
INVALID_FILE_ATTRIBUTES != GetFileAttributesW(ShortcutName))
{
SendMessageW(Item, BM_SETCHECK, BST_CHECKED, 0);
}
else
{
SendMessageW(Item, BM_SETCHECK, BST_UNCHECKED, 0);
ShowWindow(Item, SW_HIDE);
}
}
Thread = CreateThread(NULL, 0, ThreadFunc, Dlg, 0, &ThreadId);
if (NULL == Thread)
{
return FALSE;
}
CloseHandle(Thread);
return TRUE;
case WM_COMMAND:
if (wParam == IDCANCEL)
{
SetWindowLongPtrW(Dlg, GWLP_USERDATA, 1);
PostMessage(Dlg, WM_CLOSE, 0, 0);
}
return FALSE;
case WM_CLOSE:
EndDialog(Dlg, 0);
return TRUE;
default:
return FALSE;
}
}
/***********************************************************************
* Main program
*/
int
main(int argc, char *argv[])
{
InitCommonControls();
DialogBoxW(GetModuleHandle(NULL), MAKEINTRESOURCEW(IDD_GETFIREFOX), 0,
dlProc);
return 0;
}

View file

@ -0,0 +1,28 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/getfirefox.rc
* PURPOSE: Language-independent resources
* COPYRIGHT: Copyright 2005 Ge van Geldorp (gvg@reactos.org)
*/
#include <windows.h>
#include "resource.h"
#define REACTOS_STR_FILE_DESCRIPTION "Firefox downloader\0"
#define REACTOS_STR_INTERNAL_NAME "getfirefox\0"
#define REACTOS_STR_ORIGINAL_FILENAME "getfirefox.exe\0"
#include <reactos/version.rc>
/*
* Note: this icon is the "default logo" referenced here:
* http://www.mozilla.org/foundation/trademarks/faq.html (under "What are the
* Mozilla Trademarks and Logos?"). Don't use the official Firefox logo as it
* is trademarked.
*/
1 ICON "firefox.ico"
#include "De.rc"
#include "En.rc"
#include "Fr.rc"
#include "Hu.rc"

View file

@ -0,0 +1,17 @@
<module name="getfirefox" type="win32gui" installbase="system32" installname="getfirefox.exe">
<include base="getfirefox">.</include>
<define name="UNICODE" />
<define name="_UNICODE" />
<define name="__USE_W32API" />
<define name="WINVER">0x0501</define>
<define name="_WIN32_IE>0x0600</define>
<library>comctl32</library>
<library>ntdll</library>
<library>shell32</library>
<library>shlwapi</library>
<library>urlmon</library>
<library>uuid</library>
<pch>precomp.h</pch>
<file>getfirefox.c</file>
<file>getfirefox.rc</file>
</module>

View file

@ -0,0 +1,19 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/precomp.h
* PURPOSE: Precompiled header file
* COPYRIGHT: Copyright 2005 Ge van Geldorp (gvg@reactos.org)
*/
#define COBJMACROS
#define NTOS_MODE_USER
#define WIN32_NO_STATUS
#include <windows.h>
#include <ndk/ntndk.h>
#include <commctrl.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <urlmon.h>
#include "resource.h"

View file

@ -0,0 +1,17 @@
/*
* PROJECT: ReactOS utilities
* LICENSE: GPL - See COPYING in the top level directory
* FILE: apps/utils/getfirefox/resource.h
* PURPOSE: Resource constants
* COPYRIGHT: Copyright 2005 Ge van Geldorp (gvg@reactos.org)
*/
#define IDI_ICON_MAIN 1
#define IDD_GETFIREFOX 100
#define IDC_PROGRESS 1000
#define IDC_STATUS 1001
#define IDC_REMOVE 1002
#define IDS_START_MENU_NAME 1100

View file

@ -0,0 +1,58 @@
/*
* ReactOS Win32 Applications
* Copyright (C) 2005 ReactOS Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id$
*
* COPYRIGHT : See COPYING in the top level directory
* PROJECT : ReactOS/Win32 get host name
* FILE : subsys/system/hostname/hostname.c
* PROGRAMMER: Emanuele Aliberti (ea@reactos.com)
*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char ** argv)
{
if (1 == argc)
{
TCHAR ComputerName [MAX_COMPUTERNAME_LENGTH + 1];
DWORD ComputerNameSize = sizeof ComputerName / sizeof ComputerName[0];
ZeroMemory (ComputerName, sizeof ComputerName );
if (GetComputerName(ComputerName, & ComputerNameSize))
{
printf ("%s\n", ComputerName);
return EXIT_SUCCESS;
}
fprintf (stderr, "%s: Win32 error %ld.\n",
argv[0], GetLastError());
return EXIT_FAILURE;
}else{
if (0 == strcmp(argv[1],"-s"))
{
fprintf(stderr,"%s: -s not supported.\n",argv[0]);
return EXIT_FAILURE;
}else{
printf("Print the current host's name.\n\nhostname\n");
}
}
return EXIT_SUCCESS;
}
/* EOF */

View file

@ -0,0 +1,4 @@
#define REACTOS_STR_FILE_DESCRIPTION "Win32 Get local host name\0"
#define REACTOS_STR_INTERNAL_NAME "hostname\0"
#define REACTOS_STR_ORIGINAL_FILENAME "hostname.exe\0"
#include <reactos/version.rc>

View file

@ -0,0 +1,7 @@
<module name="hostname" type="win32cui" installbase="system32" installname="hostname.exe" allowwarnings="true">
<define name="__USE_W32API" />
<library>kernel32</library>
<file>hostname.c</file>
<file>hostname.rc</file>
</module>

View file

@ -0,0 +1,148 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_GERMAN, SUBLANG_GERMAN\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_SDIFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Datei"
BEGIN
MENUITEM "&Beenden", ID_FILE_EXIT
END
POPUP "&Ansicht"
BEGIN
MENUITEM "&Toolbar", ID_VIEW_TOOL_BAR
MENUITEM "S&ide Bar", ID_VIEW_SIDE_BAR, GRAYED
MENUITEM "&Status Bar", ID_VIEW_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "&Aktualisieren\tF5", ID_REFRESH
MENUITEM "&Vollbild\tCtrl+Shift+S", ID_VIEW_FULLSCREEN
END
POPUP "&Hilfe"
BEGIN
MENUITEM "IBrowser &FAQ...", ID_IBROWSER_FAQ
MENUITEM "&About IBrowser...", ID_ABOUT_IBROWSER
MENUITEM "About &OS...", ID_ABOUT_WINDOWS
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUT_IBROWSER DIALOG DISCARDABLE 0, 0, 199, 106
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About ReactOS Web Browser"
FONT 10, "MS Sans Serif"
BEGIN
LTEXT "ReactOS Web Browser",IDC_ROS_IBROWSER,91,13,104,11
LTEXT "V 0.9",IDC_VERSION_TXT,91,27,104,8
LTEXT "(c) 2005 Martin Fuchs",IDC_STATIC,91,42,104,8
LTEXT "",IDC_WIN_VERSION,91,58,98,22
LTEXT "http://www.sky.franken.de/explorer/",IDC_WWW,17,84,129,
8
CONTROL "&OK",IDOK,"Button",BS_OWNERDRAW | BS_FLAT | WS_GROUP,
154,90,38,12
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_TITLE "Reactos Internet Web Browser"
IDS_EMPTY "(Empty)"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_ABOUT_IBROWSER "&Über..."
END
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "ROS IBrowser%0s"
#else
IDS_IBROWSER_VERSION_STR "ROS IBrowser Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,161 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_SDIFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Open", ID_FILE_OPEN
MENUITEM "E&xit", ID_FILE_EXIT
END
POPUP "&View"
BEGIN
MENUITEM "&Toolbar", ID_VIEW_TOOL_BAR
MENUITEM "S&ide Bar", ID_VIEW_SIDE_BAR, GRAYED
MENUITEM "&Status Bar", ID_VIEW_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "&Refresh\tF5", ID_REFRESH
MENUITEM "F&ull Screen\tCtrl+Shift+S", ID_VIEW_FULLSCREEN
END
POPUP "&Help"
BEGIN
MENUITEM "IBrowser &FAQ...", ID_IBROWSER_FAQ
MENUITEM "&About IBrowser...", ID_ABOUT_IBROWSER
MENUITEM "About &OS...", ID_ABOUT_WINDOWS
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUT_IBROWSER DIALOG DISCARDABLE 0, 0, 199, 106
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About ReactOS Web Browser"
FONT 10, "MS Sans Serif"
BEGIN
LTEXT "ReactOS Web Browser",IDC_ROS_IBROWSER,91,13,104,11
LTEXT "V 0.9",IDC_VERSION_TXT,91,27,104,8
LTEXT "(c) 2005 Martin Fuchs",IDC_STATIC,91,42,104,8
LTEXT "",IDC_WIN_VERSION,91,58,98,22
LTEXT "http://www.sky.franken.de/explorer/",IDC_WWW,17,84,129,
8
CONTROL "&OK",IDOK,"Button",BS_OWNERDRAW | BS_FLAT | WS_GROUP,
154,90,38,12
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_TITLE "Reactos Internet Web Browser"
IDS_EMPTY "(Empty)"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_ABOUT_IBROWSER "&About..."
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "ROS IBrowser%0s"
#else
IDS_IBROWSER_VERSION_STR "ROS IBrowser Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,122 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_SPANISH, SUBLANG_SPANISH\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""Nevegador de Web ReactOS%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""Nevegador de Web ReactOS Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Spanish (Castilian) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESP)
#ifdef _WIN32
LANGUAGE LANG_SPANISH, SUBLANG_SPANISH
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_SDIFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Archivo"
BEGIN
MENUITEM "S&alir", ID_FILE_EXIT
END
POPUP "&Ver"
BEGIN
MENUITEM "&Barra de Herramientas", ID_VIEW_TOOL_BAR
MENUITEM "Barra &Lateral", ID_VIEW_SIDE_BAR, GRAYED
MENUITEM "Barra de &Estado", ID_VIEW_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "&Actualizar\tF5", ID_REFRESH
MENUITEM "P&antalla Completa\tCtrl+Shift+S", ID_VIEW_FULLSCREEN
END
POPUP "&Ayuda"
BEGIN
MENUITEM "IBrowser &FAQ...", ID_IBROWSER_FAQ
MENUITEM "&Acerca de IBrowser...", ID_ABOUT_IBROWSER
MENUITEM "Acerca de &OS...", ID_ABOUT_WINDOWS
END
END
#endif // Spanish (Castilian) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_SPANISH, SUBLANG_SPANISH
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "Nevegador de Web ReactOS%0s"
#else
IDS_IBROWSER_VERSION_STR "Nevegador de Web ReactOS Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,151 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// French (France) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
#ifdef _WIN32
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_FRENCH, SUBLANG_FRENCH\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""Navigateur Internet de ReactOS%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""Navigateur Internet de ReactOS Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_SDIFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Fichier"
BEGIN
MENUITEM "&Ouvrir", ID_FILE_OPEN
MENUITEM "&Quitter", ID_FILE_EXIT
END
POPUP "&Affichage"
BEGIN
MENUITEM "Barre d'ou&tils", ID_VIEW_TOOL_BAR
MENUITEM "Pann&eau lat?al", ID_VIEW_SIDE_BAR, GRAYED
MENUITEM "&Barre d'?at", ID_VIEW_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "Actualise&r", ID_REFRESH
MENUITEM "&Plein ?ran", ID_VIEW_FULLSCREEN
END
POPUP "&Aide"
BEGIN
MENUITEM "&Rubriques d'aide de iBrowser", ID_IBROWSER_FAQ
MENUITEM "? propos de iBrowser...", ID_ABOUT_IBROWSER
MENUITEM "? propos de ReactOS...", ID_ABOUT_WINDOWS
END
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_TITLE "Navigateur internet de Reactos"
IDS_EMPTY "(Vide)"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_ABOUT_IBROWSER "? propos de iBrowser..."
END
#endif // French (France) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "Navigateur Internet de ReactOS%0s"
#else
IDS_IBROWSER_VERSION_STR "Navigateur Internet de ReactOS Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,81 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""A ReactOS %s webböngészõ%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""A ReactOS %s webböngészõ Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "A ReactOS %s webböngészõ%0s"
#else
IDS_IBROWSER_VERSION_STR "A ReactOS %s webböngészõ Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,140 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Japanese resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_SDIFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "ファイル(&F)"
BEGIN
MENUITEM "開く(&O)", ID_FILE_OPEN
MENUITEM "終了(&X)", ID_FILE_EXIT
END
POPUP "表\示(&V)"
BEGIN
MENUITEM "ツール バー(&T)", ID_VIEW_TOOL_BAR
MENUITEM "サイド バー(&I)", ID_VIEW_SIDE_BAR, GRAYED
MENUITEM "ステータス バー(&S)", ID_VIEW_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "最新の情報に更新(&R)\tF5", ID_REFRESH
MENUITEM "全画面表\示(&I)\tCtrl+Shift+S", ID_VIEW_FULLSCREEN
END
POPUP "ヘルプ(&H)"
BEGIN
MENUITEM "IBrowser FAQ (&F)...", ID_IBROWSER_FAQ
MENUITEM "IBrowser について(&A)...", ID_ABOUT_IBROWSER
MENUITEM "OS について(&O)...", ID_ABOUT_WINDOWS
END
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_TITLE "Reactos Internet Web Browser"
IDS_EMPTY "(Empty)"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_ABOUT_IBROWSER "バージョン情報(&A)..."
END
#endif // Japanese resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "ROS IBrowser%0s"
#else
IDS_IBROWSER_VERSION_STR "ROS IBrowser Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,67 @@
#
# ROS Internet Web Browser
#
# Makefile.MinGW
#
CC = gcc
CXX = g++
LINK = g++
CFLAGS = -DWIN32 -D_WIN32_IE=0x0600 -D_WIN32_WINNT=0x0501 -DWINVER=0x0500 -fexceptions -Wall -Wno-unused-value -I. -I$(EXPAT_INC)
RCFLAGS = -DWIN32 -D__WINDRES__
LFLAGS = -Wl,--subsystem,windows
ifdef DEBUG
CFLAGS += -D_DEBUG -g
RCFLAGS += -D_DEBUG
LFLAGS += -g
else
CFLAGS += -DNDEBUG -Os
RCFLAGS += -DNDEBUG
LFLAGS += -s
endif
ifndef UNICODE
UNICODE = 1
endif
ifeq ($(UNICODE),1)
CFLAGS += -DUNICODE
# LFLAGS+= -Wl,--entry,_wWinMain@16
RCFLAGS += -DUNICODE
endif
CXXFLAGS = $(CFLAGS)
EXEC_SUFFIX = .exe
RES_SUFFIX = .coff
VPATH = utility
PROGRAM = ibrowser
TARGET = $(PROGRAM)$(EXEC_SUFFIX)
OBJECTS = \
utility.o \
window.o \
ibrowser.o \
webchild.o \
mainframe.o \
favorites.o \
xmlstorage.o
LIBS = gdi32 comctl32 shell32 ole32 uuid oleaut32
all: $(TARGET)
$(TARGET): $(OBJECTS) $(PROGRAM)$(RES_SUFFIX) libexpat.dll
$(LINK) $(LFLAGS) -o $@ $^ $(addprefix -l,$(LIBS)) $(addprefix -l,$(DELAYIMPORTS))
ibrowser$(RES_SUFFIX): $(PROGRAM)_intres.rc res/*.bmp res/*.ico
windres $(RCFLAGS) -o $@ $(PROGRAM)_intres.rc
clean:
rm -f $(TARGET) $(OBJECTS) $(PROGRAM)$(RES_SUFFIX) \
desktop/*.o dialogs/*.o shell/*.o taskbar/*.o utility/*.o

View file

@ -0,0 +1,72 @@
#
# ROS Internet Web Browser
#
# Makefile.PCH
#
# MinGW Makefile with precompiled header support
#
CC = gcc
CXX = g++
LINK = g++
CFLAGS = -DWIN32 -D_WIN32_IE=0x0600 -D_WIN32_WINNT=0x0501 -DWINVER=0x0500 -fexceptions -Wall -Wno-unused-value -I. -I$(EXPAT_INC)
RCFLAGS = -DWIN32 -D__WINDRES__
LFLAGS = -Wl,--subsystem,windows
ifdef DEBUG
CFLAGS += -D_DEBUG -g
RCFLAGS += -D_DEBUG
LFLAGS += -g
else
CFLAGS += -DNDEBUG -Os -march=pentium4
RCFLAGS += -DNDEBUG
LFLAGS += -s
endif
ifndef UNICODE
UNICODE = 1
endif
ifeq ($(UNICODE),1)
CFLAGS += -DUNICODE
# LFLAGS+= -Wl,--entry,_wWinMain@16
RCFLAGS += -DUNICODE
endif
CXXFLAGS = $(CFLAGS)
EXEC_SUFFIX = .exe
RES_SUFFIX = .coff
VPATH = utility
PROGRAM = ibrowser
TARGET = $(PROGRAM)$(EXEC_SUFFIX)
OBJECTS = \
utility.o \
window.o \
ibrowser.o \
webchild.o \
mainframe.o \
favorites.o \
xmlstorage.o
LIBS = gdi32 comctl32 shell32 ole32 oleaut32 uuid
all: precomp.h.gch $(TARGET)
precomp.h.gch: *.h utility/*.h
$(CXX) $(CFLAGS) precomp.h
$(TARGET): $(OBJECTS) $(PROGRAM)$(RES_SUFFIX) libexpat.dll
$(LINK) $(LFLAGS) -o $@ $^ $(addprefix -l,$(LIBS)) $(addprefix -l,$(DELAYIMPORTS))
ibrowser$(RES_SUFFIX): $(PROGRAM)_intres.rc res/*.bmp res/*.ico
windres $(RCFLAGS) -o $@ $(PROGRAM)_intres.rc
clean:
rm -f $(TARGET) $(OBJECTS) $(PROGRAM)$(RES_SUFFIX) precomp.h.gch \
utility/*.o

View file

@ -0,0 +1,122 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Neutral (Default) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUD)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_SDIFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Fisier"
BEGIN
MENUITEM "&Iesire", ID_FILE_EXIT
END
POPUP "&Prezentare"
BEGIN
MENUITEM "&Bara cu instrumente", ID_VIEW_TOOL_BAR
MENUITEM "&Side Bar", ID_VIEW_SIDE_BAR, GRAYED
MENUITEM "&Bara de stare", ID_VIEW_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "&Resetare\tF5", ID_REFRESH
MENUITEM "F&ull Screen\tCtrl+Shift+S", ID_VIEW_FULLSCREEN
END
POPUP "&Ajutor"
BEGIN
MENUITEM "IBrowser &FAQ...", ID_IBROWSER_FAQ
MENUITEM "&Despre IBrowser...", ID_ABOUT_IBROWSER
MENUITEM "Despre &OS...", ID_ABOUT_WINDOWS
END
END
#endif // Neutral (Default) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "ROS IBrowser%0s"
#else
IDS_IBROWSER_VERSION_STR "ROS IBrowser Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,140 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef _ROS_\r\n"
"LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT\r\n"
"STRINGTABLE DISCARDABLE \r\n"
"BEGIN\r\n"
"#ifdef UNICODE\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser%0s""\r\n"
"#else\r\n"
"IDS_IBROWSER_VERSION_STR ""ROS IBrowser Ansi%0s""\r\n"
"#endif\r\n"
"END\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Swedish resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_SVE)
#ifdef _WIN32
LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_SDIFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Arkiv"
BEGIN
MENUITEM "&Öppna", ID_FILE_OPEN
MENUITEM "&Avsluta", ID_FILE_EXIT
END
POPUP "&Visa"
BEGIN
MENUITEM "&Verktygsfält", ID_VIEW_TOOL_BAR
MENUITEM "S&idfält", ID_VIEW_SIDE_BAR, GRAYED
MENUITEM "&Statusfält", ID_VIEW_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "&Uppdatera\tF5", ID_REFRESH
MENUITEM "&Fullskärm\tCtrl+Shift+S", ID_VIEW_FULLSCREEN
END
POPUP "&Hjälp"
BEGIN
MENUITEM "IBrowser &FAQ...", ID_IBROWSER_FAQ
MENUITEM "Om &IBrowser...", ID_ABOUT_IBROWSER
MENUITEM "Om &operativsystemet...", ID_ABOUT_WINDOWS
END
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_TITLE "ReactOS webbläsare"
IDS_EMPTY "(Tom)"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_ABOUT_IBROWSER "&Om..."
END
#endif // Swedish resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#ifndef _ROS_
LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
#ifdef UNICODE
IDS_IBROWSER_VERSION_STR "ROS IBrowser%0s"
#else
IDS_IBROWSER_VERSION_STR "ROS IBrowser Ansi%0s"
#endif
END
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,22 @@
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
and Clark Cooper
Copyright (c) 2001, 2002, 2003 Expat maintainers.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,496 @@
/*
* Copyright 2004 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// Explorer and Desktop clone
//
// favorites.cpp
//
// Martin Fuchs, 04.04.2004
//
#include <precomp.h>
String DecodeURLString(const char* s)
{
TCHAR buffer[BUFFER_LEN];
LPTSTR o = buffer;
for(const char* p=s; *p; ++p)
if (*p == '%') {
if (!strncmp(p+1, "20", 2)) {
*o++ = ' ';
p += 2;
} else
*o++ = *p;
} else
*o++ = *p;
return String(buffer, o-buffer);
}
/// read .URL file
bool Bookmark::read_url(LPCTSTR path)
{
char line[BUFFER_LEN];
tifstream in(path);
while(in.good()) {
in.getline(line, BUFFER_LEN);
const char* p = line;
while(isspace(*p))
++p;
const char* keyword = p;
const char* eq = strchr(p, '=');
if (eq) {
const char* cont = eq + 1;
while(isspace(*cont))
++cont;
if (!strnicmp(keyword, "URL", 3))
_url = DecodeURLString(cont);
else if (!strnicmp(keyword, "IconFile", 8))
_icon_path = DecodeURLString(cont);
}
}
return true;
}
/// convert XBEL bookmark node
bool Bookmark::read(const_XMLPos& pos)
{
_url = pos.get("href").c_str();
if (pos.go_down("title")) {
_name = pos->get_content();
pos.back();
}
if (pos.go_down("desc")) {
_description = pos->get_content();
pos.back();
}
if (pos.go_down("info")) {
const_XMLChildrenFilter metadata(pos, "metadata");
for(const_XMLChildrenFilter::const_iterator it=metadata.begin(); it!=metadata.end(); ++it) {
const XMLNode& node = **it;
const_XMLPos sub_pos(&node);
if (node.get("owner") == "ros-explorer") {
if (sub_pos.go_down("icon")) {
_icon_path = sub_pos.get("path").c_str();
_icon_idx = XS_toi(sub_pos.get("index"));
sub_pos.back(); // </icon>
}
}
}
pos.back(); // </metadata>
pos.back(); // </info>
}
return !_url.empty(); // _url is mandatory.
}
/// write XBEL bookmark node
void Bookmark::write(XMLPos& pos) const
{
pos.create("bookmark");
pos["href"] = _url.c_str();
if (!_name.empty()) {
pos.create("title");
pos->set_content(_name);
pos.back();
}
if (!_description.empty()) {
pos.create("desc");
pos->set_content(_description);
pos.back();
}
if (!_icon_path.empty()) {
pos.create("info");
pos.create("metadata");
pos["owner"] = "ros-explorer";
pos.create("icon");
pos["path"] = _icon_path.c_str();
pos["index"].printf(XS_TEXT("%d"), _icon_idx);
pos.back(); // </icon>
pos.back(); // </metadata>
pos.back(); // </info>
}
pos.back();
}
/// read bookmark folder from XBEL formated XML tree
void BookmarkFolder::read(const_XMLPos& pos)
{
if (pos.go_down("title")) {
_name = pos->get_content();
pos.back();
}
if (pos.go_down("desc")) {
_description = pos->get_content();
pos.back();
}
_bookmarks.read(pos);
}
/// write bookmark folder content from XBEL formated XML tree
void BookmarkFolder::write(XMLPos& pos) const
{
pos.create("folder");
if (!_name.empty()) {
pos.create("title");
pos->set_content(_name);
pos.back();
}
if (!_description.empty()) {
pos.create("desc");
pos->set_content(_description);
pos.back();
}
_bookmarks.write(pos);
}
BookmarkNode::BookmarkNode()
: _type(BMNT_NONE)
{
_pbookmark = NULL;
}
BookmarkNode::BookmarkNode(const Bookmark& bm)
: _type(BMNT_BOOKMARK)
{
_pbookmark = new Bookmark(bm);
}
BookmarkNode::BookmarkNode(const BookmarkFolder& bmf)
: _type(BMNT_FOLDER)
{
_pfolder = new BookmarkFolder(bmf);
}
BookmarkNode::BookmarkNode(const BookmarkNode& other)
: _type(other._type)
{
if (other._type == BMNT_BOOKMARK)
_pbookmark = new Bookmark(*other._pbookmark);
else if (other._type == BMNT_FOLDER)
_pfolder = new BookmarkFolder(*other._pfolder);
else
_pbookmark = NULL;
}
BookmarkNode::~BookmarkNode()
{
if (_type == BMNT_BOOKMARK)
delete _pbookmark;
else if (_type == BMNT_FOLDER)
delete _pfolder;
}
BookmarkNode& BookmarkNode::operator=(const Bookmark& bm)
{
clear();
_pbookmark = new Bookmark(bm);
return *this;
}
BookmarkNode& BookmarkNode::operator=(const BookmarkFolder& bmf)
{
clear();
_pfolder = new BookmarkFolder(bmf);
return *this;
}
BookmarkNode& BookmarkNode::operator=(const BookmarkNode& other)
{
clear();
_type = other._type;
if (other._type == BMNT_BOOKMARK)
_pbookmark = new Bookmark(*other._pbookmark);
else if (other._type == BMNT_FOLDER)
_pfolder = new BookmarkFolder(*other._pfolder);
return *this;
}
void BookmarkNode::clear()
{
if (_type == BMNT_BOOKMARK) {
delete _pbookmark;
_pbookmark = NULL;
}
else if (_type == BMNT_FOLDER) {
delete _pfolder;
_pfolder = NULL;
}
_type = BMNT_NONE;
}
/// read bookmark list from XBEL formated XML tree
void BookmarkList::read(const_XMLPos& pos)
{
const XMLNode::Children& children = pos->get_children();
for(XMLNode::Children::const_iterator it=children.begin(); it!=children.end(); ++it) {
const XMLNode& node = **it;
const_XMLPos sub_pos(&node);
if (node == "folder") {
BookmarkFolder folder;
folder.read(sub_pos);
push_back(folder);
} else if (node == "bookmark") {
Bookmark bookmark;
if (bookmark.read(sub_pos))
push_back(bookmark);
}
}
}
/// write bookmark list into XBEL formated XML tree
void BookmarkList::write(XMLPos& pos) const
{
for(const_iterator it=begin(); it!=end(); ++it) {
const BookmarkNode& node = *it;
if (node._type == BookmarkNode::BMNT_FOLDER) {
const BookmarkFolder& folder = *node._pfolder;
folder.write(pos);
pos.back();
} else if (node._type == BookmarkNode::BMNT_BOOKMARK) {
const Bookmark& bookmark = *node._pbookmark;
if (!bookmark._url.empty())
bookmark.write(pos);
}
}
}
/// fill treeview control with bookmark tree content
void BookmarkList::fill_tree(HWND hwnd, HTREEITEM parent, HIMAGELIST himagelist, HDC hdc_wnd) const
{
TV_INSERTSTRUCT tvi;
tvi.hParent = parent;
tvi.hInsertAfter = TVI_LAST;
TV_ITEM& tv = tvi.item;
tv.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM;
for(const_iterator it=begin(); it!=end(); ++it) {
const BookmarkNode& node = *it;
tv.lParam = (LPARAM)&node;
if (node._type == BookmarkNode::BMNT_FOLDER) {
const BookmarkFolder& folder = *node._pfolder;
tv.pszText = (LPTSTR)folder._name.c_str();
tv.iImage = 3; // folder
tv.iSelectedImage = 4; // open folder
HTREEITEM hitem = TreeView_InsertItem(hwnd, &tvi);
folder._bookmarks.fill_tree(hwnd, hitem, himagelist, hdc_wnd);
} else if (node._type == BookmarkNode::BMNT_BOOKMARK) {
const Bookmark& bookmark = *node._pbookmark;
tv.pszText = (LPTSTR)bookmark._name.c_str();
tv.iImage = 1; // bookmark
tv.iSelectedImage = 2; // selected bookmark
if (!bookmark._icon_path.empty()) {
const Icon& icon = g_icon_cache.extract(bookmark._icon_path, bookmark._icon_idx);
if ((ICON_ID)icon != ICID_NONE)
tv.iImage = tv.iSelectedImage = icon.add_to_imagelist(himagelist, hdc_wnd);
}
(void)TreeView_InsertItem(hwnd, &tvi);
}
}
}
/*@@
/// import Internet Explorer bookmarks from Favorites folder into bookmark list
void BookmarkList::import_IE_favorites(ShellDirectory& dir, HWND hwnd)
{
TCHAR path[MAX_PATH], ext[_MAX_EXT];
dir.smart_scan(SORT_NAME, SCAN_FILESYSTEM);
for(Entry*entry=dir._down; entry; entry=entry->_next) {
if (entry->_shell_attribs & SFGAO_HIDDEN) // ignore files like "desktop.ini"
continue;
String name;
if (entry->_etype == ET_SHELL)
name = dir._folder.get_name(static_cast<ShellEntry*>(entry)->_pidl);
else
name = entry->_display_name;
if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
BookmarkFolder new_folder;
new_folder._name = DecodeXMLString(name);
if (entry->_etype == ET_SHELL) {
ShellDirectory new_dir(dir._folder, static_cast<ShellEntry*>(entry)->_pidl, hwnd);
new_folder._bookmarks.import_IE_favorites(new_dir, hwnd);
} else {
entry->get_path(path);
ShellDirectory new_dir(GetDesktopFolder(), path, hwnd);
new_folder._bookmarks.import_IE_favorites(new_dir, hwnd);
}
push_back(new_folder);
} else {
Bookmark bookmark;
bookmark._name = DecodeXMLString(name);
entry->get_path(path);
_tsplitpath(path, NULL, NULL, NULL, ext);
if (!_tcsicmp(ext, TEXT(".url"))) {
bookmark.read_url(path);
push_back(bookmark);
} else {
///@todo read shell links
//assert(0);
}
}
}
}
*/
/// read XBEL bookmark file
bool Favorites::read(LPCTSTR path)
{
XMLDoc xbel;
if (!xbel.read(path))
if (xbel._last_error == XML_ERROR_NO_ELEMENTS)
return false;
else
MessageBox(0/*@@g_Globals._hwndDesktop*/, String(xbel._last_error_msg.c_str()),
TEXT("ROS Explorer - reading bookmark file"), MB_OK);
const_XMLPos pos(&xbel);
if (!pos.go_down("xbel"))
return false;
super::read(pos);
pos.back();
return true;
}
/// write XBEL bookmark file
void Favorites::write(LPCTSTR path) const
{
XMLDoc xbel;
XMLPos pos(&xbel);
pos.create("xbel");
super::write(pos);
pos.back();
xbel._header._doctype = "<!DOCTYPE xbel"
" PUBLIC \"+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML\"\n"
" \"http://www.python.org/topics/xml/dtds/xbel-1.0.dtd\">";
xbel.write(path);
}
/*@@
/// import Internet Explorer bookmarks from Favorites folder
bool Favorites::import_IE_favorites(HWND hwnd)
{
WaitCursor wait;
StartMenuShellDirs dirs;
try {
dirs.push_back(ShellDirectory(GetDesktopFolder(), SpecialFolderPath(CSIDL_COMMON_FAVORITES, hwnd), hwnd));
dirs.push_back(ShellDirectory(GetDesktopFolder(), SpecialFolderPath(CSIDL_FAVORITES, hwnd), hwnd));
} catch(COMException&) {
}
for(StartMenuShellDirs::iterator it=dirs.begin(); it!=dirs.end(); ++it) {
StartMenuDirectory& smd = *it;
ShellDirectory& dir = smd._dir;
try {
super::import_IE_favorites(dir, hwnd);
} catch(COMException&) {
}
}
return true;
}
*/

View file

@ -0,0 +1,104 @@
/*
* Copyright 2004 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// Explorer and Desktop clone
//
// favorites.h
//
// Martin Fuchs, 04.04.2004
//
extern String DecodeURLString(const char* s);
struct Bookmark
{
Bookmark() : _icon_idx(0) {}
String _name;
String _description;
String _url;
String _icon_path;
int _icon_idx;
bool read_url(LPCTSTR path);
bool read(const_XMLPos& pos);
void write(XMLPos& pos) const;
};
struct BookmarkFolder;
struct BookmarkNode
{
BookmarkNode();
BookmarkNode(const Bookmark& bm);
BookmarkNode(const BookmarkFolder& bmf);
BookmarkNode(const BookmarkNode& other);
~BookmarkNode();
BookmarkNode& operator=(const Bookmark& bm);
BookmarkNode& operator=(const BookmarkFolder& bmf);
BookmarkNode& operator=(const BookmarkNode& other);
void clear();
enum BOOKMARKNODE_TYPE {
BMNT_NONE, BMNT_BOOKMARK, BMNT_FOLDER
};
BOOKMARKNODE_TYPE _type;
union {
Bookmark* _pbookmark;
BookmarkFolder* _pfolder;
};
};
struct BookmarkList : public list<BookmarkNode>
{
void import_IE_favorites(struct ShellDirectory& dir, HWND hwnd);
void read(const_XMLPos& pos);
void write(XMLPos& pos) const;
void fill_tree(HWND hwnd, HTREEITEM parent, HIMAGELIST, HDC hdc_wnd) const;
};
struct BookmarkFolder
{
String _name;
String _description;
BookmarkList _bookmarks;
void read(const_XMLPos& pos);
void write(XMLPos& pos) const;
};
struct Favorites : public BookmarkList
{
typedef BookmarkList super;
bool read(LPCTSTR path);
void write(LPCTSTR path) const;
bool import_IE_favorites(HWND hwnd);
};

View file

@ -0,0 +1,550 @@
/*
* Copyright 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser
//
// ibrowser.cpp
//
// Martin Fuchs, 24.01.2005
//
#include <precomp.h>
#include "ibrowser_intres.h"
#include <locale.h> // for setlocale()
#ifndef __WINE__
#include <io.h> // for dup2()
#include <fcntl.h> // for _O_RDONLY
#endif
// globals
HINSTANCE g_hInstance;
IconCache g_icon_cache;
ATOM g_hframeClass;
/*@@
void ExplorerGlobals::read_persistent()
{
// read configuration file
_cfg_dir.printf(TEXT("%s\\ReactOS"), (LPCTSTR)SpecialFolderFSPath(CSIDL_APPDATA,0));
_cfg_path.printf(TEXT("%s\\ros-ibrowser-cfg.xml"), _cfg_dir.c_str());
if (!_cfg.read(_cfg_path)) {
if (_cfg._last_error != XML_ERROR_NO_ELEMENTS)
MessageBox(g_Globals._hwndDesktop, String(_cfg._last_error_msg.c_str()),
TEXT("ROS Explorer - reading user settings"), MB_OK);
_cfg.read(TEXT("ibrowser-cfg-template.xml"));
}
// read bookmarks
_favorites_path.printf(TEXT("%s\\ros-ibrowser-bookmarks.xml"), _cfg_dir.c_str());
if (!_favorites.read(_favorites_path)) {
_favorites.import_IE_favorites(0);
_favorites.write(_favorites_path);
}
}
void ExplorerGlobals::write_persistent()
{
// write configuration file
RecursiveCreateDirectory(_cfg_dir);
_cfg.write(_cfg_path);
_favorites.write(_favorites_path);
}
XMLPos ExplorerGlobals::get_cfg()
{
XMLPos cfg_pos(&_cfg);
cfg_pos.smart_create("ibrowser-cfg");
return cfg_pos;
}
XMLPos ExplorerGlobals::get_cfg(const char* path)
{
XMLPos cfg_pos(&_cfg);
cfg_pos.smart_create("ibrowser-cfg");
cfg_pos.create_relative(path);
return cfg_pos;
}
*/
Icon::Icon()
: _id(ICID_UNKNOWN),
_itype(IT_STATIC),
_hicon(0)
{
}
Icon::Icon(ICON_ID id, UINT nid)
: _id(id),
_itype(IT_STATIC),
_hicon(SmallIcon(nid))
{
}
Icon::Icon(ICON_TYPE itype, int id, HICON hIcon)
: _id((ICON_ID)id),
_itype(itype),
_hicon(hIcon)
{
}
Icon::Icon(ICON_TYPE itype, int id, int sys_idx)
: _id((ICON_ID)id),
_itype(itype),
_sys_idx(sys_idx)
{
}
void Icon::draw(HDC hdc, int x, int y, int cx, int cy, COLORREF bk_color, HBRUSH bk_brush) const
{
if (_itype == IT_SYSCACHE)
ImageList_DrawEx(g_icon_cache.get_sys_imagelist(), _sys_idx, hdc, x, y, cx, cy, bk_color, CLR_DEFAULT, ILD_NORMAL);
else
DrawIconEx(hdc, x, y, _hicon, cx, cy, 0, bk_brush, DI_NORMAL);
}
HBITMAP Icon::create_bitmap(COLORREF bk_color, HBRUSH hbrBkgnd, HDC hdc_wnd) const
{
if (_itype == IT_SYSCACHE) {
HIMAGELIST himl = g_icon_cache.get_sys_imagelist();
int cx, cy;
ImageList_GetIconSize(himl, &cx, &cy);
HBITMAP hbmp = CreateCompatibleBitmap(hdc_wnd, cx, cy);
HDC hdc = CreateCompatibleDC(hdc_wnd);
HBITMAP hbmp_old = SelectBitmap(hdc, hbmp);
ImageList_DrawEx(himl, _sys_idx, hdc, 0, 0, cx, cy, bk_color, CLR_DEFAULT, ILD_NORMAL);
SelectBitmap(hdc, hbmp_old);
DeleteDC(hdc);
return hbmp;
} else
return create_bitmap_from_icon(_hicon, hbrBkgnd, hdc_wnd);
}
int Icon::add_to_imagelist(HIMAGELIST himl, HDC hdc_wnd, COLORREF bk_color, HBRUSH bk_brush) const
{
int ret;
if (_itype == IT_SYSCACHE) {
HIMAGELIST himl = g_icon_cache.get_sys_imagelist();
int cx, cy;
ImageList_GetIconSize(himl, &cx, &cy);
HBITMAP hbmp = CreateCompatibleBitmap(hdc_wnd, cx, cy);
HDC hdc = CreateCompatibleDC(hdc_wnd);
HBITMAP hbmp_old = SelectBitmap(hdc, hbmp);
ImageList_DrawEx(himl, _sys_idx, hdc, 0, 0, cx, cy, bk_color, CLR_DEFAULT, ILD_NORMAL);
SelectBitmap(hdc, hbmp_old);
DeleteDC(hdc);
ret = ImageList_Add(himl, hbmp, 0);
DeleteObject(hbmp);
} else
ret = ImageList_AddAlphaIcon(himl, _hicon, bk_brush, hdc_wnd);
return ret;
}
HBITMAP create_bitmap_from_icon(HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd)
{
int cx = GetSystemMetrics(SM_CXSMICON);
int cy = GetSystemMetrics(SM_CYSMICON);
HBITMAP hbmp = CreateCompatibleBitmap(hdc_wnd, cx, cy);
MemCanvas canvas;
BitmapSelection sel(canvas, hbmp);
RECT rect = {0, 0, cx, cy};
FillRect(canvas, &rect, hbrush_bkgnd);
DrawIconEx(canvas, 0, 0, hIcon, cx, cy, 0, hbrush_bkgnd, DI_NORMAL);
return hbmp;
}
int ImageList_AddAlphaIcon(HIMAGELIST himl, HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd)
{
HBITMAP hbmp = create_bitmap_from_icon(hIcon, hbrush_bkgnd, hdc_wnd);
int ret = ImageList_Add(himl, hbmp, 0);
DeleteObject(hbmp);
return ret;
}
int IconCache::s_next_id = ICID_DYNAMIC;
void IconCache::init()
{
_icons[ICID_NONE] = Icon(IT_STATIC, ICID_NONE, (HICON)0);
_icons[ICID_IBROWSER] = Icon(ICID_IBROWSER, IDI_IBROWSER);
_icons[ICID_BOOKMARK] = Icon(ICID_BOOKMARK, IDI_DOT_TRANS);
}
const Icon& IconCache::extract(const String& path)
{
PathMap::iterator found = _pathMap.find(path);
if (found != _pathMap.end())
return _icons[found->second];
SHFILEINFO sfi;
#if 1 // use system image list
HIMAGELIST himlSys = (HIMAGELIST) SHGetFileInfo(path, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
if (himlSys) {
_himlSys = himlSys;
const Icon& icon = add(sfi.iIcon/*, IT_SYSCACHE*/);
#else
if (SHGetFileInfo(path, 0, &sfi, sizeof(sfi), SHGFI_ICON|SHGFI_SMALLICON)) {
const Icon& icon = add(sfi.hIcon, IT_CACHED);
#endif
///@todo limit cache size
_pathMap[path] = icon;
return icon;
} else
return _icons[ICID_NONE];
}
const Icon& IconCache::extract(LPCTSTR path, int idx)
{
CachePair key(path, idx);
#ifndef __WINE__ ///@todo _tcslwr() for Wine
_tcslwr((LPTSTR)key.first.c_str());
#endif
PathIdxMap::iterator found = _pathIdxMap.find(key);
if (found != _pathIdxMap.end())
return _icons[found->second];
HICON hIcon;
if ((int)ExtractIconEx(path, idx, NULL, &hIcon, 1) > 0) {
const Icon& icon = add(hIcon, IT_CACHED);
_pathIdxMap[key] = icon;
return icon;
} else {
///@todo retreive "http://.../favicon.ico" format icons
return _icons[ICID_NONE];
}
}
const Icon& IconCache::add(HICON hIcon, ICON_TYPE type)
{
int id = ++s_next_id;
return _icons[id] = Icon(type, id, hIcon);
}
const Icon& IconCache::add(int sys_idx/*, ICON_TYPE type=IT_SYSCACHE*/)
{
int id = ++s_next_id;
return _icons[id] = SysCacheIcon(id, sys_idx);
}
const Icon& IconCache::get_icon(int id)
{
return _icons[id];
}
void IconCache::free_icon(int icon_id)
{
IconMap::iterator found = _icons.find(icon_id);
if (found != _icons.end()) {
Icon& icon = found->second;
if (icon.destroy())
_icons.erase(found);
}
}
ResString::ResString(UINT nid)
{
TCHAR buffer[BUFFER_LEN];
int len = LoadString(g_hInstance, nid, buffer, sizeof(buffer)/sizeof(TCHAR));
super::assign(buffer, len);
}
ResIcon::ResIcon(UINT nid)
{
_hicon = LoadIcon(g_hInstance, MAKEINTRESOURCE(nid));
}
SmallIcon::SmallIcon(UINT nid)
{
_hicon = (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(nid), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
}
ResIconEx::ResIconEx(UINT nid, int w, int h)
{
_hicon = (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(nid), IMAGE_ICON, w, h, LR_SHARED);
}
void SetWindowIcon(HWND hwnd, UINT nid)
{
HICON hIcon = ResIcon(nid);
(void)Window_SetIcon(hwnd, ICON_BIG, hIcon);
HICON hIconSmall = SmallIcon(nid);
(void)Window_SetIcon(hwnd, ICON_SMALL, hIconSmall);
}
ResBitmap::ResBitmap(UINT nid)
{
_hBmp = LoadBitmap(g_hInstance, MAKEINTRESOURCE(nid));
}
void ibrowser_show_frame(int cmdshow, LPTSTR lpCmdLine)
{
MainFrameBase::Create(lpCmdLine, cmdshow);
}
PopupMenu::PopupMenu(UINT nid)
{
HMENU hMenu = LoadMenu(g_hInstance, MAKEINTRESOURCE(nid));
_hmenu = GetSubMenu(hMenu, 0);
}
/// "About" Dialog
struct ExplorerAboutDlg : public
CtlColorParent<
OwnerDrawParent<Dialog>
>
{
typedef CtlColorParent<
OwnerDrawParent<Dialog>
> super;
ExplorerAboutDlg(HWND hwnd)
: super(hwnd)
{
SetWindowIcon(hwnd, IDI_REACTOS);
new FlatButton(hwnd, IDOK);
_hfont = CreateFont(20, 0, 0, 0, FW_BOLD, TRUE, 0, 0, 0, 0, 0, 0, 0, TEXT("Sans Serif"));
new ColorStatic(hwnd, IDC_ROS_IBROWSER, RGB(32,32,128), 0, _hfont);
new HyperlinkCtrl(hwnd, IDC_WWW);
FmtString ver_txt(ResString(IDS_IBROWSER_VERSION_STR), (LPCTSTR)ResString(IDS_VERSION_STR));
SetWindowText(GetDlgItem(hwnd, IDC_VERSION_TXT), ver_txt);
/*@@
HWND hwnd_winver = GetDlgItem(hwnd, IDC_WIN_VERSION);
SetWindowText(hwnd_winver, get_windows_version_str());
SetWindowFont(hwnd_winver, GetStockFont(DEFAULT_GUI_FONT), FALSE);
*/
CenterWindow(hwnd);
}
~ExplorerAboutDlg()
{
DeleteObject(_hfont);
}
protected:
HFONT _hfont;
};
void ibrowser_about(HWND hwndParent)
{
Dialog::DoModal(IDD_ABOUT_IBROWSER, WINDOW_CREATOR(ExplorerAboutDlg), hwndParent);
}
void ibrowser_open(HWND hwndParent)
{
HMODULE hShell32;
RUNFILEDLG RunFileDlg;
OSVERSIONINFO versionInfo;
WCHAR wTitle[40];
WCHAR wText[256];
char szTitle[40] = "Open";
char szText[256] = "Type the Internet Address of a document or folder and IBrowser will open it for you.";
hShell32 = LoadLibrary(_T("SHELL32.DLL"));
RunFileDlg = (RUNFILEDLG)(FARPROC)GetProcAddress(hShell32, (char*)((long)0x3D));
/* Show "Run..." dialog */
if (RunFileDlg)
{
versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&versionInfo);
if (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szTitle, -1, wTitle, 40);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szText, -1, wText, 256);
RunFileDlg(hwndParent, 0, NULL, (LPCSTR)wTitle, (LPCSTR)wText, RFF_CALCDIRECTORY);
}
else
RunFileDlg(hwndParent, 0, NULL, szTitle, szText, RFF_CALCDIRECTORY);
}
FreeLibrary(hShell32);
}
static void InitInstance(HINSTANCE hInstance)
{
CONTEXT("InitInstance");
// register frame window class
g_hframeClass = IconWindowClass(CLASSNAME_FRAME,IDI_IBROWSER);
// register child window class
WindowClass(CLASSNAME_CHILDWND, CS_CLASSDC|CS_VREDRAW).Register();
}
int ibrowser_main(HINSTANCE hInstance, LPTSTR lpCmdLine, int cmdshow)
{
CONTEXT("ibrowser_main");
// initialize Common Controls library
CommonControlInit usingCmnCtrl;
try {
InitInstance(hInstance);
} catch(COMException& e) {
HandleException(e, GetDesktopWindow());
return -1;
}
if (cmdshow != SW_HIDE) {
/* // don't maximize if being called from the ROS desktop
if (cmdshow == SW_SHOWNORMAL)
///@todo read window placement from registry
cmdshow = SW_MAXIMIZE;
*/
ibrowser_show_frame(cmdshow, lpCmdLine);
}
return Window::MessageLoop();
}
// MinGW does not provide a Unicode startup routine, so we have to implement an own.
#if defined(__MINGW32__) && defined(UNICODE)
#define _tWinMain wWinMain
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int);
int main(int argc, char* argv[])
{
CONTEXT("main");
STARTUPINFO startupinfo;
int nShowCmd = SW_SHOWNORMAL;
GetStartupInfo(&startupinfo);
if (startupinfo.dwFlags & STARTF_USESHOWWINDOW)
nShowCmd = startupinfo.wShowWindow;
LPWSTR cmdline = GetCommandLineW();
while(*cmdline && !_istspace(*cmdline))
++cmdline;
while(_istspace(*cmdline))
++cmdline;
return wWinMain(GetModuleHandle(NULL), 0, cmdline, nShowCmd);
}
#endif // __MINGW && UNICODE
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
{
CONTEXT("WinMain()");
g_hInstance = hInstance;
// initialize COM and OLE before creating the desktop window
OleInit usingCOM;
// init common controls library
CommonControlInit usingCmnCtrl;
//@@ g_Globals.read_persistent();
/**TODO fix command line handling */
if (*lpCmdLine=='"' && lpCmdLine[_tcslen(lpCmdLine)-1]=='"') {
++lpCmdLine;
lpCmdLine[_tcslen(lpCmdLine)-1] = '\0';
}
int ret = ibrowser_main(hInstance, lpCmdLine, nShowCmd);
// write configuration file
//@@ g_Globals.write_persistent();
return ret;
}

View file

@ -0,0 +1,346 @@
# Microsoft Developer Studio Project File - Name="ibrowser" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=IBROWSER - WIN32 DEBUG
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ibrowser.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ibrowser.mak" CFG="IBROWSER - WIN32 DEBUG"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ibrowser - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "ibrowser - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "ibrowser - Win32 Debug Release" (based on "Win32 (x86) Console Application")
!MESSAGE "ibrowser - Win32 Unicode Release" (based on "Win32 (x86) Console Application")
!MESSAGE "ibrowser - Win32 Unicode Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ibrowser - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GR /GX /O1 /D "NDEBUG" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /Yu"precomp.h" /FD /c
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 gdi32.lib comctl32.lib shell32.lib ole32.lib /nologo /subsystem:windows /machine:I386 /libpath:"Release"
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "ibrowser - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /Yu"precomp.h" /FD /GZ /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib gdi32.lib comctl32.lib shell32.lib ole32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"Debug"
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "ibrowser - Win32 Debug Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "DRelease"
# PROP BASE Intermediate_Dir "DRelease"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "DRelease"
# PROP Intermediate_Dir "DRelease"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_ROS_" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GR /GX /Zi /O2 /D "NDEBUG" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /Yu"precomp.h" /FD /c
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 gdi32.lib comctl32.lib shell32.lib ole32.lib /nologo /subsystem:windows /debug /machine:I386
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "ibrowser - Win32 Unicode Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "URelease"
# PROP BASE Intermediate_Dir "URelease"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "URelease"
# PROP Intermediate_Dir "URelease"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "UNICODE" /D "_ROS_" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GR /GX /O2 /D "NDEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /Yu"precomp.h" /FD /c
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 gdi32.lib comctl32.lib shell32.lib ole32.lib /nologo /subsystem:windows /machine:I386 /libpath:"Release"
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "ibrowser - Win32 Unicode Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "UDebug"
# PROP BASE Intermediate_Dir "UDebug"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "UDebug"
# PROP Intermediate_Dir "UDebug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "UNICODE" /D "_ROS_" /FR /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "UNICODE" /D "WIN32" /D _WIN32_IE=0x0600 /D _WIN32_WINNT=0x0501 /FR /Yu"precomp.h" /FD /GZ /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 gdi32.lib comctl32.lib shell32.lib ole32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"Debug"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "ibrowser - Win32 Release"
# Name "ibrowser - Win32 Debug"
# Name "ibrowser - Win32 Debug Release"
# Name "ibrowser - Win32 Unicode Release"
# Name "ibrowser - Win32 Unicode Debug"
# Begin Group "utility"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\utility\comutil.h
# End Source File
# Begin Source File
SOURCE=.\utility\utility.cpp
# End Source File
# Begin Source File
SOURCE=.\utility\utility.h
# End Source File
# Begin Source File
SOURCE=.\utility\window.cpp
# End Source File
# Begin Source File
SOURCE=.\utility\window.h
# End Source File
# Begin Source File
SOURCE=.\utility\xmlstorage.cpp
# End Source File
# Begin Source File
SOURCE=.\utility\xmlstorage.h
# End Source File
# End Group
# Begin Group "resources"
# PROP Default_Filter "bmp,ico"
# Begin Source File
SOURCE=.\De.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\res\dot.ico
# End Source File
# Begin Source File
SOURCE=.\res\dot_red.ico
# End Source File
# Begin Source File
SOURCE=.\res\dot_trans.ico
# End Source File
# Begin Source File
SOURCE=.\En.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\Es.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\res\favorites.ico
# End Source File
# Begin Source File
SOURCE=.\Fr.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\Hu.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\res\ibrowser.ico
# End Source File
# Begin Source File
SOURCE=.\ibrowser.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\ibrowser_intres.h
# End Source File
# Begin Source File
SOURCE=.\ibrowser_intres.rc
# End Source File
# Begin Source File
SOURCE=.\res\iexplore.ico
# End Source File
# Begin Source File
SOURCE=.\Ja.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\res\network.ico
# End Source File
# Begin Source File
SOURCE=.\res\reactos.ico
# End Source File
# Begin Source File
SOURCE=.\Ro.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\Sv.rc
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\res\toolbar.bmp
# End Source File
# End Group
# Begin Group "main"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\favorites.cpp
# End Source File
# Begin Source File
SOURCE=.\favorites.h
# End Source File
# Begin Source File
SOURCE=.\ibrowser.cpp
# End Source File
# Begin Source File
SOURCE=.\ibrowser.h
# End Source File
# Begin Source File
SOURCE=.\mainframe.cpp
# End Source File
# Begin Source File
SOURCE=.\mainframe.h
# End Source File
# Begin Source File
SOURCE=.\precomp.cpp
# ADD CPP /Yc"precomp.h"
# End Source File
# Begin Source File
SOURCE=.\precomp.h
# End Source File
# Begin Source File
SOURCE=.\webchild.cpp
# End Source File
# Begin Source File
SOURCE=.\webchild.h
# End Source File
# End Group
# Begin Source File
SOURCE=.\readme.txt
# End Source File
# End Target
# End Project

View file

@ -0,0 +1,41 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "ibrowser"=.\ibrowser.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "make_ibrowser"=.\make_ibrowser.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View file

@ -0,0 +1,231 @@
/*
* Copyright 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser
//
// ibrowser.h
//
// Martin Fuchs, 25.01.2005
//
#include "utility/window.h"
#define IDW_STATUSBAR 0x100
#define IDW_TOOLBAR 0x101
#define IDW_EXTRABAR 0x102
#define IDW_ADDRESSBAR 0x104
#define IDW_SIDEBAR 0x106
#define IDW_FIRST_CHILD 0xC000 /*0x200*/
#define PM_GET_FILEWND_PTR (WM_APP+0x05)
#define PM_GET_SHELLBROWSER_PTR (WM_APP+0x06)
#define PM_GET_CONTROLWINDOW (WM_APP+0x16)
#define PM_RESIZE_CHILDREN (WM_APP+0x17)
#define PM_GET_WIDTH (WM_APP+0x18)
#define PM_REFRESH (WM_APP+0x1B)
#define PM_REFRESH_CONFIG (WM_APP+0x1C)
#define CLASSNAME_FRAME TEXT("IBrowserFrameWClass")
#define CLASSNAME_CHILDWND TEXT("IBrowserChildWClass")
#include "mainframe.h"
/// convenient loading of string resources
struct ResString : public String
{
ResString(UINT nid);
};
/// convenient loading of standard (32x32) icon resources
struct ResIcon
{
ResIcon(UINT nid);
operator HICON() const {return _hicon;}
protected:
HICON _hicon;
};
/// convenient loading of small (16x16) icon resources
struct SmallIcon
{
SmallIcon(UINT nid);
operator HICON() const {return _hicon;}
protected:
HICON _hicon;
};
/// convenient loading of icon resources with specified sizes
struct ResIconEx
{
ResIconEx(UINT nid, int w, int h);
operator HICON() const {return _hicon;}
protected:
HICON _hicon;
};
/// set big and small icons out of the resources for a window
extern void SetWindowIcon(HWND hwnd, UINT nid);
/// convenient loading of bitmap resources
struct ResBitmap
{
ResBitmap(UINT nid);
~ResBitmap() {DeleteObject(_hBmp);}
operator HBITMAP() const {return _hBmp;}
protected:
HBITMAP _hBmp;
};
enum ICON_TYPE {
IT_STATIC,
IT_CACHED,
IT_DYNAMIC,
IT_SYSCACHE
};
enum ICON_ID {
ICID_UNKNOWN,
ICID_NONE,
ICID_IBROWSER,
ICID_BOOKMARK,
ICID_DYNAMIC
};
struct Icon {
Icon();
Icon(ICON_ID id, UINT nid);
Icon(ICON_TYPE itype, int id, HICON hIcon);
Icon(ICON_TYPE itype, int id, int sys_idx);
operator ICON_ID() const {return _id;}
void draw(HDC hdc, int x, int y, int cx, int cy, COLORREF bk_color, HBRUSH bk_brush) const;
HBITMAP create_bitmap(COLORREF bk_color, HBRUSH hbrBkgnd, HDC hdc_wnd) const;
int add_to_imagelist(HIMAGELIST himl, HDC hdc_wnd, COLORREF bk_color=GetSysColor(COLOR_WINDOW), HBRUSH bk_brush=GetSysColorBrush(COLOR_WINDOW)) const;
int get_sysiml_idx() const {return _itype==IT_SYSCACHE? _sys_idx: -1;}
bool destroy() {if (_itype == IT_DYNAMIC) {DestroyIcon(_hicon); return true;} else return false;}
protected:
ICON_ID _id;
ICON_TYPE _itype;
HICON _hicon;
int _sys_idx;
};
struct SysCacheIcon : public Icon {
SysCacheIcon(int id, int sys_idx)
: Icon(IT_SYSCACHE, id, sys_idx) {}
};
struct IconCache {
IconCache() : _himlSys(0) {}
void init();
const Icon& extract(const String& path);
const Icon& extract(LPCTSTR path, int idx);
const Icon& extract(IExtractIcon* pExtract, LPCTSTR path, int idx);
const Icon& add(HICON hIcon, ICON_TYPE type=IT_DYNAMIC);
const Icon& add(int sys_idx/*, ICON_TYPE type=IT_SYSCACHE*/);
const Icon& get_icon(int icon_id);
HIMAGELIST get_sys_imagelist() const {return _himlSys;}
void free_icon(int icon_id);
protected:
static int s_next_id;
typedef map<int, Icon> IconMap;
IconMap _icons;
typedef map<String, ICON_ID> PathMap;
PathMap _pathMap;
typedef pair<String, int> CachePair;
typedef map<CachePair, ICON_ID> PathIdxMap;
PathIdxMap _pathIdxMap;
HIMAGELIST _himlSys;
};
/// create a bitmap from an icon
extern HBITMAP create_bitmap_from_icon(HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd);
/// add icon with alpha channel to imagelist using the specified background color
extern int ImageList_AddAlphaIcon(HIMAGELIST himl, HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd);
#include "utility/xmlstorage.h"
using namespace XMLStorage;
#include "favorites.h"
// globals
extern HINSTANCE g_hInstance;
extern IconCache g_icon_cache;
extern ATOM g_hframeClass;
// display explorer "About" dialog
extern void ibrowser_about(HWND hwndParent);
// display explorer "open" dialog
extern void ibrowser_open(HWND hwndParent);
// declare shell32's "Run..." dialog export function
typedef void (WINAPI* RUNFILEDLG)(HWND hwndOwner, HICON hIcon, LPCSTR lpstrDirectory, LPCSTR lpstrTitle, LPCSTR lpstrDescription, UINT uFlags);
//
// Flags for RunFileDlg
//
#define RFF_NOBROWSE 0x01 // Removes the browse button.
#define RFF_NODEFAULT 0x02 // No default item selected.
#define RFF_CALCDIRECTORY 0x04 // Calculates the working directory from the file name.
#define RFF_NOLABEL 0x08 // Removes the edit box label.
#define RFF_NOSEPARATEMEM 0x20 // Removes the Separate Memory Space check box (Windows NT only).

View file

@ -0,0 +1,13 @@
#include <windows.h>
#include "ibrowser_intres.rc"
#define REACTOS_STR_FILE_DESCRIPTION "ROS Internet Web Browser\0"
#define REACTOS_STR_INTERNAL_NAME "ibrowser\0"
#define REACTOS_STR_ORIGINAL_FILENAME "ibrowser.exe\0"
#include <reactos/version.rc>
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#define IDS_VERSION_STR 5000
#define IDS_IBROWSER_VERSION_STR 5001

View file

@ -0,0 +1,31 @@
<module name="ibrowser" type="win32gui" installbase="system32" installname="ibrowser.exe" allowwarnings ="true">
<linkerflag>-fexceptions</linkerflag>
<include base="ibrowser">.</include>
<include base="ReactOS">include/expat</include>
<define name="__USE_W32API" />
<define name="UNICODE" />
<define name="WIN32" />
<define name="_ROS_" />
<define name="_WIN32_IE">0x0600</define>
<define name="_WIN32_WINNT">0x0501</define>
<define name="WINVER">0x0500</define>
<library>uuid</library>
<library>kernel32</library>
<library>gdi32</library>
<library>comctl32</library>
<library>ole32</library>
<library>oleaut32</library>
<library>shell32</library>
<library>expat</library>
<pch>precomp.h</pch>
<directory name="utility">
<file>utility.cpp</file>
<file>window.cpp</file>
<file>xmlstorage.cpp</file>
</directory>
<file>ibrowser.cpp</file>
<file>favorites.cpp</file>
<file>mainframe.cpp</file>
<file>webchild.cpp</file>
<file>ibrowser.rc</file>
</module>

View file

@ -0,0 +1,52 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by ibrowser_intres.rc
//
#define IDS_TITLE 1
#define IDS_EMPTY 13
#define IDS_ABOUT_IBROWSER 27
#define IDI_REACTOS 100
#define IDB_TOOLBAR 103
#define IDA_IBROWSER 104
#define IDM_SDIFRAME 113
#define IDD_ABOUT_IBROWSER 135
#define IDI_FAVORITES 140
#define IDI_DOT 163
#define IDI_DOT_TRANS 164
#define IDI_DOT_RED 165
#define IDI_IBROWSER 169
#define ID_VIEW_STATUSBAR 503
#define ID_VIEW_TOOL_BAR 508
#define ID_VIEW_SIDE_BAR 510
#define IDC_ROS_IBROWSER 1000
#define IDC_WWW 1012
#define IDC_VERSION_TXT 1029
#define IDC_WIN_VERSION 1030
#define ID_REFRESH 1704
#define IDS_VERSION_STR 5000
#define IDS_IBROWSER_VERSION_STR 5001
#define ID_IBROWSER_FAQ 10002
#define ID_VIEW_FULLSCREEN 0x8004
#define ID_ABOUT_WINDOWS 40002
#define ID_ABOUT_IBROWSER 40003
#define ID_GO_BACK 40005
#define ID_GO_FORWARD 40006
#define ID_GO_HOME 40007
#define ID_GO_SEARCH 40008
#define ID_GO_UP 40009
#define ID_STOP 40010
#define ID_FILE_OPEN 0xE140
#define ID_FILE_EXIT 0xE141
#define ID_HELP 0xE146
#define IDC_STATIC -1
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 170
#define _APS_NEXT_COMMAND_VALUE 40024
#define _APS_NEXT_CONTROL_VALUE 1033
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View file

@ -0,0 +1,107 @@
//Microsoft Developer Studio generated resource script.
//
#include "ibrowser_intres.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Neutral resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_TOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDA_IBROWSER ACCELERATORS DISCARDABLE
BEGIN
"X", ID_FILE_EXIT, VIRTKEY, ALT, NOINVERT
"S", ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL,
NOINVERT
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"ibrowser_intres.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <windows.h>\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""En.rc""\r\n"
"#include ""Es.rc""\r\n"
"#include ""Fr.rc""\r\n"
"#include ""Sv.rc""\r\n"
"#include ""Hu.rc""\r\n"
"#include ""Ro.rc""\r\n"
"#include ""Ja.rc""\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_REACTOS ICON DISCARDABLE "res/reactos.ico"
IDI_FAVORITES ICON DISCARDABLE "res/favorites.ico"
IDI_DOT ICON DISCARDABLE "res/dot.ico"
IDI_DOT_TRANS ICON DISCARDABLE "res/dot_trans.ico"
IDI_DOT_RED ICON DISCARDABLE "res/dot_red.ico"
IDI_IBROWSER ICON DISCARDABLE "res/ibrowser.ico"
#endif // Neutral resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#include "En.rc"
#include "Es.rc"
#include "Fr.rc"
#include "Sv.rc"
#include "Hu.rc"
#include "Ro.rc"
#include "Ja.rc"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -0,0 +1,791 @@
/*
* Copyright 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser
//
// mainframe.cpp
//
// Martin Fuchs, 25.01.2005
//
#include <precomp.h>
/* We can't include webchild.h here - otherwise MinGW produces errors like: "multiple definition of `QACONTAINERFLAGS'"
#include "webchild.h"
*/
extern HWND create_webchildwindow(const WebChildWndInfo& info);
#include "ibrowser_intres.h"
HWND MainFrameBase::Create(LPCTSTR url, UINT cmdshow)
{
HWND hMainFrame;
hMainFrame = MainFrame::Create();
//@@hMainFrame = MainFrame::Create(url);
if (hMainFrame) {
if (url) {
static String sPath = url; // copy url to avoid accessing freed memory
url = sPath;
}
ShowWindow(hMainFrame, cmdshow);
UpdateWindow(hMainFrame);
// Open the first child window after initializing the application
PostMessage(hMainFrame, PM_OPEN_WINDOW, 0, (LPARAM)url);
}
return hMainFrame;
}
MainFrameBase::MainFrameBase(HWND hwnd)
: super(hwnd),
_himl(ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK|ILC_COLOR24, 2, 0))
{
_hMenuFrame = GetMenu(hwnd);
_hMenuWindow = GetSubMenu(_hMenuFrame, GetMenuItemCount(_hMenuFrame)-3);
_menu_info._hMenuView = GetSubMenu(_hMenuFrame, 1);
_hAccel = LoadAccelerators(g_hInstance, MAKEINTRESOURCE(IDA_IBROWSER));
TBBUTTON toolbarBtns[] = {
#ifdef _NO_REBAR
{0, 0, 0, BTNS_SEP, {0, 0}, 0, 0},
#endif
{7, ID_GO_BACK, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0},
{8, ID_GO_FORWARD, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0},
{9, ID_GO_UP, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0},
{10, ID_GO_HOME, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0},
{11, ID_GO_SEARCH, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0},
{12, ID_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0},
{13, ID_STOP, TBSTATE_ENABLED, BTNS_BUTTON, {0, 0}, 0, 0}
};
_htoolbar = CreateToolbarEx(hwnd,
#ifndef _NO_REBAR
CCS_NOPARENTALIGN|CCS_NORESIZE|
#endif
WS_CHILD|WS_VISIBLE, IDW_TOOLBAR, 2, g_hInstance, IDB_TOOLBAR,
toolbarBtns, sizeof(toolbarBtns)/sizeof(TBBUTTON),
16, 15, 16, 15, sizeof(TBBUTTON));
CheckMenuItem(_menu_info._hMenuView, ID_VIEW_TOOL_BAR, MF_BYCOMMAND|MF_CHECKED);
// address bar
WindowCanvas canvas(hwnd);
RECT rect = {0, 0, 0, 0};
DrawText(canvas, TEXT("My"), -1, &rect, DT_SINGLELINE|DT_NOPREFIX|DT_CALCRECT);
HFONT hfont = GetStockFont(DEFAULT_GUI_FONT);
_haddressedit = CreateWindow(TEXT("EDIT"), NULL, WS_CHILD|WS_VISIBLE|WS_BORDER, 0, 0, 0, rect.bottom,
hwnd, (HMENU)IDW_ADDRESSBAR, g_hInstance, 0);
SetWindowFont(_haddressedit, hfont, FALSE);
new EditController(_haddressedit);
/* CreateStatusWindow does not accept WS_BORDER
_hstatusbar = CreateWindowEx(WS_EX_NOPARENTNOTIFY, STATUSCLASSNAME, 0,
WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_BORDER|CCS_NODIVIDER, 0,0,0,0,
hwnd, (HMENU)IDW_STATUSBAR, g_hInstance, 0);*/
_hstatusbar = CreateStatusWindow(WS_CHILD|WS_VISIBLE, 0, hwnd, IDW_STATUSBAR);
CheckMenuItem(_menu_info._hMenuView, ID_VIEW_STATUSBAR, MF_BYCOMMAND|MF_CHECKED);
_hsidebar = CreateWindowEx(WS_EX_STATICEDGE, WC_TREEVIEW, TEXT("Sidebar"),
WS_CHILD|WS_TABSTOP|WS_BORDER|/*WS_VISIBLE|*/WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_SHOWSELALWAYS|TVS_INFOTIP,
-1, -1, 200, 0, _hwnd, (HMENU)IDW_SIDEBAR, g_hInstance, 0);
(void)TreeView_SetImageList(_hsidebar, _himl, TVSIL_NORMAL);
CheckMenuItem(_menu_info._hMenuView, ID_VIEW_SIDE_BAR, MF_BYCOMMAND|MF_UNCHECKED/*MF_CHECKED*/);
// create rebar window to manage toolbar and address bar
#ifndef _NO_REBAR
_hwndrebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL,
WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|
RBS_VARHEIGHT|RBS_AUTOSIZE|RBS_DBLCLKTOGGLE|
CCS_NODIVIDER|CCS_NOPARENTALIGN,
0, 0, 0, 0, _hwnd, 0, g_hInstance, 0);
int btn_hgt = HIWORD(SendMessage(_htoolbar, TB_GETBUTTONSIZE, 0, 0));
REBARBANDINFO rbBand;
rbBand.cbSize = sizeof(REBARBANDINFO);
rbBand.fMask = RBBIM_TEXT|RBBIM_STYLE|RBBIM_CHILD|RBBIM_CHILDSIZE|RBBIM_SIZE;
#ifndef RBBS_HIDETITLE // missing in MinGW headers as of 25.02.2004
#define RBBS_HIDETITLE 0x400
#endif
rbBand.fStyle = RBBS_CHILDEDGE|RBBS_GRIPPERALWAYS|RBBS_HIDETITLE;
rbBand.cxMinChild = 0;
rbBand.cyMinChild = 0;
rbBand.cyChild = 0;
rbBand.cyMaxChild = 0;
rbBand.cyIntegral = btn_hgt;
rbBand.lpText = TEXT("Toolbar");
rbBand.hwndChild = _htoolbar;
rbBand.cxMinChild = 0;
rbBand.cyMinChild = btn_hgt + 4;
rbBand.cx = 182;
SendMessage(_hwndrebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
rbBand.lpText = TEXT("Address");
rbBand.hwndChild = _haddressedit;
rbBand.cxMinChild = 0;
rbBand.cyMinChild = btn_hgt - 2;
rbBand.cx = 284;
SendMessage(_hwndrebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
#endif
}
MainFrameBase::~MainFrameBase()
{
ImageList_Destroy(_himl);
//@@if (g_Globals._hMainWnd == _hwnd)
PostQuitMessage(0);
}
LRESULT MainFrameBase::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{
LRESULT res;
if (ProcessMessage(nmsg, wparam, lparam, &res))
return res;
else
return super::WndProc(nmsg, wparam, lparam);
}
bool MainFrameBase::ProcessMessage(UINT nmsg, WPARAM wparam, LPARAM lparam, LRESULT* pres)
{
switch(nmsg) {
case PM_TRANSLATE_MSG:
*pres = TranslateMsg((MSG*)lparam);
return true;
case WM_SHOWWINDOW:
if (wparam) // trigger child resizing after window creation - now we can succesfully call IsWindowVisible()
resize_frame_client();
return false; // goto def;
case WM_CLOSE:
DestroyWindow(_hwnd);
//@@ g_Globals._hMainWnd = 0;
break;
case WM_DESTROY:
break;
case WM_SIZE:
resize_frame(LOWORD(lparam), HIWORD(lparam));
break; // do not pass message to DefFrameProc
case WM_GETMINMAXINFO: {
LPMINMAXINFO lpmmi = (LPMINMAXINFO)lparam;
lpmmi->ptMaxTrackSize.x <<= 1;/*2*GetSystemMetrics(SM_CXSCREEN) / SM_CXVIRTUALSCREEN */
lpmmi->ptMaxTrackSize.y <<= 1;/*2*GetSystemMetrics(SM_CYSCREEN) / SM_CYVIRTUALSCREEN */
break;}
case PM_FRM_CALC_CLIENT:
frame_get_clientspace((PRECT)lparam);
*pres = TRUE;
return true;
case PM_FRM_GET_MENUINFO:
*pres = (LPARAM)&_menu_info;
return true;
case PM_GET_CONTROLWINDOW:
if (wparam == FCW_STATUS) {
*pres = (LRESULT)(HWND)_hstatusbar;
return true;
}
break;
case PM_SETSTATUSTEXT:
SendMessage(_hstatusbar, SB_SETTEXT, wparam, lparam);
break;
case PM_URL_CHANGED:
SetWindowText(_haddressedit, (LPCTSTR)lparam);
break;
default:
return false;
}
*pres = 0;
return true;
}
BOOL MainFrameBase::TranslateMsg(MSG* pmsg)
{
if (TranslateAccelerator(_hwnd, _hAccel, pmsg))
return TRUE;
return FALSE;
}
int MainFrameBase::Command(int id, int code)
{
CONTEXT("MainFrameBase::Command()");
switch(id) {
case ID_FILE_OPEN:
ibrowser_open(_hwnd);
break;
case ID_FILE_EXIT:
SendMessage(_hwnd, WM_CLOSE, 0, 0);
break;
case ID_VIEW_TOOL_BAR:
toggle_child(_hwnd, id, _htoolbar, 0);
break;
case ID_VIEW_STATUSBAR:
toggle_child(_hwnd, id, _hstatusbar);
break;
case ID_VIEW_SIDE_BAR:
// lazy initialization
if (!TreeView_GetCount(_hsidebar))
FillBookmarks();
toggle_child(_hwnd, id, _hsidebar);
break;
case ID_HELP:
WinHelp(_hwnd, TEXT("ibrowser")/*file ibrowser.hlp*/, HELP_INDEX, 0);
break;
case ID_VIEW_FULLSCREEN:
CheckMenuItem(_menu_info._hMenuView, id, toggle_fullscreen()?MF_CHECKED:0);
break;
case ID_ABOUT_WINDOWS:
ShellAbout(_hwnd, ResString(IDS_TITLE), NULL, 0);
break;
case ID_ABOUT_IBROWSER:
ibrowser_about(_hwnd);
break;
case ID_IBROWSER_FAQ:
launch_file(_hwnd, TEXT("http://www.sky.franken.de/explorer/"), SW_SHOW);
break;
case IDW_ADDRESSBAR:
if (code == 1) {
TCHAR url[BUFFER_LEN];
if (GetWindowText(_haddressedit, url, BUFFER_LEN))
go_to(url, false);
}
break;
default:
return 1; // no command handlers in Window::Command()
}
return 0;
}
int MainFrameBase::Notify(int id, NMHDR* pnmh)
{
switch(pnmh->code) {
// resize children windows when the rebar size changes
case RBN_AUTOSIZE:
resize_frame_client();
break;
case TVN_GETINFOTIP: {
NMTVGETINFOTIP* pnmgit = (NMTVGETINFOTIP*)pnmh;
if (pnmgit->lParam) {
const BookmarkNode& node = *(BookmarkNode*)pnmgit->lParam;
if (node._type == BookmarkNode::BMNT_FOLDER) {
// display tooltips for bookmark folders
if (!node._pfolder->_description.empty())
lstrcpyn(pnmgit->pszText, node._pfolder->_description.c_str(), pnmgit->cchTextMax);
} else if (node._type == BookmarkNode::BMNT_BOOKMARK) {
// display tooltips for bookmark folders
String txt = node._pbookmark->_description;
if (!node._pbookmark->_url.empty()) {
if (!txt.empty())
txt += TEXT(" - ");
txt += node._pbookmark->_url;
}
lstrcpyn(pnmgit->pszText, txt.c_str(), pnmgit->cchTextMax);
}
}
break;}
case NM_DBLCLK: {
HTREEITEM hitem = TreeView_GetSelection(_hsidebar);
LPARAM lparam = TreeView_GetItemData(_hsidebar, hitem);
if (lparam) {
const BookmarkNode& node = *(BookmarkNode*)lparam;
if (node._type == BookmarkNode::BMNT_BOOKMARK) {
bool new_window = GetAsyncKeyState(VK_SHIFT)<0;
go_to(node._pbookmark->_url, new_window);
}
}
break;}
}
return 0;
}
void MainFrameBase::resize_frame(int cx, int cy)
{
if (cy <= 0)
return; // avoid resizing children when receiving RBN_AUTOSIZE while getting minimized
RECT rect = {0, 0, cx, cy};
if (_hwndrebar) {
int height = ClientRect(_hwndrebar).bottom;
MoveWindow(_hwndrebar, rect.left, rect.top, rect.right-rect.left, height, TRUE);
rect.top += height;
} else {
if (IsWindowVisible(_htoolbar)) {
SendMessage(_htoolbar, WM_SIZE, 0, 0);
WindowRect rt(_htoolbar);
rect.top = rt.bottom;
// rect.bottom -= rt.bottom;
}
}
if (IsWindowVisible(_hstatusbar)) {
int parts[] = {300, 500};
SendMessage(_hstatusbar, WM_SIZE, 0, 0);
SendMessage(_hstatusbar, SB_SETPARTS, 2, (LPARAM)&parts);
ClientRect rt(_hstatusbar);
rect.bottom -= rt.bottom;
}
if (IsWindowVisible(_hsidebar)) {
WindowRect rt(_hsidebar);
rect.left += rt.right-rt.left;
SetWindowPos(_hsidebar, 0, -1, rect.top-1, rt.right-rt.left, rect.bottom-rect.top+1, SWP_NOACTIVATE|SWP_NOZORDER);
}
}
void MainFrameBase::resize_frame_client()
{
ClientRect rect(_hwnd);
resize_frame(rect.right, rect.bottom);
}
void MainFrameBase::frame_get_clientspace(PRECT prect)
{
if (!IsIconic(_hwnd))
GetClientRect(_hwnd, prect);
else {
WINDOWPLACEMENT wp;
GetWindowPlacement(_hwnd, &wp);
prect->left = prect->top = 0;
prect->right = wp.rcNormalPosition.right-wp.rcNormalPosition.left-
2*(GetSystemMetrics(SM_CXSIZEFRAME)+GetSystemMetrics(SM_CXEDGE));
prect->bottom = wp.rcNormalPosition.bottom-wp.rcNormalPosition.top-
2*(GetSystemMetrics(SM_CYSIZEFRAME)+GetSystemMetrics(SM_CYEDGE))-
GetSystemMetrics(SM_CYCAPTION)-GetSystemMetrics(SM_CYMENUSIZE);
}
if (IsWindowVisible(_htoolbar)) {
ClientRect rt(_htoolbar);
prect->top += rt.bottom+2;
}
if (IsWindowVisible(_hstatusbar)) {
ClientRect rt(_hstatusbar);
prect->bottom -= rt.bottom;
}
}
BOOL MainFrameBase::toggle_fullscreen()
{
RECT rt;
if ((_fullscreen._mode=!_fullscreen._mode)) {
GetWindowRect(_hwnd, &_fullscreen._orgPos);
_fullscreen._wasZoomed = IsZoomed(_hwnd);
Frame_CalcFrameClient(_hwnd, &rt);
ClientToScreen(_hwnd, (LPPOINT)&rt.left);
ClientToScreen(_hwnd, (LPPOINT)&rt.right);
rt.left = _fullscreen._orgPos.left-rt.left;
rt.top = _fullscreen._orgPos.top-rt.top;
rt.right = GetSystemMetrics(SM_CXSCREEN)+_fullscreen._orgPos.right-rt.right;
rt.bottom = GetSystemMetrics(SM_CYSCREEN)+_fullscreen._orgPos.bottom-rt.bottom;
MoveWindow(_hwnd, rt.left, rt.top, rt.right-rt.left, rt.bottom-rt.top, TRUE);
} else {
MoveWindow(_hwnd, _fullscreen._orgPos.left, _fullscreen._orgPos.top,
_fullscreen._orgPos.right-_fullscreen._orgPos.left,
_fullscreen._orgPos.bottom-_fullscreen._orgPos.top, TRUE);
if (_fullscreen._wasZoomed)
ShowWindow(_hwnd, WS_MAXIMIZE);
}
return _fullscreen._mode;
}
void MainFrameBase::fullscreen_move()
{
RECT rt, pos;
GetWindowRect(_hwnd, &pos);
Frame_CalcFrameClient(_hwnd, &rt);
ClientToScreen(_hwnd, (LPPOINT)&rt.left);
ClientToScreen(_hwnd, (LPPOINT)&rt.right);
rt.left = pos.left-rt.left;
rt.top = pos.top-rt.top;
rt.right = GetSystemMetrics(SM_CXSCREEN)+pos.right-rt.right;
rt.bottom = GetSystemMetrics(SM_CYSCREEN)+pos.bottom-rt.bottom;
MoveWindow(_hwnd, rt.left, rt.top, rt.right-rt.left, rt.bottom-rt.top, TRUE);
}
void MainFrameBase::toggle_child(HWND hwnd, UINT cmd, HWND hchild, int band_idx)
{
BOOL vis = IsWindowVisible(hchild);
CheckMenuItem(_menu_info._hMenuView, cmd, vis?MF_BYCOMMAND:MF_BYCOMMAND|MF_CHECKED);
if (band_idx != -1)
SendMessage(_hwndrebar, RB_SHOWBAND, band_idx, !vis);
else
ShowWindow(hchild, vis? SW_HIDE: SW_SHOW);
if (_fullscreen._mode)
fullscreen_move();
resize_frame_client();
}
void MainFrameBase::FillBookmarks()
{
/*@@
HiddenWindow hide(_hsidebar);
WindowCanvas canvas(_hwnd);
TreeView_DeleteAllItems(_hsidebar);
g_icon_cache.get_icon(ICID_FAVORITES).add_to_imagelist(_himl, canvas);
g_icon_cache.get_icon(ICID_BOOKMARK).add_to_imagelist(_himl, canvas);
ImageList_AddAlphaIcon(_himl, SmallIcon(IDI_DOT), GetStockBrush(WHITE_BRUSH), canvas);
g_icon_cache.get_icon(ICID_FOLDER).add_to_imagelist(_himl, canvas);
g_icon_cache.get_icon(ICID_FOLDER).add_to_imagelist(_himl, canvas);
TV_INSERTSTRUCT tvi;
tvi.hParent = TVI_ROOT;
tvi.hInsertAfter = TVI_LAST;
tvi.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
ResString sFavorites(IDS_FAVORITES);
tvi.item.pszText = (LPTSTR)sFavorites.c_str();
tvi.item.iSelectedImage = tvi.item.iImage = 0;
HTREEITEM hitem_bookmarks = TreeView_InsertItem(_hsidebar, &tvi);
g_Globals._favorites.fill_tree(_hsidebar, hitem_bookmarks, _himl, canvas);
TreeView_Expand(_hsidebar, hitem_bookmarks, TVE_EXPAND);
*/
}
MainFrame::MainFrame(HWND hwnd)
: super(hwnd)
{
_split_pos = DEFAULT_SPLIT_POS;
_last_split = DEFAULT_SPLIT_POS;
}
HWND MainFrame::Create()
{
HMENU hMenuFrame = LoadMenu(g_hInstance, MAKEINTRESOURCE(IDM_SDIFRAME));
return Window::Create(WINDOW_CREATOR(MainFrame), 0,
(LPCTSTR)(int)g_hframeClass, ResString(IDS_TITLE), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
0/*hwndDesktop*/, hMenuFrame);
}
/*@@
HWND MainFrame::Create(LPCTSTR url)
{
HWND hFrame = Create();
if (!hFrame)
return 0;
ShowWindow(hFrame, SW_SHOW);
MainFrame* pFrame = GET_WINDOW(MainFrame, hFrame);
if (pFrame)
pFrame->set_url(url);
return hFrame;
}
*/
LRESULT MainFrame::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{
switch(nmsg) {
case WM_SIZE:
resize_frame(LOWORD(lparam), HIWORD(lparam));
break;
case WM_PAINT: {
PaintCanvas canvas(_hwnd);
if (_left_hwnd && _right_hwnd) {
ClientRect rt(_hwnd);
rt.left = _split_pos-SPLIT_WIDTH/2;
rt.right = _split_pos+SPLIT_WIDTH/2+1;
if (_right_hwnd) {
WindowRect right_rect(_right_hwnd);
ScreenToClient(_hwnd, &right_rect);
rt.top = right_rect.top;
rt.bottom = right_rect.bottom;
}
HBRUSH lastBrush = SelectBrush(canvas, GetStockBrush(COLOR_SPLITBAR));
Rectangle(canvas, rt.left, rt.top-1, rt.right, rt.bottom+1);
SelectObject(canvas, lastBrush);
}
break;}
case WM_SETCURSOR:
if (LOWORD(lparam) == HTCLIENT) {
POINT pt;
GetCursorPos(&pt);
ScreenToClient(_hwnd, &pt);
if (pt.x>=_split_pos-SPLIT_WIDTH/2 && pt.x<_split_pos+SPLIT_WIDTH/2+1) {
SetCursor(LoadCursor(0, IDC_SIZEWE));
return TRUE;
}
}
goto def;
case WM_LBUTTONDOWN: {
int x = GET_X_LPARAM(lparam);
ClientRect rt(_hwnd);
if (x>=_split_pos-SPLIT_WIDTH/2 && x<_split_pos+SPLIT_WIDTH/2+1) {
_last_split = _split_pos;
SetCapture(_hwnd);
}
break;}
case WM_LBUTTONUP:
if (GetCapture() == _hwnd)
ReleaseCapture();
break;
case WM_KEYDOWN:
if (wparam == VK_ESCAPE)
if (GetCapture() == _hwnd) {
_split_pos = _last_split;
resize_children();
_last_split = -1;
ReleaseCapture();
SetCursor(LoadCursor(0, IDC_ARROW));
}
break;
case WM_MOUSEMOVE:
if (GetCapture() == _hwnd) {
int x = LOWORD(lparam);
ClientRect rt(_hwnd);
if (x>=0 && x<rt.right) {
_split_pos = x;
resize_children();
rt.left = x-SPLIT_WIDTH/2;
rt.right = x+SPLIT_WIDTH/2+1;
InvalidateRect(_hwnd, &rt, FALSE);
UpdateWindow(_left_hwnd);
UpdateWindow(_hwnd);
UpdateWindow(_right_hwnd);
}
}
break;
case PM_OPEN_WINDOW: {CONTEXT("MainFrame PM_OPEN_WINDOW");
LPCTSTR url = (LPCTSTR)lparam;
if (!url || !*url)
#ifdef _DEBUG
url = TEXT("http://localhost");
#else
url = TEXT("about:blank");
#endif
if (!_right_hwnd) {
_right_hwnd = create_webchildwindow(WebChildWndInfo(_hwnd, url));
resize_children();
} else
set_url(url);
return TRUE;} // success
default: def:
return super::WndProc(nmsg, wparam, lparam);
}
return 0;
}
int MainFrame::Command(int id, int code)
{
if (_right_hwnd)
if (SendMessage(_right_hwnd, PM_DISPATCH_COMMAND, MAKELONG(id,code), 0))
return 0;
return super::Command(id, code);
}
void MainFrame::resize_frame(int cx, int cy)
{
if (cy <= 0)
return; // avoid resizing children when receiving RBN_AUTOSIZE while getting minimized
RECT rect = {0, 0, cx, cy};
if (_hwndrebar) {
int height = ClientRect(_hwndrebar).bottom;
MoveWindow(_hwndrebar, rect.left, rect.top, rect.right-rect.left, height, TRUE);
rect.top += height;
} else {
if (IsWindowVisible(_htoolbar)) {
SendMessage(_htoolbar, WM_SIZE, 0, 0);
WindowRect rt(_htoolbar);
rect.top = rt.bottom;
// rect.bottom -= rt.bottom;
}
}
if (IsWindowVisible(_hstatusbar)) {
int parts[] = {300, 500};
SendMessage(_hstatusbar, WM_SIZE, 0, 0);
SendMessage(_hstatusbar, SB_SETPARTS, 2, (LPARAM)&parts);
ClientRect rt(_hstatusbar);
rect.bottom -= rt.bottom;
}
if (IsWindowVisible(_hsidebar)) {
WindowRect rt(_hsidebar);
rect.left += rt.right-rt.left;
SetWindowPos(_hsidebar, 0, -1, rect.top-1, rt.right-rt.left, rect.bottom-rect.top+1, SWP_NOACTIVATE|SWP_NOZORDER);
}
_clnt_rect = rect;
resize_children();
}
void MainFrame::resize_children()
{
HDWP hdwp = BeginDeferWindowPos(2);
int cx = _clnt_rect.left;
if (_left_hwnd) {
cx = _split_pos + SPLIT_WIDTH/2;
hdwp = DeferWindowPos(hdwp, _left_hwnd, 0, _clnt_rect.left, _clnt_rect.top, _split_pos-SPLIT_WIDTH/2-_clnt_rect.left, _clnt_rect.bottom-_clnt_rect.top, SWP_NOZORDER|SWP_NOACTIVATE);
} else {
//_split_pos = 0;
cx = 0;
}
if (_right_hwnd)
hdwp = DeferWindowPos(hdwp, _right_hwnd, 0, _clnt_rect.left+cx, _clnt_rect.top, _clnt_rect.right-cx, _clnt_rect.bottom-_clnt_rect.top, SWP_NOZORDER|SWP_NOACTIVATE);
EndDeferWindowPos(hdwp);
}
void MainFrame::update_clnt_rect()
{
ClientRect rect(_hwnd);
resize_frame(rect.right, rect.bottom);
}
void MainFrame::set_url(LPCTSTR url)
{
if (_url != url) {
_url = url;
SetWindowText(_haddressedit, url); //SendMessage(_hwndFrame, PM_URL_CHANGED, 0, (LPARAM)url);
}
}
bool MainFrame::go_to(LPCTSTR url, bool new_window)
{
if (_right_hwnd) {
SendMessage(_right_hwnd, PM_JUMP_TO_URL, 0, (LPARAM)url);
return true;
}
return false;
}

View file

@ -0,0 +1,125 @@
/*
* Copyright 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser
//
// mainframe.h
//
// Martin Fuchs, 25.01.2005
//
#define PM_OPEN_WINDOW (WM_APP+0x07)
/// Explorer frame window base class
struct MainFrameBase : public PreTranslateWindow
{
typedef PreTranslateWindow super;
MainFrameBase(HWND hwnd);
~MainFrameBase();
static HWND Create(LPCTSTR url, UINT cmdshow=SW_SHOWNORMAL);
WindowHandle _hwndrebar;
WindowHandle _htoolbar;
WindowHandle _hstatusbar;
WindowHandle _haddressedit;
WindowHandle _hsidebar;
HIMAGELIST _himl;
HMENU _hMenuFrame;
HMENU _hMenuWindow;
MenuInfo _menu_info;
protected:
FullScreenParameters _fullscreen;
HACCEL _hAccel;
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
bool ProcessMessage(UINT nmsg, WPARAM wparam, LPARAM lparam, LRESULT* pres);
int Command(int id, int code);
int Notify(int id, NMHDR* pnmh);
virtual BOOL TranslateMsg(MSG* pmsg);
void toggle_child(HWND hwnd, UINT cmd, HWND hchild, int band_idx=-1);
void resize_frame_client();
virtual void resize_frame(int cx, int cy);
virtual void frame_get_clientspace(PRECT prect);
BOOL toggle_fullscreen();
void fullscreen_move();
void FillBookmarks();
virtual bool go_to(LPCTSTR url, bool new_window) {return false;}
};
struct MainFrame : public MainFrameBase
{
typedef MainFrameBase super;
MainFrame(HWND hwnd);
static HWND Create();
//@@static HWND Create(LPCTSTR url);
protected:
WindowHandle _left_hwnd;
WindowHandle _right_hwnd;
int _split_pos;
int _last_split;
RECT _clnt_rect;
String _url;
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
int Command(int id, int code);
void resize_frame(int cx, int cy);
void resize_children();
void update_clnt_rect();
void set_url(LPCTSTR url);
virtual bool go_to(LPCTSTR url, bool new_window);
};
struct WebChildWndInfo : public ChildWndInfo
{
WebChildWndInfo(HWND hwndFrame, LPCTSTR url)
: ChildWndInfo(hwndFrame),
_url(url)
{
}
String _url;
};

View file

@ -0,0 +1,172 @@
# Microsoft Developer Studio Project File - Name="make_ibrowser" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) External Target" 0x0106
CFG=make_ibrowser - Win32 bjam
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "make_ibrowser.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "make_ibrowser.mak" CFG="make_ibrowser - Win32 bjam"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "make_ibrowser - Win32 Release" (based on "Win32 (x86) External Target")
!MESSAGE "make_ibrowser - Win32 Debug" (based on "Win32 (x86) External Target")
!MESSAGE "make_ibrowser - Win32 Unicode Debug" (based on "Win32 (x86) External Target")
!MESSAGE "make_ibrowser - Win32 Unicode Release" (based on "Win32 (x86) External Target")
!MESSAGE "make_ibrowser - Win32 bjam" (based on "Win32 (x86) External Target")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
!IF "$(CFG)" == "make_ibrowser - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Cmd_Line "NMAKE /f make_ibrowser.mak"
# PROP BASE Rebuild_Opt "/a"
# PROP BASE Target_File "make_ibrowser.exe"
# PROP BASE Bsc_Name "make_ibrowser.bsc"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Cmd_Line "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" make -f Makefile.PCH UNICODE=0"
# PROP Rebuild_Opt "clean all"
# PROP Target_File "ibrowser.exe"
# PROP Bsc_Name ""
# PROP Target_Dir ""
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Cmd_Line "NMAKE /f make_ibrowser.mak"
# PROP BASE Rebuild_Opt "/a"
# PROP BASE Target_File "make_ibrowser.exe"
# PROP BASE Bsc_Name "make_ibrowser.bsc"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Cmd_Line "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" make -f Makefile.PCH UNICODE=0 DEBUG=1"
# PROP Rebuild_Opt "clean all"
# PROP Target_File "ibrowser.exe"
# PROP Bsc_Name "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" make -f Makefile.MinGW UNICODE=0 DEBUG=1"
# PROP Target_Dir ""
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 Unicode Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "UDebug"
# PROP BASE Intermediate_Dir "UDebug"
# PROP BASE Cmd_Line "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" make -f Makefile.MinGW UNICODE=1 DEBUG=1"
# PROP BASE Rebuild_Opt "clean all"
# PROP BASE Target_File "ibrowser.exe"
# PROP BASE Bsc_Name ""
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "UDebug"
# PROP Intermediate_Dir "UDebug"
# PROP Cmd_Line "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" make -f Makefile.MinGW UNICODE=1 DEBUG=1"
# PROP Rebuild_Opt "clean all"
# PROP Target_File "ibrowser.exe"
# PROP Bsc_Name ""
# PROP Target_Dir ""
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 Unicode Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "URelease"
# PROP BASE Intermediate_Dir "URelease"
# PROP BASE Cmd_Line "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" make -f Makefile.MinGW UNICODE=1"
# PROP BASE Rebuild_Opt "clean all"
# PROP BASE Target_File "ibrowser.exe"
# PROP BASE Bsc_Name ""
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "URelease"
# PROP Intermediate_Dir "URelease"
# PROP Cmd_Line "msdevfilt -gcc make -f Makefile.PCH UNICODE=1"
# PROP Rebuild_Opt "clean all"
# PROP Target_File "ibrowser.exe"
# PROP Bsc_Name ""
# PROP Target_Dir ""
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 bjam"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Cmd_Line "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" make -f Makefile.MinGW DEBUG=1"
# PROP BASE Rebuild_Opt "clean all"
# PROP BASE Target_File "ibrowser.exe"
# PROP BASE Bsc_Name ""
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Cmd_Line "msdevfilt -gcc -pipe "perl d:\tools\gSTLFilt.pl" bjam"
# PROP Rebuild_Opt "clean&bjam release"
# PROP Target_File "ibrowser.exe"
# PROP Bsc_Name ""
# PROP Target_Dir ""
!ENDIF
# Begin Target
# Name "make_ibrowser - Win32 Release"
# Name "make_ibrowser - Win32 Debug"
# Name "make_ibrowser - Win32 Unicode Debug"
# Name "make_ibrowser - Win32 Unicode Release"
# Name "make_ibrowser - Win32 bjam"
!IF "$(CFG)" == "make_ibrowser - Win32 Release"
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 Debug"
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 Unicode Debug"
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 Unicode Release"
!ELSEIF "$(CFG)" == "make_ibrowser - Win32 bjam"
!ENDIF
# Begin Source File
SOURCE=.\Makefile
# End Source File
# Begin Source File
SOURCE=.\Makefile.MinGW
# End Source File
# Begin Source File
SOURCE=.\Makefile.PCH
# End Source File
# End Target
# End Project

View file

@ -0,0 +1,28 @@
/*
* Copyright 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser - precompiled header support
//
// precomp.h
//
// Martin Fuchs, 25.01.2005
//
#include "precomp.h"

View file

@ -0,0 +1,32 @@
/*
* Copyright 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser - precompiled header support
//
// precomp.h
//
// Martin Fuchs, 25.01.2005
//
#include "utility/utility.h"
#include "utility/comutil.h"
#include "ibrowser.h"

View file

@ -0,0 +1,9 @@
IBrowser is a Web Browser User Interface similar derived from ROS Explorer.
It encapsulates the Mozilla or MS Web Browser Control.
For more information about ReactOS Explorer please look at the FAQ web page:
http://www.sky.franken.de/explorer/

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -0,0 +1,321 @@
/*
* Copyright 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser
//
// comutil.h
//
// C++ wrapper classes for COM interfaces
//
// Martin Fuchs, 25.01.2005
//
// windows shell headers
#include <shellapi.h>
#include <shlobj.h>
/*@@
#if _MSC_VER>=1300 // VS.Net
#include <comdefsp.h>
using namespace _com_util;
#endif
*/
#ifndef _INC_COMUTIL // is comutil.h of MS headers not available?
#ifndef _NO_COMUTIL
#define _NO_COMUTIL
#endif
#endif
// Exception Handling
#ifndef _NO_COMUTIL
#define COMExceptionBase _com_error
#else
/// COM ExceptionBase class as replacement for _com_error
struct COMExceptionBase
{
COMExceptionBase(HRESULT hr)
: _hr(hr)
{
}
HRESULT Error() const
{
return _hr;
}
LPCTSTR ErrorMessage() const
{
if (_msg.empty()) {
LPTSTR pBuf;
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
0, _hr, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (LPTSTR)&pBuf, 0, NULL)) {
_msg = pBuf;
LocalFree(pBuf);
} else {
TCHAR buffer[128];
_stprintf(buffer, TEXT("unknown Exception: 0x%08lX"), _hr);
_msg = buffer;
}
}
return _msg;
}
protected:
HRESULT _hr;
mutable String _msg;
};
#endif
/// Exception with context information
struct COMException : public COMExceptionBase
{
typedef COMExceptionBase super;
COMException(HRESULT hr)
: super(hr),
_context(CURRENT_CONTEXT),
_file(NULL), _line(0)
{
LOG(toString());
LOG(CURRENT_CONTEXT.getStackTrace());
}
COMException(HRESULT hr, const char* file, int line)
: super(hr),
_context(CURRENT_CONTEXT),
_file(file), _line(line)
{
LOG(toString());
LOG(CURRENT_CONTEXT.getStackTrace());
}
COMException(HRESULT hr, const String& obj)
: super(hr),
_context(CURRENT_CONTEXT),
_file(NULL), _line(0)
{
LOG(toString());
LOG(CURRENT_CONTEXT.getStackTrace());
}
COMException(HRESULT hr, const String& obj, const char* file, int line)
: super(hr),
_context(CURRENT_CONTEXT),
_file(file), _line(line)
{
LOG(toString());
LOG(CURRENT_CONTEXT.getStackTrace());
}
String toString() const;
Context _context;
const char* _file;
int _line;
};
#define THROW_EXCEPTION(hr) throw COMException(hr, __FILE__, __LINE__)
#define CHECKERROR(hr) ((void)(FAILED(hr)? THROW_EXCEPTION(hr): 0))
#ifdef _NO_COMUTIL
inline void CheckError(HRESULT hr)
{
if (FAILED(hr))
throw COMException(hr);
}
#endif
/// COM Initialisation
struct ComInit
{
ComInit()
{
CHECKERROR(CoInitialize(0));
}
#if (_WIN32_WINNT>=0x0400) || defined(_WIN32_DCOM)
ComInit(DWORD flag)
{
CHECKERROR(CoInitializeEx(0, flag));
}
#endif
~ComInit()
{
CoUninitialize();
}
};
/// OLE initialisation for drag drop support
struct OleInit
{
OleInit()
{
CHECKERROR(OleInitialize(0));
}
~OleInit()
{
OleUninitialize();
}
};
/// Exception Handler for COM exceptions
extern void HandleException(COMException& e, HWND hwnd);
/// wrapper class for COM interface pointers
template<typename T> struct SIfacePtr
{
SIfacePtr()
: _p(0)
{
}
SIfacePtr(T* p)
: _p(p)
{
if (p)
p->AddRef();
}
SIfacePtr(IUnknown* unknown, REFIID riid)
{
CHECKERROR(unknown->QueryInterface(riid, (LPVOID*)&_p));
}
~SIfacePtr()
{
Free();
}
T* operator->()
{
return _p;
}
const T* operator->() const
{
return _p;
}
/* not GCC compatible
operator const T*() const
{
return _p;
} */
operator T*()
{
return _p;
}
T** operator&()
{
return &_p;
}
bool empty() const //NOTE: GCC seems not to work correctly when defining operator bool() AND operator T*() at one time
{
return !_p;
}
SIfacePtr& operator=(T* p)
{
Free();
if (p) {
p->AddRef();
_p = p;
}
return *this;
}
void operator=(SIfacePtr const& o)
{
T* h = _p;
if (o._p)
o._p->AddRef();
_p = o._p;
if (h)
h->Release();
}
HRESULT CreateInstance(REFIID clsid, REFIID riid)
{
return CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, riid, (LPVOID*)&_p);
}
template<typename I> HRESULT QueryInterface(REFIID riid, I* p)
{
return _p->QueryInterface(riid, (LPVOID*)p);
}
T* get()
{
return _p;
}
void Free()
{
T* h = _p;
_p = NULL;
if (h)
h->Release();
}
protected:
SIfacePtr(const SIfacePtr& o)
: _p(o._p)
{
if (_p)
_p->AddRef();
}
T* _p;
};

View file

@ -0,0 +1,419 @@
/*
* Copyright 2003, 2004, 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// Explorer clone
//
// utility.cpp
//
// Martin Fuchs, 23.07.2003
//
#include <precomp.h>
//#include <shellapi.h>
#include <time.h>
#include <sstream>
DWORD WINAPI Thread::ThreadProc(void* para)
{
Thread* pThis = (Thread*) para;
int ret = pThis->Run();
pThis->_alive = false;
return ret;
}
void CenterWindow(HWND hwnd)
{
RECT rt, prt;
GetWindowRect(hwnd, &rt);
DWORD style;
HWND owner = 0;
for(HWND wh=hwnd; (wh=GetWindow(wh,GW_OWNER))!=0; )
if (((style=GetWindowStyle(wh))&WS_VISIBLE) && !(style&WS_MINIMIZE))
{owner=wh; break;}
if (owner)
GetWindowRect(owner, &prt);
else
SystemParametersInfo(SPI_GETWORKAREA, 0, &prt, 0); //@@ GetDesktopWindow() wäre auch hilfreich.
SetWindowPos(hwnd, 0, (prt.left+prt.right+rt.left-rt.right)/2,
(prt.top+prt.bottom+rt.top-rt.bottom)/2, 0,0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER);
MoveVisible(hwnd);
}
void MoveVisible(HWND hwnd)
{
RECT rc;
GetWindowRect(hwnd, &rc);
int left=rc.left, top=rc.top;
int xmax = GetSystemMetrics(SM_CXSCREEN);
int ymax = GetSystemMetrics(SM_CYSCREEN);
if (rc.left < 0)
rc.left = 0;
else if (rc.right > xmax)
if ((rc.left-=rc.right-xmax) < 0)
rc.left = 0;
if (rc.top < 0)
rc.top = 0;
else if (rc.bottom > ymax)
if ((rc.top-=rc.bottom-ymax) < 0)
rc.top = 0;
if (rc.left!=left || rc.top!=top)
SetWindowPos(hwnd, 0, rc.left,rc.top, 0,0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
}
void display_error(HWND hwnd, DWORD error) //@@ CONTEXT mit ausgeben -> display_error(HWND hwnd, const Exception& e)
{
PTSTR msg;
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
0, error, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (PTSTR)&msg, 0, NULL)) {
LOG(FmtString(TEXT("display_error(%#x): %s"), error, msg));
SetLastError(0);
MessageBox(hwnd, msg, TEXT("ROS Explorer"), MB_OK);
if (GetLastError() == ERROR_INVALID_WINDOW_HANDLE)
MessageBox(0, msg, TEXT("ROS Explorer"), MB_OK);
} else {
LOG(FmtString(TEXT("Unknown Error %#x"), error));
FmtString msg(TEXT("Unknown Error %#x"), error);
SetLastError(0);
MessageBox(hwnd, msg, TEXT("ROS Explorer"), MB_OK);
if (GetLastError() == ERROR_INVALID_WINDOW_HANDLE)
MessageBox(0, msg, TEXT("ROS Explorer"), MB_OK);
}
LocalFree(msg);
}
Context Context::s_main("-NO-CONTEXT-");
Context* Context::s_current = &Context::s_main;
String Context::toString() const
{
String str = _ctx;
if (!_obj.empty())
str.appendf(TEXT("\nObject: %s"), (LPCTSTR)_obj);
return str;
}
String Context::getStackTrace() const
{
ostringstream str;
str << "Context Trace:\n";
for(const Context*p=this; p && p!=&s_main; p=p->_last) {
str << "- " << p->_ctx;
if (!p->_obj.empty())
str << " obj=" << ANS(p->_obj);
str << '\n';
}
return str.str();
}
BOOL time_to_filetime(const time_t* t, FILETIME* ftime)
{
struct tm* tm = gmtime(t);
SYSTEMTIME stime;
if (!tm)
return FALSE;
stime.wYear = tm->tm_year+1900;
stime.wMonth = tm->tm_mon+1;
stime.wDayOfWeek = (WORD)-1;
stime.wDay = tm->tm_mday;
stime.wHour = tm->tm_hour;
stime.wMinute = tm->tm_min;
stime.wSecond = tm->tm_sec;
stime.wMilliseconds = 0;
return SystemTimeToFileTime(&stime, ftime);
}
BOOL launch_file(HWND hwnd, LPCTSTR cmd, UINT nCmdShow, LPCTSTR parameters)
{
CONTEXT("launch_file()");
HINSTANCE hinst = ShellExecute(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow);
if ((int)hinst <= 32) {
display_error(hwnd, GetLastError());
return FALSE;
}
return TRUE;
}
#ifdef UNICODE
BOOL launch_fileA(HWND hwnd, LPSTR cmd, UINT nCmdShow, LPCSTR parameters)
{
HINSTANCE hinst = ShellExecuteA(hwnd, NULL/*operation*/, cmd, parameters, NULL/*dir*/, nCmdShow);
if ((int)hinst <= 32) {
display_error(hwnd, GetLastError());
return FALSE;
}
return TRUE;
}
#endif
/* search for already running instance */
static int g_foundPrevInstance = 0;
static BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lparam)
{
TCHAR cls[128];
GetClassName(hwnd, cls, 128);
if (!lstrcmp(cls, (LPCTSTR)lparam)) {
g_foundPrevInstance++;
return FALSE;
}
return TRUE;
}
/* search for window of given class name to allow only one running instance */
int find_window_class(LPCTSTR classname)
{
EnumWindows(EnumWndProc, (LPARAM)classname);
if (g_foundPrevInstance)
return 1;
return 0;
}
typedef void (WINAPI*RUNDLLPROC)(HWND hwnd, HINSTANCE hinst, LPCTSTR cmdline, DWORD nCmdShow);
BOOL RunDLL(HWND hwnd, LPCTSTR dllname, LPCSTR procname, LPCTSTR cmdline, UINT nCmdShow)
{
HMODULE hmod = LoadLibrary(dllname);
if (!hmod)
return FALSE;
/*TODO
<Windows NT/2000>
It is possible to create a Unicode version of the function.
Rundll32 first tries to find a function named EntryPointW.
If it cannot find this function, it tries EntryPointA, then EntryPoint.
To create a DLL that supports ANSI on Windows 95/98/Me and Unicode otherwise,
export two functions: EntryPointW and EntryPoint.
*/
RUNDLLPROC proc = (RUNDLLPROC)GetProcAddress(hmod, procname);
if (!proc) {
FreeLibrary(hmod);
return FALSE;
}
proc(hwnd, hmod, cmdline, nCmdShow);
FreeLibrary(hmod);
return TRUE;
}
BOOL launch_cpanel(HWND hwnd, LPCTSTR applet)
{
//launch_file(_hwnd, applet, SW_SHOWNORMAL); // This would be enough, but we want the fastest solution.
//launch_file(_hwnd, TEXT("rundll32.exe /d shell32.dll,Control_RunDLL ")+applet, SW_SHOWNORMAL);
return RunDLL(hwnd, TEXT("shell32"), "Control_RunDLL", applet, SW_SHOWNORMAL);
}
BOOL RecursiveCreateDirectory(LPCTSTR path_in)
{
TCHAR path[MAX_PATH], hole_path[MAX_PATH];
_tcscpy(hole_path, path_in);
int drv_len = 0;
LPCTSTR d;
for(d=hole_path; *d && *d!='/' && *d!='\\'; ++d) {
++drv_len;
if (*d == ':')
break;
}
LPTSTR dir = hole_path + drv_len;
int l;
LPTSTR p = hole_path + (l=_tcslen(hole_path));
while(--p>=hole_path && (*p=='/' || *p=='\\'))
*p = '\0';
WIN32_FIND_DATA w32fd;
HANDLE hFind = FindFirstFile(hole_path, &w32fd);
if (hFind == INVALID_HANDLE_VALUE) {
_tcsncpy(path, hole_path, drv_len);
int i = drv_len;
for(p=dir; *p=='/'||*p=='\\'; p++)
path[i++] = *p++;
for(; i<l; i++) {
memcpy(path, hole_path, i*sizeof(TCHAR));
for(; hole_path[i] && hole_path[i]!='/' && hole_path[i]!='\\'; i++)
path[i] = hole_path[i];
path[i] = '\0';
hFind = FindFirstFile(path, &w32fd);
if (hFind != INVALID_HANDLE_VALUE)
FindClose(hFind);
else {
LOG(FmtString(TEXT("CreateDirectory(\"%s\")"), path));
if (!CreateDirectory(path, 0))
return FALSE;
}
}
} else
FindClose(hFind);
return TRUE;
}
BOOL exists_path(LPCTSTR path)
{
WIN32_FIND_DATA fd;
HANDLE hfind = FindFirstFile(path, &fd);
if (hfind != INVALID_HANDLE_VALUE) {
FindClose(hfind);
return TRUE;
} else
return FALSE;
}
bool SplitFileSysURL(LPCTSTR url, String& dir_out, String& fname_out)
{
if (!_tcsnicmp(url, TEXT("file://"), 7)) {
url += 7;
// remove third slash in front of drive characters
if (*url == '/')
++url;
}
if (exists_path(url)) {
TCHAR path[_MAX_PATH];
// convert slashes to back slashes
GetFullPathName(url, _MAX_PATH, path, NULL);
if (GetFileAttributes(path) & FILE_ATTRIBUTE_DIRECTORY)
fname_out.erase();
else {
TCHAR drv[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
_tsplitpath(path, drv, dir, fname, ext);
_stprintf(path, TEXT("%s%s"), drv, dir);
fname_out.printf(TEXT("%s%s"), fname, ext);
}
dir_out = path;
return true;
} else
return false;
}
/// Exception Handler for COM exceptions
void HandleException(COMException& e, HWND hwnd)
{
String msg = e.toString();
SetLastError(0);
if (hwnd && !IsWindowVisible(hwnd))
hwnd = 0;
MessageBox(hwnd, msg, TEXT("ShellClasses Exception"), MB_ICONHAND|MB_OK);
// If displaying the error message box _with_ parent was not successfull, display it now without a parent window.
if (GetLastError() == ERROR_INVALID_WINDOW_HANDLE)
MessageBox(0, msg, TEXT("ShellClasses Exception"), MB_ICONHAND|MB_OK);
}
String COMException::toString() const
{
TCHAR msg[4*BUFFER_LEN];
LPTSTR p = msg;
p += _stprintf(p, TEXT("%s\nContext: %s"), super::ErrorMessage(), (LPCTSTR)_context.toString());
if (_file)
p += _stprintf(p, TEXT("\nLocation: %hs:%d"), _file, _line);
return msg;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,623 @@
//
// XML storage classes
//
// xmlstorage.cpp
//
// Copyright (c) 2004, 2005 Martin Fuchs <martin-fuchs@gmx.net>
//
/*
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
//#include "xmlstorage.h"
#include <precomp.h>
// work around GCC's wide string constant bug
#ifdef __GNUC__
const LPCXSSTR XMLStorage::XS_TRUE = XS_TEXT("true");
const LPCXSSTR XMLStorage::XS_FALSE = XS_TEXT("false");
const LPCXSSTR XMLStorage::XS_NUMBERFMT = XS_TEXT("%d");
#endif
namespace XMLStorage {
static std::string unescape(const char* s, char b='"', char e='"')
{
const char* end = s + strlen(s);
// if (*s == b)
// ++s;
//
// if (end>s && end[-1]==e)
// --end;
if (*s == b)
if (end>s && end[-1]==e)
++s, --end;
return std::string(s, end-s);
}
static std::string unescape(const char* s, int l, char b='"', char e='"')
{
const char* end = s + l;
// if (*s == b)
// ++s;
//
// if (end>s && end[-1]==e)
// --end;
if (*s == b)
if (end>s && end[-1]==e)
++s, --end;
return std::string(s, end-s);
}
/// move XPath like to position in XML tree
bool XMLPos::go(const char* path)
{
XMLNode* node = _cur;
// Is this an absolute path?
if (*path == '/') {
node = _root;
++path;
}
node = node->find_relative(path);
if (node) {
go_to(node);
return true;
} else
return false;
}
/// move XPath like to position in XML tree
bool const_XMLPos::go(const char* path)
{
const XMLNode* node = _cur;
// Is this an absolute path?
if (*path == '/') {
node = _root;
++path;
}
node = node->find_relative(path);
if (node) {
go_to(node);
return true;
} else
return false;
}
const XMLNode* XMLNode::find_relative(const char* path) const
{
const XMLNode* node = this;
// parse relative path
while(*path) {
const char* slash = strchr(path, '/');
if (slash == path)
return NULL;
int l = slash? slash-path: strlen(path);
std::string comp(path, l);
path += l;
// look for [n] and [@attr_name="attr_value"] expressions in path components
const char* bracket = strchr(comp.c_str(), '[');
l = bracket? bracket-comp.c_str(): comp.length();
std::string child_name(comp.c_str(), l);
std::string attr_name, attr_value;
int n = 0;
if (bracket) {
std::string expr = unescape(bracket, '[', ']');
const char* p = expr.c_str();
n = atoi(p); // read index number
if (n)
n = n - 1; // convert into zero based index
const char* at = strchr(p, '@');
if (at) {
p = at + 1;
const char* equal = strchr(p, '=');
// read attribute name and value
if (equal) {
attr_name = unescape(p, equal-p);
attr_value = unescape(equal+1);
}
}
}
if (attr_name.empty())
// search n.th child node with specified name
node = node->find(child_name, n);
else
// search n.th child node with specified name and matching attribute value
node = node->find(child_name, attr_name, attr_value, n);
if (!node)
return NULL;
if (*path == '/')
++path;
}
return node;
}
XMLNode* XMLNode::create_relative(const char* path)
{
XMLNode* node = this;
// parse relative path
while(*path) {
const char* slash = strchr(path, '/');
if (slash == path)
return NULL;
int l = slash? slash-path: strlen(path);
std::string comp(path, l);
path += l;
// look for [n] and [@attr_name="attr_value"] expressions in path components
const char* bracket = strchr(comp.c_str(), '[');
l = bracket? bracket-comp.c_str(): comp.length();
std::string child_name(comp.c_str(), l);
std::string attr_name, attr_value;
int n = 0;
if (bracket) {
std::string expr = unescape(bracket, '[', ']');
const char* p = expr.c_str();
n = atoi(p); // read index number
if (n)
n = n - 1; // convert into zero based index
const char* at = strchr(p, '@');
if (at) {
p = at + 1;
const char* equal = strchr(p, '=');
// read attribute name and value
if (equal) {
attr_name = unescape(p, equal-p);
attr_value = unescape(equal+1);
}
}
}
XMLNode* child;
if (attr_name.empty())
// search n.th child node with specified name
child = node->find(child_name, n);
else
// search n.th child node with specified name and matching attribute value
child = node->find(child_name, attr_name, attr_value, n);
if (!child) {
child = new XMLNode(child_name);
node->add_child(child);
if (!attr_name.empty())
(*node)[attr_name] = attr_value;
}
node = child;
if (*path == '/')
++path;
}
return node;
}
/// read XML stream into XML tree below _pos
XML_Status XMLReaderBase::read()
{
XML_Status status = XML_STATUS_OK;
while(status == XML_STATUS_OK) {
char* buffer = (char*) XML_GetBuffer(_parser, BUFFER_LEN);
int l = read_buffer(buffer, BUFFER_LEN);
if (l < 0)
break;
status = XML_ParseBuffer(_parser, l, false);
}
if (status != XML_STATUS_ERROR)
status = XML_ParseBuffer(_parser, 0, true);
if (_pos->_children.empty())
_pos->_trailing.append(_content);
else
_pos->_children.back()->_trailing.append(_content);
_content.erase();
return status;
}
/// store XML version and encoding into XML reader
void XMLCALL XMLReaderBase::XML_XmlDeclHandler(void* userData, const XML_Char* version, const XML_Char* encoding, int standalone)
{
XMLReaderBase* pReader = (XMLReaderBase*) userData;
if (version)
pReader->_xml_version = version;
if (encoding)
pReader->_encoding = encoding;
}
/// notifications about XML start tag
void XMLCALL XMLReaderBase::XML_StartElementHandler(void* userData, const XML_Char* name, const XML_Char** atts)
{
XMLReaderBase* pReader = (XMLReaderBase*) userData;
XMLPos& pos = pReader->_pos;
// search for end of first line
const char* s = pReader->_content.c_str();
const char* p = s;
const char* e = p + pReader->_content.length();
for(; p<e; ++p)
if (*p == '\n') {
++p;
break;
}
if (p != s)
if (pos->_children.empty()) { // no children in last node?
if (pReader->_last_tag == TAG_START)
pos->_content.append(s, p-s);
else if (pReader->_last_tag == TAG_END)
pos->_trailing.append(s, p-s);
// else TAG_NONE -> don't store white space in root node
} else
pos->_children.back()->_trailing.append(s, p-s);
std::string leading;
if (p != e)
leading.assign(p, e-p);
XMLNode* node = new XMLNode(String_from_XML_Char(name), leading);
pos.add_down(node);
while(*atts) {
const XML_Char* attr_name = *atts++;
const XML_Char* attr_value = *atts++;
(*node)[String_from_XML_Char(attr_name)] = String_from_XML_Char(attr_value);
}
pReader->_last_tag = TAG_START;
pReader->_content.erase();
}
/// notifications about XML end tag
void XMLCALL XMLReaderBase::XML_EndElementHandler(void* userData, const XML_Char* name)
{
XMLReaderBase* pReader = (XMLReaderBase*) userData;
XMLPos& pos = pReader->_pos;
// search for end of first line
const char* s = pReader->_content.c_str();
const char* p = s;
const char* e = p + pReader->_content.length();
for(; p<e; ++p)
if (*p == '\n') {
++p;
break;
}
if (p != s)
if (pos->_children.empty()) // no children in current node?
pos->_content.append(s, p-s);
else
if (pReader->_last_tag == TAG_START)
pos->_content.append(s, p-s);
else
pos->_children.back()->_trailing.append(s, p-s);
if (p != e)
pos->_end_leading.assign(p, e-p);
pos.back();
pReader->_last_tag = TAG_END;
pReader->_content.erase();
}
/// store content, white space and comments
void XMLCALL XMLReaderBase::XML_DefaultHandler(void* userData, const XML_Char* s, int len)
{
XMLReaderBase* pReader = (XMLReaderBase*) userData;
pReader->_content.append(s, len);
}
std::string XMLReaderBase::get_error_string() const
{
XML_Error error = XML_GetErrorCode(_parser);
switch(error) {
case XML_ERROR_NONE: return "XML_ERROR_NONE";
case XML_ERROR_NO_MEMORY: return "XML_ERROR_NO_MEMORY";
case XML_ERROR_SYNTAX: return "XML_ERROR_SYNTAX";
case XML_ERROR_NO_ELEMENTS: return "XML_ERROR_NO_ELEMENTS";
case XML_ERROR_INVALID_TOKEN: return "XML_ERROR_INVALID_TOKEN";
case XML_ERROR_UNCLOSED_TOKEN: return "XML_ERROR_UNCLOSED_TOKEN";
case XML_ERROR_PARTIAL_CHAR: return "XML_ERROR_PARTIAL_CHAR";
case XML_ERROR_TAG_MISMATCH: return "XML_ERROR_TAG_MISMATCH";
case XML_ERROR_DUPLICATE_ATTRIBUTE: return "XML_ERROR_DUPLICATE_ATTRIBUTE";
case XML_ERROR_JUNK_AFTER_DOC_ELEMENT: return "XML_ERROR_JUNK_AFTER_DOC_ELEMENT";
case XML_ERROR_PARAM_ENTITY_REF: return "XML_ERROR_PARAM_ENTITY_REF";
case XML_ERROR_UNDEFINED_ENTITY: return "XML_ERROR_UNDEFINED_ENTITY";
case XML_ERROR_RECURSIVE_ENTITY_REF: return "XML_ERROR_RECURSIVE_ENTITY_REF";
case XML_ERROR_ASYNC_ENTITY: return "XML_ERROR_ASYNC_ENTITY";
case XML_ERROR_BAD_CHAR_REF: return "XML_ERROR_BAD_CHAR_REF";
case XML_ERROR_BINARY_ENTITY_REF: return "XML_ERROR_BINARY_ENTITY_REF";
case XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF: return "XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF";
case XML_ERROR_MISPLACED_XML_PI: return "XML_ERROR_MISPLACED_XML_PI";
case XML_ERROR_UNKNOWN_ENCODING: return "XML_ERROR_UNKNOWN_ENCODING";
case XML_ERROR_INCORRECT_ENCODING: return "XML_ERROR_INCORRECT_ENCODING";
case XML_ERROR_UNCLOSED_CDATA_SECTION: return "XML_ERROR_UNCLOSED_CDATA_SECTION";
case XML_ERROR_EXTERNAL_ENTITY_HANDLING: return "XML_ERROR_EXTERNAL_ENTITY_HANDLING";
case XML_ERROR_NOT_STANDALONE: return "XML_ERROR_NOT_STANDALONE";
case XML_ERROR_UNEXPECTED_STATE: return "XML_ERROR_UNEXPECTED_STATE";
case XML_ERROR_ENTITY_DECLARED_IN_PE: return "XML_ERROR_ENTITY_DECLARED_IN_PE";
case XML_ERROR_FEATURE_REQUIRES_XML_DTD: return "XML_ERROR_FEATURE_REQUIRES_XML_DTD";
case XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING: return "XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING";
case XML_ERROR_UNBOUND_PREFIX: return "XML_ERROR_UNBOUND_PREFIX";
// EXPAT version >= 1.95.8
#if XML_MAJOR_VERSION>1 || (XML_MAJOR_VERSION==1 && XML_MINOR_VERSION>95) || (XML_MAJOR_VERSION==1 && XML_MINOR_VERSION==95 && XML_MICRO_VERSION>7)
case XML_ERROR_UNDECLARING_PREFIX: return "XML_ERROR_UNDECLARING_PREFIX";
case XML_ERROR_INCOMPLETE_PE: return "XML_ERROR_INCOMPLETE_PE";
case XML_ERROR_XML_DECL: return "XML_ERROR_XML_DECL";
case XML_ERROR_TEXT_DECL: return "XML_ERROR_TEXT_DECL";
case XML_ERROR_PUBLICID: return "XML_ERROR_PUBLICID";
case XML_ERROR_SUSPENDED: return "XML_ERROR_SUSPENDED";
case XML_ERROR_NOT_SUSPENDED: return "XML_ERROR_NOT_SUSPENDED";
case XML_ERROR_ABORTED: return "XML_ERROR_ABORTED";
case XML_ERROR_FINISHED: return "XML_ERROR_FINISHED";
case XML_ERROR_SUSPEND_PE: return "XML_ERROR_SUSPEND_PE";
//#endif
//#if XML_MAJOR_VERSION>=2
/* Added in 2.0. */
case XML_ERROR_RESERVED_PREFIX_XML: return "XML_ERROR_RESERVED_PREFIX_XML";
case XML_ERROR_RESERVED_PREFIX_XMLNS: return "XML_ERROR_RESERVED_PREFIX_XMLNS";
case XML_ERROR_RESERVED_NAMESPACE_URI: return "XML_ERROR_RESERVED_NAMESPACE_URI";
#endif
}
std::ostringstream out;
out << "XML parser error #" << error;
return out.str();
}
std::string EncodeXMLString(const XS_String& str)
{
LPCXSSTR s = str.c_str();
LPXSSTR buffer = (LPXSSTR)alloca(5*sizeof(XS_CHAR)*XS_len(s)); // worst case. "&amp;"
LPXSSTR o = buffer;
for(LPCXSSTR p=s; *p; ++p)
switch(*p) {
case '&':
*o++ = '&'; *o++ = 'a'; *o++ = 'm'; *o++ = 'p'; *o++ = ';';
break;
case '<':
*o++ = '&'; *o++ = 'l'; *o++ = 't'; *o++ = ';';
break;
case '>':
*o++ = '&'; *o++ = 'g'; *o++ = 't'; *o++ = ';';
break;
case '"':
*o++ = '&'; *o++ = 'q'; *o++ = 'u'; *o++ = 'o'; *o++ = 't'; *o++ = ';';
break;
case '\'':
*o++ = '&'; *o++ = 'a'; *o++ = 'p'; *o++ = 'o'; *o++ = 's'; *o++ = ';';
break;
default:
*o++ = *p;
}
#ifdef XS_STRING_UTF8
return XS_String(buffer, o-buffer);
#else
return get_utf8(buffer, o-buffer);
#endif
}
XS_String DecodeXMLString(const XS_String& str)
{
LPCXSSTR s = str.c_str();
LPXSSTR buffer = (LPXSSTR)alloca(sizeof(XS_CHAR)*XS_len(s));
LPXSSTR o = buffer;
for(LPCXSSTR p=s; *p; ++p)
if (*p == '&') {
if (!XS_nicmp(p+1, XS_TEXT("lt;"), 3)) {
*o++ = '<';
p += 3;
} else if (!XS_nicmp(p+1, XS_TEXT("gt;"), 3)) {
*o++ = '>';
p += 3;
} else if (!XS_nicmp(p+1, XS_TEXT("amp;"), 4)) {
*o++ = '&';
p += 4;
} else if (!XS_nicmp(p+1, XS_TEXT("quot;"), 5)) {
*o++ = '"';
p += 5;
} else if (!XS_nicmp(p+1, XS_TEXT("apos;"), 5)) {
*o++ = '\'';
p += 5;
} else
*o++ = *p;
} else
*o++ = *p;
return XS_String(buffer, o-buffer);
}
/// write node with children tree to output stream using original white space
void XMLNode::write_worker(std::ostream& out, int indent) const
{
out << _leading << '<' << EncodeXMLString(*this);
for(AttributeMap::const_iterator it=_attributes.begin(); it!=_attributes.end(); ++it)
out << ' ' << EncodeXMLString(it->first) << "=\"" << EncodeXMLString(it->second) << "\"";
if (!_children.empty() || !_content.empty()) {
out << '>' << _content;
for(Children::const_iterator it=_children.begin(); it!=_children.end(); ++it)
(*it)->write_worker(out, indent+1);
out << _end_leading << "</" << EncodeXMLString(*this) << '>';
} else
out << "/>";
out << _trailing;
}
/// pretty print node with children tree to output stream
void XMLNode::pretty_write_worker(std::ostream& out, int indent) const
{
for(int i=indent; i--; )
out << XML_INDENT_SPACE;
out << '<' << EncodeXMLString(*this);
for(AttributeMap::const_iterator it=_attributes.begin(); it!=_attributes.end(); ++it)
out << ' ' << EncodeXMLString(it->first) << "=\"" << EncodeXMLString(it->second) << "\"";
if (!_children.empty() || !_content.empty()) {
out << ">\n";
for(Children::const_iterator it=_children.begin(); it!=_children.end(); ++it)
(*it)->pretty_write_worker(out, indent+1);
for(int i=indent; i--; )
out << XML_INDENT_SPACE;
out << "</" << EncodeXMLString(*this) << ">\n";
} else
out << "/>\n";
}
/// write node with children tree to output stream using smart formating
void XMLNode::smart_write_worker(std::ostream& out, int indent) const
{
if (_leading.empty())
for(int i=indent; i--; )
out << XML_INDENT_SPACE;
else
out << _leading;
out << '<' << EncodeXMLString(*this);
for(AttributeMap::const_iterator it=_attributes.begin(); it!=_attributes.end(); ++it)
out << ' ' << EncodeXMLString(it->first) << "=\"" << EncodeXMLString(it->second) << "\"";
if (_children.empty() && _content.empty())
out << "/>";
else {
out << '>';
if (_content.empty())
out << '\n';
else
out << _content;
Children::const_iterator it = _children.begin();
if (it != _children.end()) {
for(; it!=_children.end(); ++it)
(*it)->smart_write_worker(out, indent+1);
if (_end_leading.empty())
for(int i=indent; i--; )
out << XML_INDENT_SPACE;
else
out << _end_leading;
} else
out << _end_leading;
out << "</" << EncodeXMLString(*this) << '>';
}
if (_trailing.empty())
out << '\n';
else
out << _trailing;
}
} // namespace XMLStorage

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,309 @@
/*
* Copyright 2004, 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//
// ROS Internet Web Browser
//
// webchild.cpp
//
// Martin Fuchs, 25.01.2005
//
#include <precomp.h>
#include "ibrowser_intres.h"
#include "webchild.h"
#ifdef _MSC_VER
#if _MSC_VER>=1300 // vtMissing for VS.Net
#include <comutil.h>
#pragma comment(lib, "comsupp")
#endif
#else
#ifdef __MINGW32__ // MinGW is lacking vtMissing (as of 07.02.2004)
static Variant vtMissing;
#endif
#endif
//#include <mshtml.h>
Variant::Variant(const VARIANT& var)
{
VariantInit(this);
CheckError(VariantCopy(this, const_cast<VARIANT*>(&var)));
}
Variant::Variant(const VARIANT* var)
{
VariantInit(this);
CheckError(VariantCopy(this, const_cast<VARIANT*>(var)));
}
Variant::~Variant()
{
VariantClear(this);
}
Variant::operator long() const
{
Variant v;
CheckError(VariantChangeType(&v, (VARIANT*)this, 0, VT_I4));
return V_I4(&v);
}
Variant::operator bool() const
{
Variant v;
CheckError(VariantChangeType(&v, (VARIANT*)this, 0, VT_BOOL));
return V_BOOL(&v)? true: false;
}
Variant::operator IDispatch*() const
{
Variant v;
CheckError(VariantChangeType(&v, (VARIANT*)this, 0, VT_DISPATCH));
return V_DISPATCH(&v);
}
Variant::operator VARIANT_BOOL() const
{
Variant v;
CheckError(VariantChangeType(&v, (VARIANT*)this, 0, VT_BOOL));
return V_BOOL(&v);
}
void BStr::assign(BSTR s)
{
if (!SysReAllocString(&_p, s))
THROW_EXCEPTION(E_OUTOFMEMORY);
}
void BStr::assign(const VARIANT& var)
{
if (V_VT(&var) == VT_BSTR)
assign(V_BSTR(&var));
else {
Variant v;
CheckError(VariantChangeType(&v, const_cast<VARIANT*>(&var), 0, VT_BSTR));
assign(V_BSTR(&v));
}
}
BrowserNavigator::BrowserNavigator()
: _browser_initialized(false)
{
}
void BrowserNavigator::attach(IWebBrowser* browser)
{
_browser = browser;
}
void BrowserNavigator::goto_url(LPCTSTR url)
{
if (_browser_initialized)
_browser->Navigate(BStr(url), NULL, NULL, NULL, NULL);
else {
_new_url = url;
_browser->Navigate(L"about:blank", NULL, NULL, NULL, NULL);
}
}
void BrowserNavigator::set_html_page(const String& html_txt)
{
_new_html_txt = html_txt;
goto_url(TEXT("about:blank"));
}
void T2nA_binary(LPCTSTR s, LPSTR d, int len)
{
while(len-- > 0)
*d++ = (unsigned char)*s++;
}
void BrowserNavigator::navigated(LPCTSTR url)
{
_browser_initialized = true;
bool nav = false;
if (!_new_url.empty()) {
if (!_tcscmp(url,TEXT("about:blank")) && _new_url!=TEXT("about:blank")) {
_browser->Navigate(BStr(_new_url), NULL, NULL, NULL, NULL);
++nav;
}
_new_url.erase();
}
if (!nav && !_new_html_txt.empty()) { ///@todo move this into DocumentComplete() ?
int len = _new_html_txt.length();
HGLOBAL hHtmlText = GlobalAlloc(GPTR, len);
if (!hHtmlText) {
T2nA_binary(_new_html_txt, (char*)hHtmlText, len);
_new_html_txt.erase();
SIfacePtr<IStream> pStream;
HRESULT hr = CreateStreamOnHGlobal(hHtmlText, TRUE, &pStream);
if (SUCCEEDED(hr)) {
SIfacePtr<IDispatch> pHtmlDoc;
CheckError(_browser->get_Document(&pHtmlDoc));
SIfacePtr<IPersistStreamInit> pPersistStreamInit;
pHtmlDoc.QueryInterface(IID_IPersistStreamInit, &pPersistStreamInit);
CheckError(pPersistStreamInit->InitNew());
CheckError(pPersistStreamInit->Load(pStream));
} else
GlobalFree(hHtmlText);
}
}
}
HWND create_webchildwindow(const WebChildWndInfo& info)
{
WebChildWindow* pWnd = WebChildWindow::create(info);
if (!pWnd)
return 0;
return *pWnd;
}
static const CLSID CLSID_MozillaBrowser =
{0x1339B54C, 0x3453, 0x11D2, {0x93, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
WebChildWindow::WebChildWindow(HWND hwnd, const WebChildWndInfo& info)
: super(hwnd, info._hwndFrame),
web_super(_navigator)
{
// first try to create a web control with MS IE's CLASSID
HRESULT hr = create_control(hwnd, CLSID_WebBrowser, IID_IWebBrowser2);
// If this failed, try to use Mozilla's web control
if (FAILED(hr))
hr = create_control(hwnd, CLSID_MozillaBrowser, IID_IWebBrowser2);
if (SUCCEEDED(hr)) {
_navigator.attach(_control);
_connector = auto_ptr<EventConnector>(new EventConnector(_control, DIID_DWebBrowserEvents2, this));
// We need to call Navigate() here to initialize the browser control (see _browser_initialized)
_control->Navigate(BStr(info._url), &vtMissing, &vtMissing, &vtMissing, &vtMissing);
}
}
LRESULT WebChildWindow::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{
try {
switch(nmsg) {
case WM_ERASEBKGND:
if (!_control) {
HDC hdc = (HDC)wparam;
ClientRect rect(_hwnd);
HBRUSH hbrush = CreateSolidBrush(RGB(200,200,235));
BkMode mode(hdc, TRANSPARENT);
TextColor color(hdc, RGB(200,40,40));
FillRect(hdc, &rect, hbrush);
DrawText(hdc, TEXT("Sorry - no web browser control could be loaded."), -1, &rect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
DeleteObject(hbrush);
}
return TRUE;
case PM_DISPATCH_COMMAND: {
if (_control) {
HRESULT hr = E_FAIL;
switch(LOWORD(wparam)) {
case ID_GO_BACK:
hr = _control->GoBack();
break;
case ID_GO_FORWARD:
hr = _control->GoForward();
break;
case ID_GO_UP:
///@todo
break;
case ID_GO_HOME:
hr = _control->GoHome();
break;
case ID_GO_SEARCH:
hr = _control->GoSearch();
break;
case ID_REFRESH:
hr = _control->Refresh();
break;
case ID_STOP:
hr = _control->Stop();
break;
default:
return super::WndProc(nmsg, wparam, lparam);
}
if (FAILED(hr) && hr!=E_FAIL)
THROW_EXCEPTION(hr);
}
return TRUE;}
default:
return super::WndProc(nmsg, wparam, lparam);
}
} catch(COMException& e) {
HandleException(e, _hwnd);
}
return 0;
}
String WebChildWindow::jump_to_int(LPCTSTR url)
{
_navigator.goto_url(url);
return url;
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,155 @@
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
IDD_MSCONFIG_DIALOG DIALOG DISCARDABLE 0, 0, 378, 220
STYLE DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
CAPTION "Systemkonfigurationsprogramm"
FONT 8, "Tahoma"
BEGIN
CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,2,2,374,195
DEFPUSHBUTTON "OK", IDOK, 211, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Hilfe", IDC_BTN_HELP, 2, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Abbrechen", IDCANCEL, 267, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Ü&bernehmen", IDC_BTN_APPLY, 323, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_STARTUP_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List3",IDC_STARTUP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 148
PUSHBUTTON "Alle &aktivieren",IDC_BTN_STARTUP_ACTIVATE,223,155,66,14
PUSHBUTTON "Alle &deaktivieren",IDC_BTN_STARTUP_DEACTIVATE,295,155,66,14
END
IDD_TOOLS_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List2",IDC_TOOLS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 134
EDITTEXT IDC_TOOLS_CMDLINE, 1, 139, 360, 12, ES_READONLY
PUSHBUTTON "&Ausführen", IDC_BTN_RUN, 311, 155, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_SERVICES_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List1",IDC_SERVICES_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,2,1,360,148
PUSHBUTTON "Alle &aktivieren",IDC_BTN_SERVICES_ACTIVATE,223,155,66,14
PUSHBUTTON "Alle &deaktivieren",IDC_BTN_SERVICES_DEACTIVATE,295,155,66,14
END
IDD_GENERAL_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
GROUPBOX "Systemstartauswahl", -1, 10, 10, 340, 150
CONTROL "&Normaler Systemstart - Alle Gerätetreiber und Dienste laden", IDC_CBX_NORMAL_START, "Button", 0x50010009, 20, 30, 210, 10
CONTROL "&Diagnosesystemstart - Nur grundlegende Geräte und Dienste laden", IDC_CBX_DIAGNOSTIC_START, "Button", 0x50010009, 20, 45, 230, 10
CONTROL "B&enutzerdefinierter Systemstart", IDC_CBX_SELECTIVE_STARTUP, "Button", 0x50010009, 20, 60, 120, 10
CHECKBOX "D&atei SYSTEM.INI verarbeiten", IDC_CBX_SYSTEM_INI, 30, 80, 110, 10
CHECKBOX "&Systemdienste laden", IDC_CBX_SYSTEM_SERVICE, 30, 95, 90, 10
CHECKBOX "S&ystemstartelemente laden", IDC_CBX_STARTUP_ITEM, 30, 110, 110, 10
END
IDD_FREELDR_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "", IDC_LIST_BOX, "ListBox", 0x50010141, 10, 10, 340, 50, 0x00000200
PUSHBUTTON "&Alle Bootpfade überprüfen", IDC_BTN_CHECK_BOOT_PATH, 10, 65, 90, 12
PUSHBUTTON "A&ls Standard", IDC_BTN_SET_DEFAULT_BOOT, 120, 65, 63, 12
PUSHBUTTON "Nach &oben", IDC_BTN_MOVE_UP_BOOT_OPTION, 203, 65, 63, 12
PUSHBUTTON "Nach &unten", IDC_BTN_MOVE_DOWN_BOOT_OPTION, 286, 65, 63, 12
GROUPBOX "Boot Optionen", -1, 10, 80, 250, 90
CHECKBOX "/SA&FEBOOT", IDC_CBX_SAFE_BOOT, 15, 90, 50, 10
CHECKBOX "/&NOGUIBOOT", IDC_CBX_NO_GUI_BOOT, 15, 105, 55, 10
CHECKBOX "/&BOOTLOG", IDC_CBX_BOOT_LOG, 15, 120, 50, 10
CHECKBOX "/BAS&EVIDEO", IDC_CBX_BASE_VIDEO, 15, 135, 55, 10
CHECKBOX "/S&OS", IDC_CBX_SOS, 15, 150, 50, 10
PUSHBUTTON "E&rweiterte Optionen...", IDC_BTN_ADVANCED_OPTIONS, 100, 150, 90, 12
LTEXT "&Zeitlimit:", -1, 280, 91, 30, 10
EDITTEXT IDC_TXT_BOOT_TIMEOUT, 310, 90, 25, 12, ES_LEFT
LTEXT "Sek.", -1, 340, 91, 15, 10
END
IDD_FREELDR_ADVANCED_PAGE DIALOG DISCARDABLE 0, 0, 175, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CHECKBOX "/&MAXMEM=", IDC_CBX_MAX_MEM, 10, 10, 50, 10
EDITTEXT IDC_TXT_MAX_MEM, 80, 10, 60, 12
CONTROL "",IDC_SCR_MAX_MEM, "msctls_updown32", 0x50000000, 140, 10, 11, 11
CHECKBOX "/&NUMPROC=", IDC_CBX_NUM_PROC, 10, 25, 50, 10
COMBOBOX IDC_DRP_NUM_PROC, 80, 25, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&PCILOCK", IDC_CBX_PCI_LOCK, 10, 40, 50, 10
CHECKBOX "/P&ROFILE", IDC_CBX_PROFILE, 10, 55, 50, 10
CHECKBOX "/&IRQ", IDC_CBX_IRQ, 10, 70, 40, 12
EDITTEXT IDC_TXT_IRQ, 80, 70, 60, 12, ES_LEFT
CHECKBOX "/&DEBUG", IDC_CBX_DEBUG, 10, 85, 40, 10
CHECKBOX "/D&EBUGPORT", IDC_CBX_DEBUG_PORT, 20, 100, 60, 10
COMBOBOX IDC_DRP_DEBUG_PORT, 80, 100, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&BAUDRATE", IDC_CBX_BAUD_RATE, 20, 115, 50, 10
COMBOBOX IDC_DRP_DRP_BAUD_RATE, 80, 115, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&CHANNEL", IDC_CBX_CHANNEL, 20, 130, 50, 10
EDITTEXT IDC_TXT_CHANNEL, 80, 130, 60, 12, ES_LEFT
CONTROL "",IDC_SCR_CHANNEL, "msctls_updown32", 0x50000000, 140, 130, 11, 11
PUSHBUTTON "OK", IDC_OK, 20, 160, 50, 12
PUSHBUTTON "Abbrechen", IDC_CANCEL, 100, 160, 50, 12
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_MSCONFIG "Systemkonfigurationsprogramm"
IDS_TAB_GENERAL "Allgemein"
IDS_TAB_SYSTEM "SYSTEM.INI"
IDS_TAB_FREELDR "FREELDR.INI"
IDS_TAB_SERVICES "Dienste"
IDS_TAB_STARTUP "Systemstart"
IDS_TAB_TOOLS "Tools"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_COLUMN_SERVICE "Dienst"
IDS_SERVICES_COLUMN_REQ "Erforderlich"
IDS_SERVICES_COLUMN_VENDOR "Hersteller"
IDS_SERVICES_COLUMN_STATUS "Status"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLS_COLUMN_NAME "Name"
IDS_TOOLS_COLUMN_DESCR "Beschreibung"
IDS_TOOLS_CMD_NAME "Konsole"
IDS_TOOLS_CMD_DESCR ""
IDS_TOOLS_CMD_CMD "cmd.exe"
IDS_TOOLS_INFO_NAME "Version"
IDS_TOOLS_INFO_DESCR "Zeigt die installierte ReactOS Version an."
IDS_TOOLS_INFO_CMD "winver.exe"
IDS_TOOLS_REGEDIT_NAME "Registrierungs-Editor"
IDS_TOOLS_REGEDIT_DESCR "Öffnet den Registrierungs-Editor."
IDS_TOOLS_REGEDIT_CMD "regedit.exe"
IDS_TOOLS_SYSDM_NAME "Systemeigenschaften"
IDS_TOOLS_SYSDM_DESCR "Zeigt Informationen über diesen Rechner an."
IDS_TOOLS_SYSDM_CMD "control"
IDS_TOOLS_SYSDM_PARAM "sysdm.cpl"
IDS_STARTUP_COLUMN_ELEMENT "Element"
IDS_STARTUP_COLUMN_CMD "Befehl"
IDS_STARTUP_COLUMN_PATH "Pfad"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_STATUS_RUNNING "Gestartet"
IDS_SERVICES_STATUS_STOPPED "Beendet"
IDS_SERVICES_YES "Ja"
IDS_SERVICES_UNKNOWN "Unbekannt"
END

View file

@ -0,0 +1,155 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_MSCONFIG_DIALOG DIALOG DISCARDABLE 0, 0, 378, 220
STYLE DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
CAPTION "System configuration program"
FONT 8, "Tahoma"
BEGIN
CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,2,2,374,195
DEFPUSHBUTTON "OK", IDOK, 211, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Help", IDC_BTN_HELP, 2, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 267, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Apply", IDC_BTN_APPLY, 323, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_STARTUP_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List3",IDC_STARTUP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 148
PUSHBUTTON "&Activate all",IDC_BTN_STARTUP_ACTIVATE,223,155,66,14
PUSHBUTTON "&Deactivate all",IDC_BTN_STARTUP_DEACTIVATE,295,155,66,14
END
IDD_TOOLS_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List2",IDC_TOOLS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 134
EDITTEXT IDC_TOOLS_CMDLINE, 1, 139, 360, 12, ES_READONLY
PUSHBUTTON "&Run", IDC_BTN_RUN, 311, 155, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_SERVICES_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List1",IDC_SERVICES_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,2,1,360,148
PUSHBUTTON "&Activate all",IDC_BTN_SERVICES_ACTIVATE,223,155,66,14
PUSHBUTTON "&Deactivate all",IDC_BTN_SERVICES_DEACTIVATE,295,155,66,14
END
IDD_GENERAL_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
GROUPBOX "Startup Selection", -1, 10, 10, 340, 150
CONTROL "&Normal Startup - load all device drivers and services", IDC_CBX_NORMAL_START, "Button", 0x50010009, 20, 30, 180, 10
CONTROL "&Diagnostic Startup - load basic devices and services only", IDC_CBX_DIAGNOSTIC_START, "Button", 0x50010009, 20, 45, 195, 10
CONTROL "S&elective Startup", IDC_CBX_SELECTIVE_STARTUP, "Button", 0x50010009, 20, 60, 70, 10
CHECKBOX "P&rocess SYSTEM.INI File", IDC_CBX_SYSTEM_INI, 30, 80, 95, 10
CHECKBOX "&Load System Services", IDC_CBX_SYSTEM_SERVICE, 30, 95, 90, 10
CHECKBOX "&L&oad Startup Items", IDC_CBX_STARTUP_ITEM, 30, 110, 75, 10
END
IDD_FREELDR_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "", IDC_LIST_BOX, "ListBox", 0x50010141, 10, 10, 340, 50, 0x00000200
PUSHBUTTON "&Check All Boot Paths", IDC_BTN_CHECK_BOOT_PATH, 10, 65, 70, 12
PUSHBUTTON "&Set as Default", IDC_BTN_SET_DEFAULT_BOOT, 100, 65, 70, 12
PUSHBUTTON "Move &Up", IDC_BTN_MOVE_UP_BOOT_OPTION, 190, 65, 70, 12
PUSHBUTTON "Move &Down", IDC_BTN_MOVE_DOWN_BOOT_OPTION, 280, 65, 70, 12
GROUPBOX "Boot Options", -1, 10, 80, 250, 90
CHECKBOX "/SA&FEBOOT", IDC_CBX_SAFE_BOOT, 15, 90, 50, 10
CHECKBOX "/&NOGUIBOOT", IDC_CBX_NO_GUI_BOOT, 15, 105, 55, 10
CHECKBOX "/&BOOTLOG", IDC_CBX_BOOT_LOG, 15, 120, 50, 10
CHECKBOX "/BAS&EVIDEO", IDC_CBX_BASE_VIDEO, 15, 135, 55, 10
CHECKBOX "/S&OS", IDC_CBX_SOS, 15, 150, 50, 10
PUSHBUTTON "Ad&vanced Options...", IDC_BTN_ADVANCED_OPTIONS, 100, 150, 70, 12
LTEXT "&Timeout:", -1, 280, 91, 30, 10
EDITTEXT IDC_TXT_BOOT_TIMEOUT, 310, 90, 25, 12, ES_LEFT
LTEXT "sec.", -1, 340, 91, 15, 10
END
IDD_FREELDR_ADVANCED_PAGE DIALOG DISCARDABLE 0, 0, 175, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CHECKBOX "/&MAXMEM=", IDC_CBX_MAX_MEM, 10, 10, 50, 10
EDITTEXT IDC_TXT_MAX_MEM, 80, 10, 60, 12
CONTROL "",IDC_SCR_MAX_MEM, "msctls_updown32", 0x50000000, 140, 10, 11, 11
CHECKBOX "/&NUMPROC=", IDC_CBX_NUM_PROC, 10, 25, 50, 10
COMBOBOX IDC_DRP_NUM_PROC, 80, 25, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&PCILOCK", IDC_CBX_PCI_LOCK, 10, 40, 50, 10
CHECKBOX "/P&ROFILE", IDC_CBX_PROFILE, 10, 55, 50, 10
CHECKBOX "/&IRQ", IDC_CBX_IRQ, 10, 70, 40, 12
EDITTEXT IDC_TXT_IRQ, 80, 70, 60, 12, ES_LEFT
CHECKBOX "/&DEBUG", IDC_CBX_DEBUG, 10, 85, 40, 10
CHECKBOX "/D&EBUGPORT", IDC_CBX_DEBUG_PORT, 20, 100, 60, 10
COMBOBOX IDC_DRP_DEBUG_PORT, 80, 100, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&BAUDRATE", IDC_CBX_BAUD_RATE, 20, 115, 50, 10
COMBOBOX IDC_DRP_DRP_BAUD_RATE, 80, 115, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "/&CHANNEL", IDC_CBX_CHANNEL, 20, 130, 50, 10
EDITTEXT IDC_TXT_CHANNEL, 80, 130, 60, 12, ES_LEFT
CONTROL "",IDC_SCR_CHANNEL, "msctls_updown32", 0x50000000, 140, 130, 11, 11
PUSHBUTTON "Ok", IDC_OK, 20, 160, 50, 12
PUSHBUTTON "Cancel", IDC_CANCEL, 100, 160, 50, 12
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_MSCONFIG "System configuration program"
IDS_TAB_GENERAL "General"
IDS_TAB_SYSTEM "SYSTEM.INI"
IDS_TAB_FREELDR "FREELDR.INI"
IDS_TAB_SERVICES "Services"
IDS_TAB_STARTUP "Startup"
IDS_TAB_TOOLS "Tools"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_COLUMN_SERVICE "Service"
IDS_SERVICES_COLUMN_REQ "Required"
IDS_SERVICES_COLUMN_VENDOR "Vendor"
IDS_SERVICES_COLUMN_STATUS "Status"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLS_COLUMN_NAME "Name"
IDS_TOOLS_COLUMN_DESCR "Description"
IDS_TOOLS_CMD_NAME "Console"
IDS_TOOLS_CMD_DESCR ""
IDS_TOOLS_CMD_CMD "cmd.exe"
IDS_TOOLS_INFO_NAME "Version"
IDS_TOOLS_INFO_DESCR "Displays version information."
IDS_TOOLS_INFO_CMD "winver.exe"
IDS_TOOLS_REGEDIT_NAME "Registry-Editor"
IDS_TOOLS_REGEDIT_DESCR "Opens the Registry-Editor."
IDS_TOOLS_REGEDIT_CMD "regedit.exe"
IDS_TOOLS_SYSDM_NAME "System properties"
IDS_TOOLS_SYSDM_DESCR "Shows information about this computer."
IDS_TOOLS_SYSDM_CMD "control"
IDS_TOOLS_SYSDM_PARAM "sysdm.cpl"
IDS_STARTUP_COLUMN_ELEMENT "Element"
IDS_STARTUP_COLUMN_CMD "Command"
IDS_STARTUP_COLUMN_PATH "Path"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_STATUS_RUNNING "Running"
IDS_SERVICES_STATUS_STOPPED "Stopped"
IDS_SERVICES_YES "Yes"
IDS_SERVICES_UNKNOWN "Unknown"
END

View file

@ -0,0 +1,96 @@
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
IDD_MSCONFIG_DIALOG DIALOG DISCARDABLE 0, 0, 378, 220
STYLE DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
CAPTION "Utilitaire de configuration système"
FONT 8, "Tahoma"
BEGIN
CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,2,2,374,195
DEFPUSHBUTTON "OK", IDOK, 211, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Aide", IDC_BTN_HELP, 2, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Annuler", IDCANCEL, 267, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "A&ppliquer", IDC_BTN_APPLY, 323, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_STARTUP_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List3",IDC_STARTUP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 148
PUSHBUTTON "&Activer tout",IDC_BTN_STARTUP_ACTIVATE,223,155,66,14
PUSHBUTTON "&Désactiver tout",IDC_BTN_STARTUP_DEACTIVATE,295,155,66,14
END
IDD_TOOLS_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List2",IDC_TOOLS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 134
EDITTEXT IDC_TOOLS_CMDLINE, 1, 139, 360, 12, ES_READONLY
PUSHBUTTON "&Lancer", IDC_BTN_RUN, 311, 155, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_SERVICES_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List1",IDC_SERVICES_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,2,1,360,148
PUSHBUTTON "&Activer tout",IDC_BTN_SERVICES_ACTIVATE,223,155,66,14
PUSHBUTTON "&Désactiver tout",IDC_BTN_SERVICES_DEACTIVATE,295,155,66,14
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_MSCONFIG "Utilitaire de configuration système"
IDS_TAB_GENERAL "Général"
IDS_TAB_SYSTEM "SYSTEM.INI"
IDS_TAB_FREELDR "FREELDR.INI"
IDS_TAB_SERVICES "Services"
IDS_TAB_STARTUP "Démarrage"
IDS_TAB_TOOLS "Outils"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_COLUMN_SERVICE "Service"
IDS_SERVICES_COLUMN_REQ "Requis"
IDS_SERVICES_COLUMN_VENDOR "Fabricant"
IDS_SERVICES_COLUMN_STATUS "Etat"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLS_COLUMN_NAME "Nom"
IDS_TOOLS_COLUMN_DESCR "Description"
IDS_TOOLS_CMD_NAME "Console"
IDS_TOOLS_CMD_DESCR ""
IDS_TOOLS_CMD_CMD "cmd.exe"
IDS_TOOLS_INFO_NAME "Version"
IDS_TOOLS_INFO_DESCR "Affiche les informations de version."
IDS_TOOLS_INFO_CMD "winver.exe"
IDS_TOOLS_REGEDIT_NAME "Editeur de Registre"
IDS_TOOLS_REGEDIT_DESCR "Ouvre l'éditeur de Registre"
IDS_TOOLS_REGEDIT_CMD "regedit.exe"
IDS_TOOLS_SYSDM_NAME "Propriétés système"
IDS_TOOLS_SYSDM_DESCR "Affiche/modifie des information a propos de l'ordinateur."
IDS_TOOLS_SYSDM_CMD "control"
IDS_TOOLS_SYSDM_PARAM "sysdm.cpl"
IDS_STARTUP_COLUMN_ELEMENT "Elément"
IDS_STARTUP_COLUMN_CMD "Commande"
IDS_STARTUP_COLUMN_PATH "Chemin"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_STATUS_RUNNING "En cours"
IDS_SERVICES_STATUS_STOPPED "Arrêté"
IDS_SERVICES_YES "Oui"
IDS_SERVICES_UNKNOWN "Inconnu"
END

View file

@ -0,0 +1,98 @@
// Hungarian resources, by Robert Horvath (Talley at cubeclub.hu)
LANGUAGE LANG_HUNGARIAN, SUBLANG_NEUTRAL
IDD_MSCONFIG_DIALOG DIALOG DISCARDABLE 0, 0, 378, 220
STYLE DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
CAPTION "Rendszerbeállítások"
FONT 8, "Tahoma"
BEGIN
CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,2,2,374,195
DEFPUSHBUTTON "OK", IDOK, 211, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Súgó", IDC_BTN_HELP, 2, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Mégse", IDCANCEL, 267, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Alkalmaz", IDC_BTN_APPLY, 323, 201, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_STARTUP_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List3",IDC_STARTUP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 148
PUSHBUTTON "Mindet &bekapcsol",IDC_BTN_STARTUP_ACTIVATE,223,155,66,14
PUSHBUTTON "Mindet &kikapcsol",IDC_BTN_STARTUP_DEACTIVATE,295,155,66,14
END
IDD_TOOLS_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List2",IDC_TOOLS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 2, 1, 360, 134
EDITTEXT IDC_TOOLS_CMDLINE, 1, 139, 360, 12, ES_READONLY
PUSHBUTTON "&Futtat", IDC_BTN_RUN, 311, 155, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_SERVICES_PAGE DIALOG DISCARDABLE 0, 0, 362, 175
STYLE DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "Tahoma"
BEGIN
CONTROL "List1",IDC_SERVICES_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,2,1,360,148
PUSHBUTTON "Mindet &bekapcsol",IDC_BTN_SERVICES_ACTIVATE,223,155,66,14
PUSHBUTTON "Mindet &kikapcsol",IDC_BTN_SERVICES_DEACTIVATE,295,155,66,14
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_MSCONFIG "Rendszerkonfiguráciüs segédprogram"
IDS_TAB_GENERAL "Általános"
IDS_TAB_SYSTEM "SYSTEM.INI"
IDS_TAB_FREELDR "FREELDR.INI"
IDS_TAB_SERVICES "Szolgáltatások"
IDS_TAB_STARTUP "Automatikus indítás"
IDS_TAB_TOOLS "Segédprogramok"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_COLUMN_SERVICE "Szolgálgatás"
IDS_SERVICES_COLUMN_REQ "Lényeges"
IDS_SERVICES_COLUMN_VENDOR "Gyártó"
IDS_SERVICES_COLUMN_STATUS "Állapot"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLS_COLUMN_NAME "Név"
IDS_TOOLS_COLUMN_DESCR "Description"
IDS_TOOLS_CMD_NAME "Konzol"
IDS_TOOLS_CMD_DESCR ""
IDS_TOOLS_CMD_CMD "cmd.exe"
IDS_TOOLS_INFO_NAME "Verzió"
IDS_TOOLS_INFO_DESCR "Megjeleníti a verzió-információkat."
IDS_TOOLS_INFO_CMD "winver.exe"
IDS_TOOLS_REGEDIT_NAME "Rendszerleíróadatbázis-szerkesztõ"
IDS_TOOLS_REGEDIT_DESCR "Megnyitja a szerkesztõ programot."
IDS_TOOLS_REGEDIT_CMD "regedit.exe"
IDS_TOOLS_SYSDM_NAME "Rendszertulajdonságok"
IDS_TOOLS_SYSDM_DESCR "Megjeleníti a számítógép információkat."
IDS_TOOLS_SYSDM_CMD "control"
IDS_TOOLS_SYSDM_PARAM "sysdm.cpl"
IDS_STARTUP_COLUMN_ELEMENT "Element"
IDS_STARTUP_COLUMN_CMD "Parancs"
IDS_STARTUP_COLUMN_PATH "Elérési út"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_STATUS_RUNNING "Fut"
IDS_SERVICES_STATUS_STOPPED "Leállítva"
IDS_SERVICES_YES "Igen"
IDS_SERVICES_UNKNOWN "Ismeretlen"
END

View file

@ -0,0 +1,17 @@
#include <precomp.h>
HWND hFreeLdrPage;
HWND hFreeLdrDialog;
INT_PTR CALLBACK
FreeLdrPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
hFreeLdrDialog = hDlg;
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
return TRUE;
}
return 0;
}

View file

@ -0,0 +1,3 @@
extern HWND hFreeLdrPage;
INT_PTR CALLBACK FreeLdrPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -0,0 +1,17 @@
#include <precomp.h>
HWND hGeneralPage;
HWND hGeneralDialog;
INT_PTR CALLBACK
GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
hGeneralDialog = hDlg;
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
return TRUE;
}
return 0;
}

View file

@ -0,0 +1,3 @@
extern HWND hGeneralPage;
INT_PTR CALLBACK GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -0,0 +1,198 @@
#include <precomp.h>
HINSTANCE hInst = 0;
HWND hMainWnd; /* Main Window */
HWND hTabWnd; /* Tab Control Window */
void MsConfig_OnTabWndSelChange(void);
BOOL OnCreate(HWND hWnd)
{
TCHAR szTemp[256];
TCITEM item;
hTabWnd = GetDlgItem(hWnd, IDC_TAB);
hGeneralPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_GENERAL_PAGE), hWnd, GeneralPageWndProc);
hSystemPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SYSTEM_PAGE), hWnd, SystemPageWndProc);
hFreeLdrPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_FREELDR_PAGE), hWnd, FreeLdrPageWndProc);
hServicesPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SERVICES_PAGE), hWnd, ServicesPageWndProc);
hStartupPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STARTUP_PAGE), hWnd, StartupPageWndProc);
hToolsPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_TOOLS_PAGE), hWnd, ToolsPageWndProc);
LoadString(hInst, IDS_MSCONFIG, szTemp, 256);
SetWindowText(hWnd, szTemp);
// Insert Tab Pages
LoadString(hInst, IDS_TAB_GENERAL, szTemp, 256);
memset(&item, 0, sizeof(TCITEM));
item.mask = TCIF_TEXT;
item.pszText = szTemp;
TabCtrl_InsertItem(hTabWnd, 0, &item);
LoadString(hInst, IDS_TAB_SYSTEM, szTemp, 256);
memset(&item, 0, sizeof(TCITEM));
item.mask = TCIF_TEXT;
item.pszText = szTemp;
TabCtrl_InsertItem(hTabWnd, 1, &item);
LoadString(hInst, IDS_TAB_FREELDR, szTemp, 256);
memset(&item, 0, sizeof(TCITEM));
item.mask = TCIF_TEXT;
item.pszText = szTemp;
TabCtrl_InsertItem(hTabWnd, 2, &item);
LoadString(hInst, IDS_TAB_SERVICES, szTemp, 256);
memset(&item, 0, sizeof(TCITEM));
item.mask = TCIF_TEXT;
item.pszText = szTemp;
TabCtrl_InsertItem(hTabWnd, 3, &item);
LoadString(hInst, IDS_TAB_STARTUP, szTemp, 256);
memset(&item, 0, sizeof(TCITEM));
item.mask = TCIF_TEXT;
item.pszText = szTemp;
TabCtrl_InsertItem(hTabWnd, 4, &item);
LoadString(hInst, IDS_TAB_TOOLS, szTemp, 256);
memset(&item, 0, sizeof(TCITEM));
item.mask = TCIF_TEXT;
item.pszText = szTemp;
TabCtrl_InsertItem(hTabWnd, 5, &item);
MsConfig_OnTabWndSelChange();
return TRUE;
}
void MsConfig_OnTabWndSelChange(void)
{
switch (TabCtrl_GetCurSel(hTabWnd)) {
case 0: //General
ShowWindow(hGeneralPage, SW_SHOW);
ShowWindow(hSystemPage, SW_HIDE);
ShowWindow(hFreeLdrPage, SW_HIDE);
ShowWindow(hServicesPage, SW_HIDE);
ShowWindow(hStartupPage, SW_HIDE);
ShowWindow(hToolsPage, SW_HIDE);
BringWindowToTop(hGeneralPage);
break;
case 1: //SYSTEM.INI
ShowWindow(hGeneralPage, SW_HIDE);
ShowWindow(hSystemPage, SW_SHOW);
ShowWindow(hToolsPage, SW_HIDE);
ShowWindow(hStartupPage, SW_HIDE);
ShowWindow(hFreeLdrPage, SW_HIDE);
ShowWindow(hServicesPage, SW_HIDE);
BringWindowToTop(hSystemPage);
break;
case 2: //Freeldr
ShowWindow(hGeneralPage, SW_HIDE);
ShowWindow(hSystemPage, SW_HIDE);
ShowWindow(hFreeLdrPage, SW_SHOW);
ShowWindow(hServicesPage, SW_HIDE);
ShowWindow(hStartupPage, SW_HIDE);
ShowWindow(hToolsPage, SW_HIDE);
BringWindowToTop(hFreeLdrPage);
break;
case 3: //Services
ShowWindow(hGeneralPage, SW_HIDE);
ShowWindow(hSystemPage, SW_HIDE);
ShowWindow(hFreeLdrPage, SW_HIDE);
ShowWindow(hServicesPage, SW_SHOW);
ShowWindow(hStartupPage, SW_HIDE);
ShowWindow(hToolsPage, SW_HIDE);
BringWindowToTop(hServicesPage);
break;
case 4: //startup
ShowWindow(hGeneralPage, SW_HIDE);
ShowWindow(hSystemPage, SW_HIDE);
ShowWindow(hFreeLdrPage, SW_HIDE);
ShowWindow(hServicesPage, SW_HIDE);
ShowWindow(hStartupPage, SW_SHOW);
ShowWindow(hToolsPage, SW_HIDE);
BringWindowToTop(hStartupPage);
break;
case 5: //Tools
ShowWindow(hGeneralPage, SW_HIDE);
ShowWindow(hSystemPage, SW_HIDE);
ShowWindow(hFreeLdrPage, SW_HIDE);
ShowWindow(hServicesPage, SW_HIDE);
ShowWindow(hStartupPage, SW_HIDE);
ShowWindow(hToolsPage, SW_SHOW);
BringWindowToTop(hToolsPage);
break;
}
}
/* Message handler for dialog box. */
INT_PTR CALLBACK
MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
int idctrl;
LPNMHDR pnmh;
switch (message) {
case WM_INITDIALOG:
hMainWnd = hDlg;
return OnCreate(hDlg);
case WM_COMMAND:
if (LOWORD(wParam) == IDOK) {
//MsConfig_OnSaveChanges();
}
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_NOTIFY:
idctrl = (int)wParam;
pnmh = (LPNMHDR)lParam;
if ((pnmh->hwndFrom == hTabWnd) &&
(pnmh->idFrom == IDC_TAB) &&
(pnmh->code == TCN_SELCHANGE))
{
MsConfig_OnTabWndSelChange();
}
break;
case WM_DESTROY:
DestroyWindow(hToolsPage);
DestroyWindow(hGeneralPage);
DestroyWindow(hServicesPage);
DestroyWindow(hStartupPage);
DestroyWindow(hFreeLdrPage);
DestroyWindow(hSystemPage);
return DefWindowProc(hDlg, message, wParam, lParam);
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
INITCOMMONCONTROLSEX InitControls;
InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
InitControls.dwICC = ICC_TAB_CLASSES | ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&InitControls);
hInst = hInstance;
DialogBox(hInst, (LPCTSTR)IDD_MSCONFIG_DIALOG, NULL, MsConfigWndProc);
return 0;
}
/* EOF */

View file

@ -0,0 +1,2 @@
extern HINSTANCE hInst;

View file

@ -0,0 +1,19 @@
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#define REACTOS_VERSION_DLL
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Systemconfiguration Tool\0"
#define REACTOS_STR_INTERNAL_NAME "msconfig\0"
#define REACTOS_STR_ORIGINAL_FILENAME "msconfig.exe\0"
#include <reactos/version.rc>
#include "De.rc"
#include "En.rc"
#include "Fr.rc"
#include "Hu.rc"

View file

@ -0,0 +1,26 @@
<module name="msconfig" type="win32gui" installbase="system32" installname="msconfig.exe">
<include base="msconfig">.</include>
<define name="UNICODE" />
<define name="_UNICODE" />
<define name="__REACTOS__" />
<define name="__USE_W32API" />
<define name="_WIN32_IE">0x600</define>
<define name="_WIN32_WINNT">0x501</define>
<library>kernel32</library>
<library>user32</library>
<library>advapi32</library>
<library>version</library>
<library>comctl32</library>
<library>shell32</library>
<compilationunit name="unit.c">
<file>toolspage.c</file>
<file>srvpage.c</file>
<file>systempage.c</file>
<file>startuppage.c</file>
<file>freeldrpage.c</file>
<file>generalpage.c</file>
<file>msconfig.c</file>
</compilationunit>
<file>msconfig.rc</file>
<pch>precomp.h</pch>
</module>

View file

@ -0,0 +1,19 @@
#include <windows.h>
#define NTOS_MODE_USER
#include <commctrl.h>
#include <winuser.h>
#include <tchar.h>
#include "resource.h"
#include "msconfig.h"
#include "toolspage.h"
#include "srvpage.h"
#include "startuppage.h"
#include "freeldrpage.h"
#include "systempage.h"
#include "generalpage.h"
#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383

View file

@ -0,0 +1,104 @@
#define IDD_MSCONFIG_DIALOG 101
#define IDD_TOOLS_PAGE 102
#define IDD_SERVICES_PAGE 103
#define IDD_GENERAL_PAGE 104
#define IDD_STARTUP_PAGE 105
#define IDD_FREELDR_PAGE 106
#define IDD_SYSTEM_PAGE 107
#define IDD_FREELDR_ADVANCED_PAGE 108
#define IDC_TAB 1001
#define IDC_BTN_APPLY 1002
#define IDC_BTN_HELP 1003
#define IDC_TOOLS_CMDLINE 1004
#define IDC_BTN_RUN 1005
#define IDC_SERVICES_LIST 1006
#define IDC_TOOLS_LIST 1007
#define IDC_STARTUP_LIST 1008
#define IDC_BTN_SERVICES_ACTIVATE 1009
#define IDC_BTN_SERVICES_DEACTIVATE 1010
#define IDC_BTN_STARTUP_ACTIVATE 1011
#define IDC_BTN_STARTUP_DEACTIVATE 1012
#define IDC_CBX_NORMAL_START 1013
#define IDC_CBX_DIAGNOSTIC_START 1014
#define IDC_CBX_SELECTIVE_STARTUP 1015
#define IDC_CBX_SYSTEM_INI 1016
#define IDC_CBX_SYSTEM_SERVICE 1017
#define IDC_CBX_STARTUP_ITEM 1018
#define IDC_LIST_BOX 1019
#define IDC_BTN_CHECK_BOOT_PATH 1020
#define IDC_BTN_SET_DEFAULT_BOOT 1021
#define IDC_BTN_MOVE_UP_BOOT_OPTION 1022
#define IDC_BTN_MOVE_DOWN_BOOT_OPTION 1023
#define IDC_CBX_SAFE_BOOT 1024
#define IDC_CBX_NO_GUI_BOOT 1025
#define IDC_CBX_BOOT_LOG 1026
#define IDC_CBX_BASE_VIDEO 1027
#define IDC_CBX_SOS 1028
#define IDC_BTN_ADVANCED_OPTIONS 1029
#define IDC_TXT_BOOT_TIMEOUT 1030
#define IDC_CBX_MAX_MEM 1031
#define IDC_TXT_MAX_MEM 1032
#define IDC_SCR_MAX_MEM 1033
#define IDC_CBX_NUM_PROC 1034
#define IDC_DRP_NUM_PROC 1035
#define IDC_CBX_PCI_LOCK 1036
#define IDC_CBX_PROFILE 1037
#define IDC_CBX_IRQ 1038
#define IDC_TXT_IRQ 1039
#define IDC_CBX_DEBUG 1040
#define IDC_CBX_DEBUG_PORT 1041
#define IDC_DRP_DEBUG_PORT 1042
#define IDC_CBX_BAUD_RATE 1043
#define IDC_DRP_DRP_BAUD_RATE 1044
#define IDC_CBX_CHANNEL 1045
#define IDC_TXT_CHANNEL 1046
#define IDC_SCR_CHANNEL 1047
#define IDC_OK 1048
#define IDC_CANCEL 1049
#define IDS_TAB_TOOLS 2001
#define IDS_TAB_SYSTEM 2002
#define IDS_TAB_FREELDR 2003
#define IDS_TAB_STARTUP 2004
#define IDS_TAB_SERVICES 2005
#define IDS_TAB_GENERAL 2006
#define IDS_TOOLS_COLUMN_NAME 2010
#define IDS_TOOLS_COLUMN_DESCR 2011
#define IDS_SERVICES_COLUMN_SERVICE 2012
#define IDS_SERVICES_COLUMN_REQ 2013
#define IDS_SERVICES_COLUMN_VENDOR 2014
#define IDS_SERVICES_COLUMN_STATUS 2015
#define IDS_STARTUP_COLUMN_ELEMENT 2016
#define IDS_STARTUP_COLUMN_CMD 2017
#define IDS_STARTUP_COLUMN_PATH 2018
#define IDS_TOOLS_CMD_NAME 2100
#define IDS_TOOLS_CMD_DESCR 2101
#define IDS_TOOLS_CMD_CMD 2102
#define IDS_TOOLS_CMD_PARAM 2103
#define IDS_TOOLS_INFO_NAME 2104
#define IDS_TOOLS_INFO_DESCR 2105
#define IDS_TOOLS_INFO_CMD 2106
#define IDS_TOOLS_INFO_PARAM 2107
#define IDS_TOOLS_REGEDIT_NAME 2108
#define IDS_TOOLS_REGEDIT_DESCR 2109
#define IDS_TOOLS_REGEDIT_CMD 2110
#define IDS_TOOLS_REGEDIT_PARAM 2111
#define IDS_TOOLS_SYSDM_NAME 2112
#define IDS_TOOLS_SYSDM_DESCR 2113
#define IDS_TOOLS_SYSDM_CMD 2114
#define IDS_TOOLS_SYSDM_PARAM 2115
#define IDS_SERVICES_STATUS_STOPPED 2200
#define IDS_SERVICES_STATUS_RUNNING 2201
#define IDS_SERVICES_YES 2202
#define IDS_SERVICES_UNKNOWN 2203
#define IDS_MSCONFIG 3000
/* EOF */

View file

@ -0,0 +1,251 @@
#include <precomp.h>
HWND hServicesPage;
HWND hServicesListCtrl;
HWND hServicesDialog;
void GetServices ( void );
INT_PTR CALLBACK
ServicesPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
LV_COLUMN column;
TCHAR szTemp[256];
DWORD dwStyle;
switch (message) {
case WM_INITDIALOG:
hServicesListCtrl = GetDlgItem(hDlg, IDC_SERVICES_LIST);
hServicesDialog = hDlg;
dwStyle = (DWORD) SendMessage(hServicesListCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
dwStyle = dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES;
SendMessage(hServicesListCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
// Initialize the application page's controls
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_SERVICES_COLUMN_SERVICE, szTemp, 256);
column.pszText = szTemp;
column.cx = 200;
ListView_InsertColumn(hServicesListCtrl, 0, &column);
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_SERVICES_COLUMN_REQ, szTemp, 256);
column.pszText = szTemp;
column.cx = 70;
ListView_InsertColumn(hServicesListCtrl, 1, &column);
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_SERVICES_COLUMN_VENDOR, szTemp, 256);
column.pszText = szTemp;
column.cx = 200;
ListView_InsertColumn(hServicesListCtrl, 2, &column);
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_SERVICES_COLUMN_STATUS, szTemp, 256);
column.pszText = szTemp;
column.cx = 70;
ListView_InsertColumn(hServicesListCtrl, 3, &column);
GetServices();
return TRUE;
}
return 0;
}
void
GetServices ( void )
{
LV_ITEM item;
WORD wCodePage;
WORD wLangID;
SC_HANDLE ScHandle;
SC_HANDLE hService;
DWORD BytesNeeded = 0;
DWORD ResumeHandle = 0;
DWORD NumServices = 0;
DWORD dwHandle, dwLen;
size_t Index;
UINT BufLen;
TCHAR szStatus[128];
TCHAR* lpData;
TCHAR* lpBuffer;
TCHAR szStrFileInfo[80];
TCHAR FileName[MAX_PATH];
LPVOID pvData;
LPSERVICE_FAILURE_ACTIONS pServiceFailureActions = NULL;
LPQUERY_SERVICE_CONFIG pServiceConfig = NULL;
ENUM_SERVICE_STATUS_PROCESS *pServiceStatus = NULL;
ScHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
if (ScHandle != INVALID_HANDLE_VALUE)
{
if (EnumServicesStatusEx(ScHandle, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, (LPBYTE)pServiceStatus, 0, &BytesNeeded, &NumServices, &ResumeHandle, 0) == 0)
{
/* Call function again if required size was returned */
if (GetLastError() == ERROR_MORE_DATA)
{
/* reserve memory for service info array */
pServiceStatus = (ENUM_SERVICE_STATUS_PROCESS *) HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (!pServiceStatus)
return;
/* fill array with service info */
if (EnumServicesStatusEx(ScHandle, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, (LPBYTE)pServiceStatus, BytesNeeded, &BytesNeeded, &NumServices, &ResumeHandle, 0) == 0)
{
HeapFree(GetProcessHeap(), 0, pServiceStatus);
return;
}
}
else /* exit on failure */
{
return;
}
}
if (NumServices)
{
if (!pServiceStatus)
return;
for (Index = 0; Index < NumServices; Index++)
{
memset(&item, 0, sizeof(LV_ITEM));
item.mask = LVIF_TEXT;
item.iImage = 0;
item.pszText = pServiceStatus[Index].lpDisplayName;
item.iItem = ListView_GetItemCount(hServicesListCtrl);
item.lParam = 0;
item.iItem = ListView_InsertItem(hServicesListCtrl, &item);
BytesNeeded = 0;
hService = OpenService(ScHandle, pServiceStatus[Index].lpServiceName, SC_MANAGER_CONNECT);
if (hService != INVALID_HANDLE_VALUE)
{
/* check if service is required by the system*/
if (!QueryServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, (LPBYTE)pServiceFailureActions, 0, &BytesNeeded))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
pServiceFailureActions = (LPSERVICE_FAILURE_ACTIONS) HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceFailureActions == NULL)
return;
if (!QueryServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, (LPBYTE)pServiceFailureActions, BytesNeeded, &BytesNeeded))
{
HeapFree(GetProcessHeap(), 0, pServiceFailureActions);
return;
}
}
else /* exit on failure */
{
return;
}
}
if (pServiceFailureActions->cActions)
{
if (pServiceFailureActions->lpsaActions[0].Type == SC_ACTION_REBOOT)
{
LoadString(hInst, IDS_SERVICES_YES, szStatus, 128);
item.pszText = szStatus;
item.iSubItem = 1;
SendMessage(hServicesListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
}
if (pServiceFailureActions != NULL)
{
HeapFree(GetProcessHeap(), 0, pServiceFailureActions);
pServiceFailureActions = NULL;
}
/* get vendor of service binary */
BytesNeeded = 0;
if (!QueryServiceConfig(hService, pServiceConfig, 0, &BytesNeeded))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
pServiceConfig = (LPQUERY_SERVICE_CONFIG) HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceConfig == NULL)
return;
if (!QueryServiceConfig(hService, pServiceConfig, BytesNeeded, &BytesNeeded))
{
HeapFree(GetProcessHeap(), 0, pServiceConfig);
return;
}
}
else /* exit on failure */
{
return;
}
}
memset(&FileName, 0, MAX_PATH);
if (_tcscspn(pServiceConfig->lpBinaryPathName, _T("\"")))
{
_tcsncpy(FileName, pServiceConfig->lpBinaryPathName, _tcscspn(pServiceConfig->lpBinaryPathName, _T(" ")) );
}
else
{
_tcscpy(FileName, pServiceConfig->lpBinaryPathName);
}
HeapFree(GetProcessHeap(), 0, pServiceConfig);
pServiceConfig = NULL;
dwLen = GetFileVersionInfoSize(FileName, &dwHandle);
if (dwLen)
{
lpData = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, dwLen);
if (lpData == NULL)
return;
if (!GetFileVersionInfo (FileName, dwHandle, dwLen, lpData)) {
HeapFree(GetProcessHeap(), 0, lpData);
return;
}
if (VerQueryValue(lpData, _T("\\VarFileInfo\\Translation"), &pvData, (PUINT) &BufLen))
{
wCodePage = LOWORD(*(DWORD*) pvData);
wLangID = HIWORD(*(DWORD*) pvData);
wsprintf(szStrFileInfo, _T("StringFileInfo\\%04X%04X\\CompanyName"), wCodePage, wLangID);
}
if (VerQueryValue (lpData, szStrFileInfo, (LPVOID) &lpBuffer, (PUINT) &BufLen)) {
item.pszText = lpBuffer;
item.iSubItem = 2;
SendMessage(hServicesListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
HeapFree(GetProcessHeap(), 0, lpData);
}
else
{
LoadString(hInst, IDS_SERVICES_UNKNOWN, szStatus, 128);
item.pszText = szStatus;
item.iSubItem = 2;
SendMessage(hServicesListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
CloseServiceHandle(hService);
}
LoadString(hInst, ((pServiceStatus[Index].ServiceStatusProcess.dwCurrentState == SERVICE_STOPPED) ? IDS_SERVICES_STATUS_STOPPED : IDS_SERVICES_STATUS_RUNNING), szStatus, 128);
item.pszText = szStatus;
item.iSubItem = 3;
SendMessage(hServicesListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
}
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(ScHandle);
}
}

View file

@ -0,0 +1,4 @@
extern HWND hServicesPage;
extern HWND hServicesListCtrl;
INT_PTR CALLBACK ServicesPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -0,0 +1,123 @@
#include <precomp.h>
HWND hStartupPage;
HWND hStartupListCtrl;
HWND hStartupDialog;
void GetAutostartEntriesFromRegistry ( HKEY hRootKey, TCHAR* KeyName );
INT_PTR CALLBACK
StartupPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
LV_COLUMN column;
TCHAR szTemp[256];
DWORD dwStyle;
switch (message) {
case WM_INITDIALOG:
hStartupListCtrl = GetDlgItem(hDlg, IDC_STARTUP_LIST);
hStartupDialog = hDlg;
dwStyle = (DWORD) SendMessage(hStartupListCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
dwStyle = dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES;
SendMessage(hStartupListCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
// Initialize the application page's controls
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_STARTUP_COLUMN_ELEMENT, szTemp, 256);
column.pszText = szTemp;
column.cx = 150;
ListView_InsertColumn(hStartupListCtrl, 0, &column);
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_STARTUP_COLUMN_CMD, szTemp, 256);
column.pszText = szTemp;
column.cx = 150;
ListView_InsertColumn(hStartupListCtrl, 1, &column);
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_STARTUP_COLUMN_PATH, szTemp, 256);
column.pszText = szTemp;
column.cx = 250;
ListView_InsertColumn(hStartupListCtrl, 2, &column);
GetAutostartEntriesFromRegistry(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
GetAutostartEntriesFromRegistry(HKEY_CURRENT_USER, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
//FIXME: What about HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
//FIXME: Common Startup (startmenu)
return TRUE;
}
return 0;
}
void
GetAutostartEntriesFromRegistry ( HKEY hRootKey, TCHAR* KeyName )
{
HKEY hKey;
DWORD Index, dwValues, retVal, dwType;
DWORD dwValueLength, dwDataLength = MAX_VALUE_NAME;
TCHAR* Data;
TCHAR lpValueName[MAX_KEY_LENGTH];
TCHAR Path[MAX_KEY_LENGTH + 5];
LV_ITEM item;
if (RegOpenKeyEx(hRootKey, KeyName, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValues, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
for (Index = 0, retVal = ERROR_SUCCESS; Index < dwValues; Index++)
{
dwValueLength = MAX_KEY_LENGTH;
dwDataLength = MAX_VALUE_NAME;
Data = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, MAX_VALUE_NAME * sizeof(TCHAR));
if (Data == NULL)
break;
retVal = RegEnumValue(hKey, Index, lpValueName, &dwValueLength, NULL, &dwType, (LPBYTE)Data, &dwDataLength);
if (retVal == ERROR_SUCCESS)
{
memset(&item, 0, sizeof(LV_ITEM));
item.mask = LVIF_TEXT;
item.iImage = 0;
item.pszText = lpValueName;
item.iItem = ListView_GetItemCount(hStartupListCtrl);
item.lParam = 0;
ListView_InsertItem(hStartupListCtrl, &item);
if (dwType == REG_SZ)
{
GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
item.pszText = Data;
item.iSubItem = 1;
SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
switch (PtrToLong(hRootKey))
{
case PtrToLong(HKEY_LOCAL_MACHINE):
_tcscpy(Path, _T("HKLM\\\0"));
break;
case PtrToLong(HKEY_CURRENT_USER):
_tcscpy(Path, _T("HKCU\\\0"));
break;
default:
_tcscpy(Path, _T("\0"));
}
_tcscat(Path, KeyName);
item.pszText = Path;
item.iSubItem = 2;
SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
HeapFree(GetProcessHeap(), 0, Data);
}
}
}
RegCloseKey(hKey);
}
}

View file

@ -0,0 +1,4 @@
extern HWND hStartupPage;
extern HWND hStartupPageListCtrl;
INT_PTR CALLBACK StartupPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -0,0 +1,17 @@
#include <precomp.h>
HWND hSystemPage;
HWND hSystemDialog;
INT_PTR CALLBACK
SystemPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
hSystemDialog = hDlg;
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
return TRUE;
}
return 0;
}

View file

@ -0,0 +1,3 @@
extern HWND hSystemPage;
INT_PTR CALLBACK SystemPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -0,0 +1,124 @@
#include <precomp.h>
HWND hToolsPage;
HWND hToolsListCtrl;
HWND hToolsDialog;
void AddItem ( DWORD, DWORD, DWORD, DWORD );
void FillListView ( void );
DWORD ListItems_Cmds[20];
DWORD ListItems_Params[20];
void AddItem ( DWORD name_id, DWORD descr_id, DWORD cmd_id , DWORD param_id ) {
TCHAR szTemp[256];
LV_ITEM item;
LoadString(hInst, name_id, szTemp, 256);
memset(&item, 0, sizeof(LV_ITEM));
item.mask = LVIF_TEXT;
item.iImage = 0;
item.pszText = szTemp;
item.iItem = ListView_GetItemCount(hToolsListCtrl);
item.lParam = 0;
ListView_InsertItem(hToolsListCtrl, &item);
ListItems_Cmds[item.iItem] = cmd_id;
ListItems_Params[item.iItem] = param_id;
LoadString(hInst, descr_id, szTemp, 256);
item.pszText = szTemp;
item.iSubItem = 1;
SendMessage(hToolsListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
void FillListView ( void ) {
AddItem(IDS_TOOLS_CMD_NAME, IDS_TOOLS_CMD_DESCR, IDS_TOOLS_CMD_CMD, IDS_TOOLS_CMD_PARAM);
AddItem(IDS_TOOLS_REGEDIT_NAME, IDS_TOOLS_REGEDIT_DESCR, IDS_TOOLS_REGEDIT_CMD,IDS_TOOLS_REGEDIT_PARAM);
AddItem(IDS_TOOLS_SYSDM_NAME, IDS_TOOLS_SYSDM_DESCR, IDS_TOOLS_SYSDM_CMD, IDS_TOOLS_SYSDM_PARAM);
AddItem(IDS_TOOLS_INFO_NAME, IDS_TOOLS_INFO_DESCR, IDS_TOOLS_INFO_CMD, IDS_TOOLS_INFO_PARAM);
}
INT_PTR CALLBACK
ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
LV_COLUMN column;
TCHAR szTemp[256];
TCHAR szTemp2[256];
LPNMITEMACTIVATE lpnmitem;
LPNMHDR nmh;
DWORD dwStyle;
switch (message) {
case WM_INITDIALOG:
hToolsListCtrl = GetDlgItem(hDlg, IDC_TOOLS_LIST);
hToolsDialog = hDlg;
dwStyle = (DWORD) SendMessage(hToolsListCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
dwStyle = dwStyle | LVS_EX_FULLROWSELECT;
SendMessage(hToolsListCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
// Initialize the application page's controls
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_TOOLS_COLUMN_NAME, szTemp, 256);
column.pszText = szTemp;
column.cx = 150;
ListView_InsertColumn(hToolsListCtrl, 0, &column);
column.mask = LVCF_TEXT | LVCF_WIDTH;
LoadString(hInst, IDS_TOOLS_COLUMN_DESCR, szTemp, 256);
column.pszText = szTemp;
column.cx = 500;
ListView_InsertColumn(hToolsListCtrl, 1, &column);
FillListView();
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BTN_RUN:
if (ListView_GetSelectionMark(hToolsListCtrl) != -1) {
LoadString(hInst, ListItems_Cmds[ListView_GetSelectionMark(hToolsListCtrl)], szTemp, 256);
LoadString(hInst, ListItems_Params[ListView_GetSelectionMark(hToolsListCtrl)], szTemp2, 256);
ShellExecute(0, _T("open"), szTemp, szTemp2, _T(""), SW_NORMAL);
}
}
break;
case WM_NOTIFY:
nmh = (LPNMHDR) lParam;
if (nmh->hwndFrom == hToolsListCtrl)
{
switch (nmh->code)
{
case NM_CLICK:
lpnmitem = (LPNMITEMACTIVATE) lParam;
if (lpnmitem->iItem > -1) {
LoadString(hInst, ListItems_Cmds[lpnmitem->iItem], szTemp, 256);
LoadString(hInst, ListItems_Params[lpnmitem->iItem], szTemp2, 256);
_tcscat(szTemp, _T(" "));
_tcscat(szTemp, szTemp2);
SendDlgItemMessage(hToolsDialog, IDC_TOOLS_CMDLINE, WM_SETTEXT, 0, (LPARAM) szTemp);
}
break;
case NM_DBLCLK:
lpnmitem = (LPNMITEMACTIVATE) lParam;
if (lpnmitem->iItem > -1) {
LoadString(hInst, ListItems_Cmds[lpnmitem->iItem], szTemp, 256);
LoadString(hInst, ListItems_Params[lpnmitem->iItem], szTemp2, 256);
ShellExecute(0, _T("open"), szTemp, szTemp2, _T(""), SW_NORMAL);
}
break;
}
}
break;
}
return 0;
}

View file

@ -0,0 +1,5 @@
extern HWND hToolsPage;
extern HWND hToolsListCtrl;
INT_PTR CALLBACK ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

View file

@ -0,0 +1,61 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS SC utility
* FILE: subsys/system/sc/control.c
* PURPOSE: control ReactOS services
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:
* Ged Murphy 20/10/05 Created
*
*/
#include "sc.h"
/*
* handles the following commands:
* control, continue, interrogate, pause, stop
*/
BOOL Control(DWORD Control, LPCTSTR ServiceName, LPCTSTR *Args)
{
SC_HANDLE hSc;
SERVICE_STATUS Status;
#ifdef SCDBG
/* testing */
_tprintf(_T("service to control - %s\n\n"), ServiceName);
_tprintf(_T("command - %lu\n\n"), Control);
_tprintf(_T("Arguments :\n"));
while (*Args)
{
printf("%s\n", *Args);
Args++;
}
#endif /* SCDBG */
hSc = OpenService(hSCManager, ServiceName,
SERVICE_INTERROGATE | SERVICE_PAUSE_CONTINUE |
SERVICE_STOP | SERVICE_USER_DEFINED_CONTROL |
SERVICE_QUERY_STATUS);
if (hSc == NULL)
{
_tprintf(_T("openService failed\n"));
ReportLastError();
return FALSE;
}
if (! ControlService(hSc, Control, &Status))
{
_tprintf(_T("[SC] controlService FAILED %lu:\n\n"), GetLastError());
ReportLastError();
return FALSE;
}
CloseServiceHandle(hSc);
/* print the status information */
return TRUE;
}

View file

@ -0,0 +1,58 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS SC utility
* FILE: subsys/system/sc/create.c
* PURPOSE: control ReactOS services
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:
* Ged Murphy 20/10/05 Created
*
*/
#include "sc.h"
BOOL Create(LPCTSTR ServiceName, LPCTSTR *ServiceArgs)
{
SC_HANDLE hSc;
LPCTSTR BinaryPathName = *++ServiceArgs;
// LPCTSTR *Options = ++ServiceArgs;
if ((! ServiceName) || (! BinaryPathName))
return CreateUsage();
#ifdef SCDBG
/* testing */
printf("service to create - %s\n", ServiceName);
printf("Binary path - %s\n", BinaryPathName);
printf("Arguments :\n");
while (*Options)
{
printf("%s\n", *Options);
Options++;
}
#endif
hSc = CreateService(hSCManager,
ServiceName,
ServiceName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
BinaryPathName,
NULL,
NULL,
NULL,
NULL,
NULL);
if (hSc == NULL)
{
_tprintf(_T("CreateService failed\n"));
ReportLastError();
return FALSE;
}
_tprintf(_T("[SC] CreateService SUCCESS\n"));
CloseServiceHandle(hSc);
return TRUE;
}

View file

@ -0,0 +1,42 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS SC utility
* FILE: subsys/system/sc/delete.c
* PURPOSE: control ReactOS services
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:
* Ged Murphy 20/10/05 Created
*
*/
#include "sc.h"
BOOL Delete(LPCTSTR ServiceName)
{
SC_HANDLE hSc;
#ifdef SCDBG
/* testing */
printf("service to delete - %s\n\n", ServiceName);
#endif
hSc = OpenService(hSCManager, ServiceName, DELETE);
if (hSc == NULL)
{
_tprintf(_T("openService failed\n"));
ReportLastError();
return FALSE;
}
if (! DeleteService(hSc))
{
_tprintf(_T("DeleteService failed\n"));
ReportLastError();
return FALSE;
}
_tprintf(_T("[SC] DeleteService SUCCESS\n"));
CloseServiceHandle(hSc);
return TRUE;
}

View file

@ -0,0 +1,327 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS SC utility
* FILE: subsys/system/sc/query.c
* PURPOSE: control ReactOS services
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:
* Ged Murphy 20/10/05 Created
*
*/
/*
* TODO:
* Allow calling of 2 options e.g.:
* type= driver state= inactive
*/
#include "sc.h"
/* local function decs */
VOID PrintService(BOOL bExtended);
BOOL EnumServices(DWORD ServiceType, DWORD ServiceState);
BOOL QueryService(LPCTSTR ServiceName, BOOL bExtended);
/* global variables */
static ENUM_SERVICE_STATUS_PROCESS *pServiceStatus = NULL;
DWORD NumServices = 0;
BOOL
Query(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, BOOL bExtended)
{
if (! ServiceName) /* display all running services and drivers */
{
/* get default values */
EnumServices(SERVICE_WIN32, SERVICE_ACTIVE);
/* print default values */
PrintService(bExtended);
}
else if (_tcsicmp(ServiceName, _T("type=")) == 0)
{
LPCTSTR Type = *ServiceArgs;
if (_tcsicmp(Type, _T("driver")) == 0)
EnumServices(SERVICE_DRIVER, SERVICE_ACTIVE);
else if (_tcsicmp(Type, _T("service")) == 0)
EnumServices(SERVICE_WIN32, SERVICE_ACTIVE);
else if (_tcsicmp(Type, _T("all")) == 0)
EnumServices(SERVICE_DRIVER|SERVICE_WIN32, SERVICE_ACTIVE);
else
{
_tprintf(_T("\nERROR following \"type=\"!\n"));
_tprintf(_T("Must be \"driver\" or \"service\" or \"all\"\n"));
}
PrintService(bExtended);
}
else if(_tcsicmp(ServiceName, _T("state=")) == 0)
{
LPCTSTR State = *ServiceArgs;
if (_tcsicmp(State, _T("inactive")) == 0)
EnumServices(SERVICE_WIN32, SERVICE_INACTIVE);
else if (_tcsicmp(State, _T("all")) == 0)
EnumServices(SERVICE_WIN32, SERVICE_STATE_ALL);
else
{
_tprintf(_T("\nERROR following \"state=\"!\n"));
_tprintf(_T("Must be \"active\" or \"inactive\" or \"all\"\n"));
}
PrintService(bExtended);
}
/*
else if(_tcsicmp(ServiceName, _T("bufsize=")))
else if(_tcsicmp(ServiceName, _T("ri=")))
else if(_tcsicmp(ServiceName, _T("group=")))
*/
else /* print only the service requested */
{
QueryService(ServiceName, bExtended);
}
return TRUE;
}
BOOL
QueryService(LPCTSTR ServiceName, BOOL bExtended)
{
SERVICE_STATUS_PROCESS *pServiceInfo = NULL;
SC_HANDLE hSc;
DWORD BufSiz = 0;
DWORD BytesNeeded = 0;
DWORD Ret;
hSc = OpenService(hSCManager, ServiceName, SERVICE_QUERY_STATUS);
if (hSc == NULL)
{
_tprintf(_T("QueryService: openService failed\n"));
ReportLastError();
return FALSE;
}
Ret = QueryServiceStatusEx(hSc,
SC_STATUS_PROCESS_INFO,
NULL,
BufSiz,
&BytesNeeded);
if ((Ret != 0) || (GetLastError() != ERROR_INSUFFICIENT_BUFFER))
{
_tprintf(_T("QueryService: First call to QueryServiceStatusEx failed : "));
ReportLastError();
return FALSE;
}
else /* Call function again if required size was returned */
{
/* reserve memory for service info array */
pServiceInfo = (SERVICE_STATUS_PROCESS *)
HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceInfo == NULL)
{
_tprintf(_T("QueryService: Failed to allocate memory : "));
ReportLastError();
return FALSE;
}
/* fill array with service info */
if (! QueryServiceStatusEx(hSc,
SC_STATUS_PROCESS_INFO,
(LPBYTE)pServiceInfo,
BytesNeeded,
&BytesNeeded))
{
_tprintf(_T("QueryService: Second call to QueryServiceStatusEx failed : "));
ReportLastError();
HeapFree(GetProcessHeap(), 0, pServiceInfo);
return FALSE;
}
}
_tprintf(_T("SERVICE_NAME: %s\n"), ServiceName);
_tprintf(_T("\tTYPE : %x "),
(unsigned int)pServiceInfo->dwServiceType);
switch (pServiceInfo->dwServiceType)
{
case 1 : _tprintf(_T("KERNEL_DRIVER\n")); break;
case 2 : _tprintf(_T("FILE_SYSTEM_DRIVER\n")); break;
case 16 : _tprintf(_T("WIN32_OWN_PROCESS\n")); break;
case 32 : _tprintf(_T("WIN32_SHARE_PROCESS\n")); break;
default : _tprintf(_T("\n")); break;
}
_tprintf(_T("\tSTATE : %x "),
(unsigned int)pServiceInfo->dwCurrentState);
switch (pServiceInfo->dwCurrentState)
{
case 1 : _tprintf(_T("STOPPED\n")); break;
case 2 : _tprintf(_T("START_PENDING\n")); break;
case 3 : _tprintf(_T("STOP_PENDING\n")); break;
case 4 : _tprintf(_T("RUNNING\n")); break;
case 5 : _tprintf(_T("CONTINUE_PENDING\n")); break;
case 6 : _tprintf(_T("PAUSE_PENDING\n")); break;
case 7 : _tprintf(_T("PAUSED\n")); break;
default : _tprintf(_T("\n")); break;
}
// _tprintf(_T("\n\taccepted : 0x%x\n\n"),
// pServiceStatus[i].ServiceStatusProcess.dwControlsAccepted);
// (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
_tprintf(_T("\tWIN32_EXIT_CODE : %d (0x%x)\n"),
(unsigned int)pServiceInfo->dwWin32ExitCode,
(unsigned int)pServiceInfo->dwWin32ExitCode);
_tprintf(_T("\tSERVICE_EXIT_CODE : %d (0x%x)\n"),
(unsigned int)pServiceInfo->dwServiceSpecificExitCode,
(unsigned int)pServiceInfo->dwServiceSpecificExitCode);
_tprintf(_T("\tCHECKPOINT : 0x%x\n"),
(unsigned int)pServiceInfo->dwCheckPoint);
_tprintf(_T("\tWAIT_HINT : 0x%x\n"),
(unsigned int)pServiceInfo->dwWaitHint);
if (bExtended)
{
_tprintf(_T("\tPID : %lu\n"),
pServiceInfo->dwProcessId);
_tprintf(_T("\tFLAGS : %lu\n"),
pServiceInfo->dwServiceFlags);
}
HeapFree(GetProcessHeap(), 0, pServiceInfo);
return TRUE;
}
BOOL
EnumServices(DWORD ServiceType, DWORD ServiceState)
{
DWORD BufSize = 0;
DWORD BytesNeeded = 0;
DWORD ResumeHandle = 0;
DWORD Ret;
/* determine required buffer size */
Ret = EnumServicesStatusEx(hSCManager,
SC_ENUM_PROCESS_INFO,
ServiceType,
ServiceState,
(LPBYTE)pServiceStatus,
BufSize,
&BytesNeeded,
&NumServices,
&ResumeHandle,
0);
if ((Ret != 0) && (GetLastError() != ERROR_MORE_DATA))
{
_tprintf(_T("EnumServices: First call to EnumServicesStatusEx failed : "));
ReportLastError();
return FALSE;
}
else /* Call function again if required size was returned */
{
/* reserve memory for service info array */
pServiceStatus = (ENUM_SERVICE_STATUS_PROCESS *)
HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceStatus == NULL)
{
_tprintf(_T("EnumServices: Failed to allocate memory : "));
ReportLastError();
return FALSE;
}
/* fill array with service info */
if (! EnumServicesStatusEx(hSCManager,
SC_ENUM_PROCESS_INFO,
ServiceType,
ServiceState,
(LPBYTE)pServiceStatus,
BytesNeeded,
&BytesNeeded,
&NumServices,
&ResumeHandle,
0))
{
_tprintf(_T("EnumServices: Second call to EnumServicesStatusEx failed : "));
ReportLastError();
HeapFree(GetProcessHeap(), 0, pServiceStatus);
return FALSE;
}
}
return TRUE;
}
VOID
PrintService(BOOL bExtended)
{
DWORD i;
for (i=0; i < NumServices; i++)
{
_tprintf(_T("SERVICE_NAME: %s\n"), pServiceStatus[i].lpServiceName);
_tprintf(_T("DISPLAY_NAME: %s\n"), pServiceStatus[i].lpDisplayName);
_tprintf(_T("\tTYPE : %x "),
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwServiceType);
switch (pServiceStatus[i].ServiceStatusProcess.dwServiceType)
{
case 1 : _tprintf(_T("KERNEL_DRIVER\n")); break;
case 2 : _tprintf(_T("FILE_SYSTEM_DRIVER\n")); break;
case 16 : _tprintf(_T("WIN32_OWN_PROCESS\n")); break;
case 32 : _tprintf(_T("WIN32_SHARE_PROCESS\n")); break;
default : _tprintf(_T("\n")); break;
}
_tprintf(_T("\tSTATE : %x "),
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwCurrentState);
switch (pServiceStatus[i].ServiceStatusProcess.dwCurrentState)
{
case 1 : _tprintf(_T("STOPPED\n")); break;
case 2 : _tprintf(_T("START_PENDING\n")); break;
case 3 : _tprintf(_T("STOP_PENDING\n")); break;
case 4 : _tprintf(_T("RUNNING\n")); break;
case 5 : _tprintf(_T("CONTINUE_PENDING\n")); break;
case 6 : _tprintf(_T("PAUSE_PENDING\n")); break;
case 7 : _tprintf(_T("PAUSED\n")); break;
default : _tprintf(_T("\n")); break;
}
// _tprintf(_T("\n\taccepted : 0x%x\n\n"),
// pServiceStatus[i].ServiceStatusProcess.dwControlsAccepted);
// (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
_tprintf(_T("\tWIN32_EXIT_CODE : %d (0x%x)\n"),
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwWin32ExitCode,
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwWin32ExitCode);
_tprintf(_T("\tSERVICE_EXIT_CODE : %d (0x%x)\n"),
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwServiceSpecificExitCode,
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwServiceSpecificExitCode);
_tprintf(_T("\tCHECKPOINT : 0x%x\n"),
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwCheckPoint);
_tprintf(_T("\tWAIT_HINT : 0x%x\n"),
(unsigned int)pServiceStatus[i].ServiceStatusProcess.dwWaitHint);
if (bExtended)
{
_tprintf(_T("\tPID : %lu\n"),
pServiceStatus[i].ServiceStatusProcess.dwProcessId);
_tprintf(_T("\tFLAGS : %lu\n"),
pServiceStatus[i].ServiceStatusProcess.dwServiceFlags);
}
_tprintf(_T("\n"));
}
_tprintf(_T("number : %lu\n"), NumServices);
}

View file

@ -0,0 +1,212 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS SC utility
* FILE: subsys/system/sc/sc.c
* PURPOSE: control ReactOS services
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:
* Ged Murphy 20/10/05 Created
*
*/
#include "sc.h"
SC_HANDLE hSCManager;
DWORD ReportLastError(VOID)
{
LPVOID lpMsgBuf;
DWORD RetVal;
DWORD ErrorCode = GetLastError();
if (ErrorCode != ERROR_SUCCESS)
{
RetVal = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
(LPTSTR) &lpMsgBuf,
0,
NULL );
if (RetVal != 0)
{
_tprintf(_T("%s"), (LPTSTR)lpMsgBuf);
LocalFree(lpMsgBuf);
/* return number of TCHAR's stored in output buffer
* excluding '\0' - as FormatMessage does*/
return RetVal;
}
}
return 0;
}
INT ScControl(LPTSTR MachineName, // remote machine name
LPCTSTR Command, // sc command
LPCTSTR ServiceName, // name of service
LPCTSTR *ServiceArgs, // any options
DWORD ArgCount) // argument counter
{
/* count trailing arguments */
ArgCount -= 3;
if (MachineName)
{
_tprintf(_T("Remote service control is not yet implemented\n"));
return 2;
}
/* if we are emurating the services, we don't need administrator access */
if ( (_tcsicmp(Command, _T("query")) == 0) || (_tcsicmp(Command, _T("queryex")) == 0) )
hSCManager = OpenSCManager(MachineName, NULL, SC_MANAGER_ENUMERATE_SERVICE);
else
hSCManager = OpenSCManager(MachineName, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager == NULL)
{
_tprintf(_T("[SC] OpenSCManager FAILED %lu:\n\n"), GetLastError());
ReportLastError();
return -1;
}
/* emurate command */
if (_tcsicmp(Command, _T("query")) == 0)
Query(ServiceName, ServiceArgs, FALSE);
else if (_tcsicmp(Command, _T("queryex")) == 0)
Query(ServiceName, ServiceArgs, TRUE);
else if (_tcsicmp(Command, _T("start")) == 0)
{
if (ServiceName)
Start(ServiceName, ServiceArgs, ArgCount);
else
StartUsage();
}
else if (_tcsicmp(Command, _T("pause")) == 0)
{
if (ServiceName)
Control(SERVICE_CONTROL_PAUSE, ServiceName, ServiceArgs);
else
PauseUsage();
}
else if (_tcsicmp(Command, _T("interrogate")) == 0)
{
if (ServiceName)
Control(SERVICE_CONTROL_INTERROGATE, ServiceName, ServiceArgs);
else
InterrogateUsage();
}
else if (_tcsicmp(Command, _T("stop")) == 0)
{
if (ServiceName)
Control(SERVICE_CONTROL_STOP, ServiceName, ServiceArgs);
else
StopUsage();
}
else if (_tcsicmp(Command, _T("continue")) == 0)
{
if (ServiceName)
Control(SERVICE_CONTROL_CONTINUE, ServiceName, ServiceArgs);
else
ContinueUsage();
}
else if (_tcsicmp(Command, _T("delete")) == 0)
{
if (ServiceName)
Delete(ServiceName);
else
DeleteUsage();
}
else if (_tcsicmp(Command, _T("create")) == 0)
{
if (*ServiceArgs)
Create(ServiceName, ServiceArgs);
else
CreateUsage();
}
else if (_tcsicmp(Command, _T("control")) == 0)
{
if (ServiceName)
Control(0, ServiceName, ServiceArgs);
else
ContinueUsage();
}
return 0;
}
#if defined(_UNICODE) && defined(__GNUC__)
static
#endif
int _tmain(int argc, LPCTSTR argv[])
{
LPTSTR MachineName = NULL; // remote machine
LPCTSTR Command = NULL; // sc command
LPCTSTR ServiceName = NULL; // Name of service
if (argc < 2)
return MainUsage();
/* get server name */
if ((argv[1][0] == '\\') && (argv[1][1] == '\\'))
{
if (argc < 3)
return MainUsage();
_tcscpy(MachineName, argv[1]);
Command = argv[2];
if (argc > 3)
ServiceName = argv[3];
return ScControl(MachineName, Command, ServiceName, &argv[4], argc);
}
else
{
Command = argv[1];
if (argc > 2)
ServiceName = argv[2];
return ScControl(MachineName, Command, ServiceName, &argv[3], argc);
}
}
#if defined(_UNICODE) && defined(__GNUC__)
/* HACK - MINGW HAS NO OFFICIAL SUPPORT FOR wmain()!!! */
int main( int argc, char **argv )
{
WCHAR **argvW;
int i, j, Ret = 1;
if ((argvW = malloc(argc * sizeof(WCHAR*))))
{
/* convert the arguments */
for (i = 0, j = 0; i < argc; i++)
{
if (!(argvW[i] = malloc((strlen(argv[i]) + 1) * sizeof(WCHAR))))
{
j++;
}
swprintf(argvW[i], L"%hs", argv[i]);
}
if (j == 0)
{
/* no error converting the parameters, call wmain() */
Ret = wmain(argc, (LPCTSTR *)argvW);
}
/* free the arguments */
for (i = 0; i < argc; i++)
{
if (argvW[i])
free(argvW[i]);
}
free(argvW);
}
return Ret;
}
#endif

View file

@ -0,0 +1,30 @@
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <tchar.h>
extern SC_HANDLE hSCManager; // declared in sc.c
//#define SCDBG
/* control functions */
BOOL Query(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, BOOL bExtended);
BOOL Start(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, INT ArgCount);
BOOL Create(LPCTSTR ServiceName, LPCTSTR *ServiceArgs);
BOOL Delete(LPCTSTR ServiceName);
BOOL Control(DWORD Control, LPCTSTR ServiceName, LPCTSTR *Args);
/* print and error functions */
DWORD ReportLastError(VOID);
/* usage functions */
INT MainUsage(VOID);
INT StartUsage(VOID);
INT PauseUsage(VOID);
INT InterrogateUsage(VOID);
INT ContinueUsage(VOID);
INT StopUsage(VOID);
INT ConfigUsage(VOID);
INT DescriptionUsage(VOID);
INT DeleteUsage(VOID);
INT CreateUsage(VOID);

View file

@ -0,0 +1,4 @@
#define REACTOS_STR_FILE_DESCRIPTION "Services control application\0"
#define REACTOS_STR_INTERNAL_NAME "sc\0"
#define REACTOS_STR_ORIGINAL_FILENAME "sc.exe\0"
#include <reactos/version.rc>

View file

@ -0,0 +1,17 @@
<module name="sc" type="win32cui" installbase="system32" installname="sc.exe">
<define name="__USE_W32API" />
<define name="DEFINE_GUID" />
<define name="UNICODE" />
<define name="_UNICODE" />
<library>kernel32</library>
<library>advapi32</library>
<file>sc.c</file>
<file>start.c</file>
<file>query.c</file>
<file>control.c</file>
<file>create.c</file>
<file>delete.c</file>
<file>usage.c</file>
<file>sc.rc</file>
<pch>sc.h</pch>
</module>

View file

@ -0,0 +1,111 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS SC utility
* FILE: subsys/system/sc/start.c
* PURPOSE: control ReactOS services
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:
* Ged Murphy 20/10/05 Created
*
*/
#include "sc.h"
BOOL Start(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, INT ArgCount)
{
SC_HANDLE hSc;
SERVICE_STATUS_PROCESS ServiceStatus, ServiceStatus2;
DWORD BytesNeeded;
#ifdef SCDBG
/* testing */
_tprintf(_T("service to start - %s\n\n"), ServiceName);
_tprintf(_T("Arguments :\n"));
while (*ServiceArgs)
{
printf("%s\n", *ServiceArgs);
ServiceArgs++;
}
#endif
/* get a handle to the service requested for starting */
hSc = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS);
if (hSc == NULL)
{
_tprintf(_T("openService failed\n"));
ReportLastError();
return FALSE;
}
/* start the service opened */
if (! StartService(hSc, ArgCount, ServiceArgs))
{
_tprintf(_T("[SC] StartService FAILED %lu:\n\n"), GetLastError());
ReportLastError();
return FALSE;
}
if (! QueryServiceStatusEx(
hSc,
SC_STATUS_PROCESS_INFO,
(LPBYTE)&ServiceStatus,
sizeof(SERVICE_STATUS_PROCESS),
&BytesNeeded))
{
_tprintf(_T("QueryServiceStatusEx 1 failed\n"));
ReportLastError();
return FALSE;
}
while (ServiceStatus.dwCurrentState == SERVICE_START_PENDING)
{
/* wait before checking status */
Sleep(ServiceStatus.dwWaitHint);
/* check status again */
if (! QueryServiceStatusEx(
hSc,
SC_STATUS_PROCESS_INFO,
(LPBYTE)&ServiceStatus,
sizeof(SERVICE_STATUS_PROCESS),
&BytesNeeded))
{
_tprintf(_T("QueryServiceStatusEx 2 failed\n"));
ReportLastError();
return FALSE;
}
}
QueryServiceStatusEx(hSc, SC_STATUS_PROCESS_INFO, (LPBYTE)&ServiceStatus2,
sizeof(SERVICE_STATUS_PROCESS), &BytesNeeded);
CloseServiceHandle(hSc);
if (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
_tprintf(_T("\nSERVICE_NAME: %s\n"), ServiceName);
_tprintf(_T("\tTYPE : %lu\n"), ServiceStatus2.dwServiceType);
_tprintf(_T("\tSTATE : %lu\n"), ServiceStatus2.dwCurrentState);
_tprintf(_T("\tWIN32_EXIT_CODE : %lu\n"), ServiceStatus2.dwWin32ExitCode);
_tprintf(_T("\tCHECKPOINT : %lu\n"), ServiceStatus2.dwCheckPoint);
_tprintf(_T("\tWAIT_HINT : %lu\n"), ServiceStatus2.dwWaitHint);
_tprintf(_T("\tPID : %lu\n"), ServiceStatus2.dwProcessId);
_tprintf(_T("\tFLAGS : %lu\n"), ServiceStatus2.dwServiceFlags);
return TRUE;
}
else
{
_tprintf(_T("Failed to start %s\n"), ServiceName);
_tprintf(_T("Curent state: %lu\n"), ServiceStatus.dwCurrentState);
_tprintf(_T("Exit code: %lu\n"), ServiceStatus.dwWin32ExitCode);
_tprintf(_T("Service Specific exit code: %lu\n"),
ServiceStatus.dwServiceSpecificExitCode);
_tprintf(_T("Check point: %lu\n"), ServiceStatus.dwCheckPoint);
_tprintf(_T("Wait hint: %lu\n"), ServiceStatus.dwWaitHint);
return FALSE;
}
}

View file

@ -0,0 +1,204 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS SC utility
* FILE: subsys/system/sc/usage.c
* PURPOSE: control ReactOS services
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:
* Ged Murphy 20/10/05 Created
*
*/
#include "sc.h"
INT MainUsage(VOID)
{
INT c;
_tprintf(_T("DESCRIPTION:\n")
_T("\tSC is a command line program used for communicating with\n")
_T("\tthe Service Control Manager and its services.\n")
_T("USAGE:\n")
_T("\tsc <server> [command] [service name] <option1> <option2>...\n")
_T("\tThe optional parameter <server> has the form \"\\ServerName\"\n")
_T("\tFurther help on commands can be obtained by typing: \"sc [command]\"\n")
_T("\tService Commands:\n")
_T("\t query : Queries the status for a service, or\n")
_T("\t enumerates the status for types of services.\n")
_T("\t queryex : Queries the extended status for a service, or\n")
// _T("\t enumerates the status for types of services.\n"
_T("\t start : Starts a service.\n")
_T("\t pause : Sends a PAUSE control request to a service.\n")
_T("\t interrogate : Sends a INTERROGATE control request to a service.\n")
_T("\t continue : Sends a CONTINUE control request to a service.\n")
_T("\t stop : Sends a STOP request to a service.\n")
// "\t config : Changes the configuration of a service (persistant).\n"
// "\t description : Changes the description of a service.\n"
// "\t failure : Changes the actions taken by a service upon failure.\n"
// "\t qc : Queries the configuration information for a service.\n"
// "\t qdescription : Queries the description for a service.\n"
// "\t qfailure : Queries the actions taken by a service upon failure.\n"
_T("\t delete : Deletes a service (from the registry).\n")
_T("\t create : Creates a service. (adds it to the registry).\n")
_T("\t control : Sends a control to a service.\n"));
// "\t sdshow : Displays a service's security descriptor.\n")
// "\t sdset : Sets a service's security descriptor.\n")
// "\t GetDisplayName : Gets the DisplayName for a service.\n")
// "\t GetKeyName : Gets the ServiceKeyName for a service.\n")
// "\t EnumDepend : Enumerates Service Dependencies.\n")
// "\n")
// "\tService Name Independant Commands:\n")
// "\t boot : (ok | bad) Indicates whether the last boot should\n")
// "\t be saved as the last-known-good boot configuration\n")
// "\t Lock : Locks the SCM Database\n")
// "\t QueryLock : Queries the LockStatus for the SCM Database\n")
_tprintf(_T("\nWould you like to see help for the QUERY and QUERYEX commands? [ y | n ]: "));
c = _getch(); // _gettch isn't defined in our tchar.h
_tprintf(_T("%c\n"), c);
if (tolower(c) == 'y')
{
_tprintf(_T("QUERY and QUERYEX OPTIONS :\n")
_T(" If the query command is followed by a service name, the status\n")
_T(" for that service is returned. Further options do not apply in\n")
_T(" this case. If the query command is followed by nothing or one of\n")
_T(" the options listed below, the services are enumerated.\n")
_T(" type= Type of services to enumerate (driver, service, all)\n")
_T(" (default = service)\n")
_T(" state= State of services to enumerate (inactive, all)\n")
_T(" (default = active)\n")
/*
_T(" bufsize= The size (in bytes) of the enumeration buffer\n")
_T(" (default = 4096)\n")
_T(" ri= The resume index number at which to begin the enumeration\n")
_T(" (default = 0)\n")
_T(" group= Service group to enumerate\n")
_T(" (default = all groups)\n")
*/
_T("SYNTAX EXAMPLES\n")
_T("sc query - Enumerates status for active services & drivers\n")
_T("sc query messenger - Displays status for the messenger service\n")
_T("sc queryex messenger - Displays extended status for the messenger service\n")
_T("sc query type= driver - Enumerates only active drivers\n")
_T("sc query type= service - Enumerates only Win32 services\n")
_T("sc query state= all - Enumerates all services & drivers\n")
// _T("sc query bufsize= 50 - Enumerates with a 50 byte buffer.\n")
// _T("sc query ri= 14 - Enumerates with resume index = 14\n")
// _T("sc queryex group= "" - Enumerates active services not in a group\n")
_T("sc query type= service type= interact - Enumerates all interactive services\n"));
// _T("sc query type= driver group= NDIS - Enumerates all NDIS drivers\n"));
}
return 0;
}
INT StartUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Starts a service running.\n")
_T("USAGE:\n")
_T(" sc <server> start [service name] <arg1> <arg2> ...\n"));
return 0;
}
INT PauseUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sends a PAUSE control request to a service.\n")
_T("USAGE:\n")
_T(" sc <server> pause [service name]\n"));
return 0;
}
INT InterrogateUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sends an INTERROGATE control request to a service.\n")
_T("USAGE:\n")
_T(" sc <server> interrogate [service name]\n"));
return 0;
}
INT StopUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sends an STOP control request to a service.\n")
_T("USAGE:\n")
_T(" sc <server> stop [service name]\n"));
return 0;
}
INT ContinueUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sends an CONTINUE control request to a service.\n")
_T("USAGE:\n")
_T(" sc <server> continue [service name]\n"));
return 0;
}
INT ConfigUsage(VOID)
{
_tprintf(_T("not yet implemented\n"));
return 0;
}
INT DescriptionUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sets the description string for a service.\n")
_T("USAGE:\n")
_T(" sc <server> description [service name]\n"));
return 0;
}
INT DeleteUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Deletes a service entry from the registry.\n")
_T(" If the service is running, or another process has an\n")
_T(" open handle to the service, the service is simply marked\n")
_T(" for deletion.\n")
_T("USAGE:\n")
_T(" sc <server> delete [service name]\n"));
return 0;
}
INT CreateUsage(VOID)
{
_tprintf(_T("Creates a service entry in the registry and Service Database.\n")
_T("SYNTAX:\n")
_T("sc create [service name] [binPath= ] <option1> <option2>...\n")
_T("CREATE OPTIONS:\n")
_T("NOTE: The option name includes the equal sign.\n")
_T(" type= <own|share|interact|kernel|filesys|rec>\n")
_T(" (default = own)\n")
_T(" start= <boot|system|auto|demand|disabled>\n")
_T(" (default = demand)\n")
_T(" error= <normal|severe|critical|ignore>\n")
_T(" (default = normal)\n")
_T(" binPath= <BinaryPathName>\n")
_T(" group= <LoadOrderGroup>\n")
_T(" tag= <yes|no>\n")
_T(" depend= <Dependencies(separated by / (forward slash))>\n")
_T(" obj= <AccountName|ObjectName>\n")
_T(" (default = LocalSystem)\n")
_T(" DisplayName= <display name>\n")
_T(" password= <password>\n"));
return 0;
}

View file

@ -0,0 +1,121 @@
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
IDR_MAINMENU MENU
BEGIN
POPUP "&Datei"
BEGIN
MENUITEM "B&eenden",ID_FILE_EXIT
END
POPUP "Action"
BEGIN
MENUITEM "Start",ID_START
MENUITEM "Stopp",ID_STOP
MENUITEM "Pause",ID_PAUSE
MENUITEM "Fortsetzen",ID_RESUME
MENUITEM "Neustart",ID_RESTART
MENUITEM SEPARATOR
MENUITEM "Aktualisieren",ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Eigenschaften",ID_PROP
END
POPUP "Ansicht"
BEGIN
MENUITEM "Anpassen",ID_VIEW_CUSTOMIZE
END
POPUP "Hilfe"
BEGIN
MENUITEM "Info",ID_HELP_ABOUT
END
END
IDD_ABOUTBOX DIALOG DISCARDABLE 22,16,190,182
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Über den Service Manager"
FONT 8, "Tahoma"
BEGIN
CONTROL "Service Manager v0.1\nCopyright (C) 2006\nby Ged Murphy (gedmurphy@gmail.com)",
IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,48,7,130,26
DEFPUSHBUTTON "Schließen",IDOK,140,162,44,15,WS_GROUP
ICON IDI_SM_ICON,IDC_STATIC,12,7,30,20
EDITTEXT IDC_LICENSE_EDIT,8,44,174,107,ES_MULTILINE |
ES_READONLY | WS_VSCROLL
END
IDD_DLG_GENERAL DIALOGEX 6,6,253,225
CAPTION "Allgemein"
FONT 8,"MS Sans Serif",0,0
STYLE 0x10CF0000
BEGIN
CONTROL "Dienstname:",IDC_STATIC,"Static",0x50000000,4,11,53,11
CONTROL "Anzeigename:",IDC_STATIC,"Static",0x50000000,4,29,53,11
CONTROL "Beschreibung",IDC_STATIC,"Static",0x50000000,4,51,53,11
CONTROL "",IDC_SERV_NAME,"Static",0x50000000,70,11,176,11
CONTROL "",IDC_DISP_NAME,"Static",0x50001000,70,29,176,12
CONTROL "",IDC_DESCRIPTION,"Static",0x50201000,70,46,176,22
CONTROL "Pfad zum ausführbarem Programm:",IDC_STATIC,"Static",0x50000000,6,73,150,9
CONTROL "",IDC_STATIC,"Static",0x50001000,6,86,238,12
CONTROL "Starttyp:",IDC_STATIC,"Static",0x50000000,6,108,53,11
CONTROL "",IDC_START_TYPE,"ComboBox",0x50010003,70,107,176,11
CONTROL "Status des Dienstes:",IDC_STATIC,"Static",0x50000000,4,138,100,11
CONTROL "",IDC_SERV_STATUS,"Static",0x50000000,70,138,176,11
CONTROL "Start",IDC_START,"Button",0x50010000,6,155,54,15
CONTROL "Stopp",IDC_STOP,"Button",0x50010000,68,155,54,15
CONTROL "Pause",IDC_PAUSE,"Button",0x50010000,130,155,54,15
CONTROL "Fortsetzen",IDC_RESUME,"Button",0x50010000,192,155,54,15
CONTROL "Sie können die Startparameter festlegen, die verwendet werden, wenn Sie den Dienst von hier aus starten.",IDC_STATIC,"Static",0x50000000,6,177,240,15
CONTROL "Startparameter",IDC_STATIC,"Static",0x50000000,6,199,53,11
CONTROL "",IDC_START_PARAM,"Static",0x50001000,70,199,176,11
END
IDB_BUTTONS BITMAP "buttons.bmp"
STRINGTABLE DISCARDABLE
BEGIN
IDS_FIRSTCOLUMN "Name"
IDS_SECONDCOLUMN "Beschreibung"
IDS_THIRDCOLUMN "Status"
IDS_FOURTHCOLUMN "Starttyp"
IDS_FITHCOLUMN "Anmelden als"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_STATUS_RUNNING "Gestartet"
IDS_SERVICES_STATUS_STOPPED "Gestoppt"
IDS_SERVICES_YES "Ja"
IDS_SERVICES_UNKNOWN "Unbekannt"
IDS_SERVICES_AUTO "Automatisch"
IDS_SERVICES_MAN "Manuel"
IDS_SERVICES_DIS "Deaktiviert"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_NUM_SERVICES "Dienste: %d"
IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
/*"This program is free software; you can redistribute it "
"and/or modify it under the terms of the GNU Lesser General "
"Public License as published by the Free Software Foundation; "
"either version 2.1 of the License, or (at your option) any "
"later version.\r\n\r\nThis program is distributed in the hope "
"that it will be useful, but WITHOUT ANY WARRANTY; without even "
"the implied warranty of MERCHANTABILITY or FITNESS FOR A "
"PARTICULAR PURPOSE. See the GNU General Public License for more "
"details.\r\n\r\nYou should have received a copy of the GNU "
"General Public License along with this program; if not, write "
"to the Free Software Foundation, Inc., 59 Temple Place - Suite "
"330, Boston, MA 02111-1307, USA." */
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLTIP_PROP "Eigenschaften"
IDS_TOOLTIP_REFRESH "Aktualisieren"
IDS_TOOLTIP_EXPORT "Liste exportieren"
IDS_TOOLTIP_START "Dienst starten"
IDS_TOOLTIP_STOP "Dienst beenden"
IDS_TOOLTIP_PAUSE "Diest pausieren"
IDS_TOOLTIP_RESTART "Diest neustarten"
END

View file

@ -0,0 +1,182 @@
IDR_MAINMENU MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit",ID_EXIT
END
POPUP "Action"
BEGIN
MENUITEM "Start",ID_START
MENUITEM "Stop",ID_STOP
MENUITEM "Pause",ID_PAUSE
MENUITEM "Resume",ID_RESUME
MENUITEM "Restart",ID_RESTART
MENUITEM SEPARATOR
MENUITEM "Refresh",ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Properties",ID_PROP
END
POPUP "View"
BEGIN
MENUITEM "Customize",ID_VIEW_CUSTOMIZE
END
POPUP "Help"
BEGIN
MENUITEM "About",ID_ABOUT
END
END
IDR_POPUP MENU
BEGIN
POPUP "popup"
BEGIN
MENUITEM "Start",ID_START
MENUITEM "Stop",ID_STOP
MENUITEM "Pause",ID_PAUSE
MENUITEM "Resume",ID_RESUME
MENUITEM "Restart",ID_RESTART
MENUITEM SEPARATOR
POPUP "All tasks"
BEGIN
MENUITEM "Start",ID_START
MENUITEM "Stop",ID_STOP
MENUITEM "Pause",ID_PAUSE
MENUITEM "Resume",ID_RESUME
MENUITEM "Restart",ID_RESTART
MENUITEM "Refresh",ID_REFRESH
END
MENUITEM SEPARATOR
MENUITEM "Refresh",ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Properties",ID_PROP
MENUITEM SEPARATOR
MENUITEM "Help",ID_HELP
END
END
IDD_ABOUTBOX DIALOGEX 22,16,190,182
CAPTION "About Service Manager"
FONT 8,"Tahoma",0,0
STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
BEGIN
LTEXT "Service Manager v0.1\nCopyright (C) 2006\nby Ged Murphy (gedmurphy@gmail.com)", IDC_STATIC, 48, 7, 130, 26
PUSHBUTTON "Close", IDOK, 75, 162, 44, 15
ICON IDI_SM_ICON, IDC_STATIC, 10, 10, 7, 30
EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE
END
IDD_DLG_GENERAL DIALOGEX 6,6,253,225
CAPTION "General"
FONT 8,"Tahoma",0,0
STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP
BEGIN
LTEXT "", IDC_SERV_NAME, 70,11,176,11, WS_CHILD | WS_VISIBLE
EDITTEXT IDC_DISP_NAME, 70, 29, 176, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_READONLY
EDITTEXT IDC_DESCRIPTION, 70, 46, 176, 24, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_MULTILINE | ES_READONLY
EDITTEXT IDC_EXEPATH, 6, 86, 240, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_READONLY
CONTROL "",IDC_START_TYPE,"ComboBox",0x50010003,70,107,176,11
PUSHBUTTON "Start", IDC_START, 6, 155, 54, 15
PUSHBUTTON "Stop", IDC_STOP, 68, 155, 54, 15
PUSHBUTTON "Pause", IDC_PAUSE , 130, 155, 54, 15
PUSHBUTTON "Resume", IDC_RESUME, 192, 155, 54, 15
LTEXT "Service name:", IDC_STATIC, 4, 11, 53, 11
LTEXT "Display name:", IDC_STATIC, 4, 29, 53, 11
LTEXT "Description", IDC_STATIC, 4, 51, 53, 11
LTEXT "Path to executable:", IDC_STATIC, 6, 73, 82, 9
LTEXT "Startup type:", IDC_STATIC, 6, 108, 53, 11
LTEXT "Service status:", IDC_STATIC, 4, 138, 53, 11
CONTROL "",IDC_SERV_STATUS,"Static",0x50000000,70,138,176,11
LTEXT "You can specify the start parameters that apply when you start the service from here.",IDC_STATIC, 6,177,240,15
LTEXT "Start parameters", IDC_STATIC, 6, 199, 53, 11
EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
IDD_DLG_DEPEND DIALOGEX 6,6,253,225
CAPTION "Dependencies"
FONT 8,"Tahoma",0,0
STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP
BEGIN
CONTROL "",IDC_DEPEND_TREE1,"SysTreeView32",0x50010007,8,70,236,68,0x00000200
CONTROL "",IDC_DEPEND_TREE2,"SysTreeView32",0x50010007,8,151,234,67,0x00000200
CONTROL "Some services depend on other services, system drivers and load order groups. If a system component is stopped or it is not running properly, dependant services can be affected.",IDC_STATIC,"Static",0x50000000,8,7,238,26
CONTROL "This service depends on the following components",IDC_STATIC,"Static",0x50000000,8,57,236,9
CONTROL "",IDC_DEPEND_SERVICE,"Static",0x50000000,8,38,236,13
END
IDD_DLG_CREATE DIALOGEX 6,6,225,209
CAPTION "Create a service"
FONT 8,"Tahoma",0,0
STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP
BEGIN
CONTROL "",IDC_CREATE_SERVNAME,"Edit",0x50010000,72,12,150,11,0x00000200
CONTROL "",IDC_CREATE_DISPNAME,"Edit",0x50010000,72,31,150,11,0x00000200
CONTROL "",IDC_CREATE_PATH,"Edit",0x50010000,8,62,214,13,0x00000200
CONTROL "",IDC_CREATE_DESC,"Edit",0x50010000,10,97,210,48,0x00000200
CONTROL "",IDC_CREATE_OPTIONS,"Edit",0x50010000,10,162,210,13,0x00000200
CONTROL "Service Name :",IDC_STATIC,"Static",0x50000202,12,12,54,9
CONTROL "Display Name :",IDC_STATIC,"Static",0x50000202,12,33,54,9
CONTROL "Path to executable :",IDC_STATIC,"Static",0x50000000,10,51,68,9
CONTROL "Description :",IDC_STATIC,"Static",0x50000000,12,86,44,9
CONTROL "OK",IDOK,"Button",0x50010000,126,192,44,13
CONTROL "Cancel",IDCANCEL,"Button",0x50010000,176,192,46,13
CONTROL "Additional options (click help for details)",IDC_STATIC,"Static",0x50000000,10,151,134,9
CONTROL "Help",ID_CREATE_HELP,"Button",0x50010000,6,192,44,13
END
IDD_DLG_PROGRESS DIALOGEX 6,6,255,89
CAPTION "Service Control"
FONT 8,"MS Sans Serif",0,0
STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
EXSTYLE WS_EX_TOOLWINDOW
BEGIN
CONTROL "",IDC_SERVCON_PROGRESS,"msctls_progress32",0x50000000,8,46,238,13
CONTROL "",IDC_SERVCON_INFO,"Static",0x50000000,8,5,236,11
CONTROL "",IDC_SERVCON_NAME,"Static",0x50000000,8,25,66,11
CONTROL "&Close",IDOK,"Button",0x50010000,100,70,54,13
END
IDB_BUTTONS BITMAP DISCARDABLE "res/toolbar.bmp"
STRINGTABLE DISCARDABLE
BEGIN
IDS_FIRSTCOLUMN "Name"
IDS_SECONDCOLUMN "Description"
IDS_THIRDCOLUMN "Status"
IDS_FOURTHCOLUMN "Startup Type"
IDS_FITHCOLUMN "Log On As"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_SERVICES_STARTED "Started"
IDS_SERVICES_STOPPED "Stopped"
IDS_SERVICES_AUTO "Automatic"
IDS_SERVICES_MAN "Manual"
IDS_SERVICES_DIS "Disabled"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_NUM_SERVICES "Num Services: %d"
IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLTIP_PROP "Properties"
IDS_TOOLTIP_REFRESH "Refresh"
IDS_TOOLTIP_EXPORT "Export list"
IDS_TOOLTIP_START "Start service"
IDS_TOOLTIP_STOP "Stop service"
IDS_TOOLTIP_PAUSE "Pause service"
IDS_TOOLTIP_RESTART "Restart service"
IDS_TOOLTIP_NEW "Create a new service"
IDS_TOOLTIP_HELP "Help"
IDS_TOOLTIP_EXIT "Exit"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_PROGRESS_INFO "ReactOS is attempting to %s the following service"
END

View file

@ -0,0 +1,54 @@
/*
* PROJECT: ReactOS Services
* LICENSE: GPL - See COPYING in the top level directory
* FILE: subsys/system/servman/about.c
* PURPOSE: About dialog box message handler
* COPYRIGHT: Copyright 2005 Ged Murphy <gedmurphy@gmail.com>
*
*/
//ShellAbout(hwnd, _T("test"), _T("test2"), MAKEINTRESOURCE(IDI_SM_ICON));
#include "servman.h"
extern HINSTANCE hInstance;
#ifdef _MSC_VER
#pragma warning(disable : 4100)
#endif
BOOL CALLBACK
AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hLicenseEditWnd;
HICON hIcon = NULL;
TCHAR strLicense[0x1000];
switch (message)
{
case WM_INITDIALOG:
hIcon = LoadImage(hInstance, MAKEINTRESOURCE(IDI_SM_ICON), IMAGE_ICON, 16, 16, 0);
SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
hLicenseEditWnd = GetDlgItem(hDlg, IDC_LICENSE_EDIT);
LoadString(hInstance, IDS_LICENSE, strLicense, 0x1000);
SetWindowText(hLicenseEditWnd, strLicense);
return TRUE;
case WM_COMMAND:
if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
{
DestroyIcon(hIcon);
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}

View file

@ -0,0 +1,138 @@
/*
* PROJECT: ReactOS Services
* LICENSE: GPL - See COPYING in the top level directory
* FILE: subsys/system/servman/control
* PURPOSE: Stops, pauses and resumes a service
* COPYRIGHT: Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
*
*/
#include "servman.h"
extern HWND hListView;
BOOL Control(HWND hProgDlg, DWORD Control)
{
HWND hProgBar;
SC_HANDLE hSCManager;
SC_HANDLE hSc;
ENUM_SERVICE_STATUS_PROCESS *Service = NULL;
SERVICE_STATUS_PROCESS ServiceStatus;
SERVICE_STATUS Status;
LVITEM item;
DWORD BytesNeeded = 0;
DWORD dwStartTickCount, dwOldCheckPoint;
item.mask = LVIF_PARAM;
item.iItem = GetSelectedItem();
SendMessage(hListView, LVM_GETITEM, 0, (LPARAM)&item);
/* copy pointer to selected service */
Service = (ENUM_SERVICE_STATUS_PROCESS *)item.lParam;
/* set the progress bar range and step */
hProgBar = GetDlgItem(hProgDlg, IDC_SERVCON_PROGRESS);
SendMessage(hProgBar, PBM_SETRANGE, 0, MAKELPARAM(0, PROGRESSRANGE));
SendMessage(hProgBar, PBM_SETSTEP, (WPARAM)1, 0);
/* open handle to the SCM */
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager == NULL)
{
GetError(0);
return FALSE;
}
/* open handle to the service */
hSc = OpenService(hSCManager, Service->lpServiceName,
SC_MANAGER_ALL_ACCESS);
if (hSc == NULL)
{
GetError(0);
return FALSE;
}
/* process requested action */
if (! ControlService(hSc, Control, &Status))
{
GetError(0);
CloseServiceHandle(hSc);
return FALSE;
}
/* query the state of the service */
if (! QueryServiceStatusEx(hSc,
SC_STATUS_PROCESS_INFO,
(LPBYTE)&ServiceStatus,
sizeof(SERVICE_STATUS_PROCESS),
&BytesNeeded))
{
GetError(0);
return FALSE;
}
/* Save the tick count and initial checkpoint. */
dwStartTickCount = GetTickCount();
dwOldCheckPoint = ServiceStatus.dwCheckPoint;
/* loop whilst service is not running */
/* FIXME: needs more control adding. 'Loop' is temparary */
while (ServiceStatus.dwCurrentState != Control)
{
DWORD dwWaitTime;
dwWaitTime = ServiceStatus.dwWaitHint / 10;
if( dwWaitTime < 500 )
dwWaitTime = 500;
else if ( dwWaitTime > 5000 )
dwWaitTime = 5000;
/* increment the progress bar */
SendMessage(hProgBar, PBM_STEPIT, 0, 0);
/* wait before checking status */
Sleep(dwWaitTime);
/* check status again */
if (! QueryServiceStatusEx(
hSc,
SC_STATUS_PROCESS_INFO,
(LPBYTE)&ServiceStatus,
sizeof(SERVICE_STATUS_PROCESS),
&BytesNeeded))
{
GetError(0);
return FALSE;
}
if (ServiceStatus.dwCheckPoint > dwOldCheckPoint)
{
/* The service is making progress. increment the progress bar */
SendMessage(hProgBar, PBM_STEPIT, 0, 0);
dwStartTickCount = GetTickCount();
dwOldCheckPoint = ServiceStatus.dwCheckPoint;
}
else
{
if(GetTickCount() - dwStartTickCount > ServiceStatus.dwWaitHint)
{
/* No progress made within the wait hint */
break;
}
}
}
CloseServiceHandle(hSc);
if (ServiceStatus.dwCurrentState == Control)
{
SendMessage(hProgBar, PBM_DELTAPOS, PROGRESSRANGE, 0);
Sleep(1000);
return TRUE;
}
else
return FALSE;
}

View file

@ -0,0 +1,33 @@
//#include <stdarg>
#include "servman.h"
/* temp file for debugging */
VOID GetError(DWORD err)
{
LPVOID lpMsgBuf;
if (err == 0)
err = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
(LPTSTR) &lpMsgBuf,
0,
NULL );
MessageBox(NULL, lpMsgBuf, _T("Error!"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
}
VOID DisplayString(PTCHAR Msg)
{
MessageBox(NULL, Msg, _T("Error!"), MB_OK | MB_ICONERROR);
}

View file

@ -0,0 +1,45 @@
/*
* PROJECT: ReactOS Services
* LICENSE: GPL - See COPYING in the top level directory
* FILE: subsys/system/servman/progress.c
* PURPOSE: Progress dialog box message handler
* COPYRIGHT: Copyright 2006 Ged Murphy <gedmurphy@gmail.com>
*
*/
#include "servman.h"
extern HINSTANCE hInstance;
//extern HWND hMainWnd;
BOOL CALLBACK ProgressDialogProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_INITDIALOG:
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
DestroyWindow(hDlg);
break;
}
break;
case WM_DESTROY:
DestroyWindow(hDlg);
break;
default:
return FALSE;
}
return TRUE;
}

View file

@ -0,0 +1,295 @@
/*
* PROJECT: ReactOS Services
* LICENSE: GPL - See COPYING in the top level directory
* FILE: subsys/system/servman/propsheet.c
* PURPOSE: Property dialog box message handler
* COPYRIGHT: Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
*
*/
#include "servman.h"
extern ENUM_SERVICE_STATUS_PROCESS *pServiceStatus;
extern HINSTANCE hInstance;
extern HWND hListView;
extern HWND hMainWnd;
typedef struct _PROP_DLG_INFO
{
LPTSTR lpServiceName;
LPTSTR lpDisplayName;
LPTSTR lpDescription;
LPTSTR lpPathToExe;
TCHAR szStartupType;
TCHAR szServiceStatus[25];
LPTSTR lpStartParams;
} PROP_DLG_INFO, *PPROP_DLG_INFO;
/*
* Fills the 'startup type' combo box with possible
* values and sets it to value of the selected item
*/
VOID SetStartupType(HKEY hKey, HWND hwndDlg)
{
HWND hList;
TCHAR buf[25];
DWORD dwValueSize = 0;
DWORD StartUp = 0;
hList = GetDlgItem(hwndDlg, IDC_START_TYPE);
LoadString(hInstance, IDS_SERVICES_AUTO, buf, sizeof(buf) / sizeof(TCHAR));
SendMessage(hList, CB_ADDSTRING, 0, (LPARAM)buf);
LoadString(hInstance, IDS_SERVICES_MAN, buf, sizeof(buf) / sizeof(TCHAR));
SendMessage(hList, CB_ADDSTRING, 0, (LPARAM)buf);
LoadString(hInstance, IDS_SERVICES_DIS, buf, sizeof(buf) / sizeof(TCHAR));
SendMessage(hList, CB_ADDSTRING, 0, (LPARAM)buf);
dwValueSize = sizeof(DWORD);
if (RegQueryValueEx(hKey,
_T("Start"),
NULL,
NULL,
(LPBYTE)&StartUp,
&dwValueSize))
{
RegCloseKey(hKey);
return;
}
if (StartUp == 0x02)
SendMessage(hList, CB_SETCURSEL, 0, 0);
else if (StartUp == 0x03)
SendMessage(hList, CB_SETCURSEL, 1, 0);
else if (StartUp == 0x04)
SendMessage(hList, CB_SETCURSEL, 2, 0);
}
/*
* Populates the General Properties dialog with
* the relevant service information
*/
VOID GetDlgInfo(HWND hwndDlg)
{
HKEY hKey;
ENUM_SERVICE_STATUS_PROCESS *Service = NULL;
PROP_DLG_INFO DlgInfo;
LPCTSTR Path = _T("System\\CurrentControlSet\\Services\\%s");
TCHAR buf[300];
/* get pointer to selected service */
Service = GetSelectedService();
/* open the registry key for the service */
_sntprintf(buf, sizeof(buf) / sizeof(TCHAR), Path, Service->lpServiceName);
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
buf,
0,
KEY_READ,
&hKey);
/* set the service name */
DlgInfo.lpServiceName = Service->lpServiceName;
SendDlgItemMessage(hwndDlg, IDC_SERV_NAME, WM_SETTEXT, 0, (
LPARAM)DlgInfo.lpServiceName);
/* set the display name */
DlgInfo.lpDisplayName = Service->lpDisplayName;
SendDlgItemMessage(hwndDlg, IDC_DISP_NAME, WM_SETTEXT, 0,
(LPARAM)DlgInfo.lpDisplayName);
/* set the description */
if (GetDescription(hKey, &DlgInfo.lpDescription))
SendDlgItemMessage(hwndDlg, IDC_DESCRIPTION, WM_SETTEXT, 0,
(LPARAM)DlgInfo.lpDescription);
/* set the executable path */
if (GetExecutablePath(&DlgInfo.lpPathToExe))
SendDlgItemMessage(hwndDlg, IDC_EXEPATH, WM_SETTEXT, 0, (LPARAM)DlgInfo.lpPathToExe);
/* set startup type */
SetStartupType(hKey, hwndDlg);
/* set service status */
if (Service->ServiceStatusProcess.dwCurrentState == SERVICE_RUNNING)
{
LoadString(hInstance, IDS_SERVICES_STARTED, DlgInfo.szServiceStatus,
sizeof(DlgInfo.szServiceStatus) / sizeof(TCHAR));
SendDlgItemMessageW(hwndDlg, IDC_SERV_STATUS, WM_SETTEXT, 0, (LPARAM)DlgInfo.szServiceStatus);
}
else
{
LoadString(hInstance, IDS_SERVICES_STOPPED, DlgInfo.szServiceStatus,
sizeof(DlgInfo.szServiceStatus) / sizeof(TCHAR));
SendDlgItemMessageW(hwndDlg, IDC_SERV_STATUS, WM_SETTEXT, 0, (LPARAM)DlgInfo.szServiceStatus);
}
}
#ifdef _MSC_VER
#pragma warning(disable : 4100)
#endif
/*
* General Property dialog callback.
* Controls messages to the General dialog
*/
/* FIXME: this may be better as a modeless dialog */
INT_PTR CALLBACK
GeneralPageProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
GetDlgInfo(hwndDlg);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_START:
SendMessage(hMainWnd, WM_COMMAND, ID_START, 0);
break;
case IDC_STOP:
SendMessage(hMainWnd, WM_COMMAND, ID_STOP, 0);
break;
case IDC_PAUSE:
SendMessage(hMainWnd, WM_COMMAND, ID_PAUSE, 0);
break;
case IDC_RESUME:
SendMessage(hMainWnd, WM_COMMAND, ID_RESUME, 0);
break;
}
break;
case WM_DESTROY:
break;
case WM_NOTIFY:
{
LPNMHDR lpnm = (LPNMHDR)lParam;
switch (lpnm->code)
default:
break;
}
break;
}
return FALSE;
}
/*
* Dependancies Property dialog callback.
* Controls messages to the Dependancies dialog
*/
/* FIXME: this may be better as a modeless dialog */
INT_PTR CALLBACK
DependanciesPageProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_START:
break;
case IDC_STOP:
break;
}
break;
case WM_DESTROY:
break;
case WM_NOTIFY:
{
LPNMHDR lpnm = (LPNMHDR)lParam;
switch (lpnm->code)
default:
break;
}
break;
}
return FALSE;
}
static VOID
InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc)
{
ZeroMemory(psp, sizeof(PROPSHEETPAGE));
psp->dwSize = sizeof(PROPSHEETPAGE);
psp->dwFlags = PSP_DEFAULT;
psp->hInstance = hInstance;
psp->pszTemplate = MAKEINTRESOURCE(idDlg);
psp->pfnDlgProc = DlgProc;
}
LONG APIENTRY
OpenPropSheet(HWND hwnd)
{
PROPSHEETHEADER psh;
PROPSHEETPAGE psp[2];
TCHAR Caption[256];
LoadString(hInstance, IDS_PROP_SHEET, Caption, sizeof(Caption) / sizeof(TCHAR));
ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE;
psh.hwndParent = NULL;
psh.hInstance = hInstance;
psh.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SM_ICON));
psh.pszCaption = Caption;
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
psh.nStartPage = 0;
psh.ppsp = psp;
InitPropSheetPage(&psp[0], IDD_DLG_GENERAL, GeneralPageProc);
//InitPropSheetPage(&psp[1], IDD_DLG_GENERAL, LogonPageProc);
//InitPropSheetPage(&psp[2], IDD_DLG_GENERAL, RecoveryPageProc);
InitPropSheetPage(&psp[1], IDD_DLG_DEPEND, DependanciesPageProc);
return (LONG)(PropertySheet(&psh) != -1);
}

View file

@ -0,0 +1,619 @@
/*
* PROJECT: ReactOS Services
* LICENSE: GPL - See COPYING in the top level directory
* FILE: subsys/system/servman/query.c
* PURPOSE: Query service information
* COPYRIGHT: Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
*
*/
#include "servman.h"
extern HINSTANCE hInstance;
extern HWND hListView;
extern HWND hStatus;
/* Stores the complete services array */
ENUM_SERVICE_STATUS_PROCESS *pServiceStatus = NULL;
/* Free service array */
VOID FreeMemory(VOID)
{
HeapFree(GetProcessHeap(), 0, pServiceStatus);
}
ENUM_SERVICE_STATUS_PROCESS*
GetSelectedService(VOID)
{
ENUM_SERVICE_STATUS_PROCESS *pSelectedService = NULL;
LVITEM item;
item.mask = LVIF_PARAM;
item.iItem = GetSelectedItem();
SendMessage(hListView, LVM_GETITEM, 0, (LPARAM)&item);
/* copy pointer to selected service */
pSelectedService = (ENUM_SERVICE_STATUS_PROCESS *)item.lParam;
return pSelectedService;
}
/* Retrives the service description from the registry */
BOOL GetDescription(HKEY hKey, LPTSTR *retDescription)
{
LPTSTR Description = NULL;
DWORD dwValueSize = 0;
LONG ret = RegQueryValueEx(hKey,
_T("Description"),
NULL,
NULL,
NULL,
&dwValueSize);
if (ret != ERROR_SUCCESS && ret != ERROR_FILE_NOT_FOUND && ret != ERROR_INVALID_HANDLE)
{
RegCloseKey(hKey);
return FALSE;
}
if (ret != ERROR_FILE_NOT_FOUND)
{
Description = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwValueSize);
if (Description == NULL)
{
RegCloseKey(hKey);
return FALSE;
}
if(RegQueryValueEx(hKey,
_T("Description"),
NULL,
NULL,
(LPBYTE)Description,
&dwValueSize))
{
HeapFree(GetProcessHeap(), 0, Description);
RegCloseKey(hKey);
return FALSE;
}
}
/* copy pointer over */
*retDescription = Description;
return TRUE;
}
/* get vendor of service binary */
BOOL GetExecutablePath(LPTSTR *ExePath)
{
SC_HANDLE hSCManager = NULL;
SC_HANDLE hSc = NULL;
LPQUERY_SERVICE_CONFIG pServiceConfig = NULL;
ENUM_SERVICE_STATUS_PROCESS *Service = NULL;
DWORD BytesNeeded = 0;
/* copy pointer to selected service */
Service = GetSelectedService();
/* open handle to the SCM */
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
if (hSCManager == NULL)
{
GetError(0);
return FALSE;
}
/* get a handle to the service requested for starting */
hSc = OpenService(hSCManager, Service->lpServiceName, SERVICE_QUERY_CONFIG);
if (hSc == NULL)
{
GetError(0);
goto cleanup;
}
if (!QueryServiceConfig(hSc, pServiceConfig, 0, &BytesNeeded))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
pServiceConfig = (LPQUERY_SERVICE_CONFIG)
HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceConfig == NULL)
goto cleanup;
if (!QueryServiceConfig(hSc,
pServiceConfig,
BytesNeeded,
&BytesNeeded))
{
HeapFree(GetProcessHeap(), 0, pServiceConfig);
goto cleanup;
}
}
else /* exit on failure */
{
goto cleanup;
}
}
*ExePath = pServiceConfig->lpBinaryPathName;
CloseServiceHandle(hSCManager);
CloseServiceHandle(hSc);
return TRUE;
cleanup:
if (hSCManager != NULL)
CloseServiceHandle(hSCManager);
if (hSc != NULL)
CloseServiceHandle(hSc);
return FALSE;
}
BOOL
RefreshServiceList(VOID)
{
LVITEM item;
TCHAR szNumServices[32];
TCHAR szStatus[64];
DWORD NumServices = 0;
DWORD Index;
LPCTSTR Path = _T("System\\CurrentControlSet\\Services\\%s");
ListView_DeleteAllItems(hListView);
NumServices = GetServiceList();
if (NumServices)
{
HICON hiconItem; /* icon for list-view items */
HIMAGELIST hSmall; /* image list for other views */
TCHAR buf[300]; /* buffer to hold key path */
INT NumListedServ = 0; /* how many services were listed */
/* Create the icon image lists */
hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON), ILC_MASK | ILC_COLOR16, 1, 1);
/* Add an icon to each image list */
hiconItem = LoadImage(hInstance, MAKEINTRESOURCE(IDI_SM_ICON),
IMAGE_ICON, 16, 16, 0);
ImageList_AddIcon(hSmall, hiconItem);
/* assign the image to the list view */
ListView_SetImageList(hListView, hSmall, LVSIL_SMALL);
for (Index = 0; Index < NumServices; Index++)
{
HKEY hKey = NULL;
LPTSTR Description = NULL;
LPTSTR LogOnAs = NULL;
DWORD StartUp = 0;
DWORD dwValueSize;
/* open the registry key for the service */
_sntprintf(buf, 300, Path,
pServiceStatus[Index].lpServiceName);
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
buf,
0,
KEY_READ,
&hKey);
/* set the display name */
ZeroMemory(&item, sizeof(LVITEM));
item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = pServiceStatus[Index].lpDisplayName;
/* Set a pointer for each service so we can query it later.
* Not all services are added to the list, so we can't query
* the item number as they become out of sync with the array */
item.lParam = (LPARAM)&pServiceStatus[Index];
item.iItem = ListView_GetItemCount(hListView);
item.iItem = ListView_InsertItem(hListView, &item);
/* set the description */
if (GetDescription(hKey, &Description))
{
item.pszText = Description;
item.iSubItem = 1;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
HeapFree(GetProcessHeap(), 0, Description);
}
/* set the status */
if (pServiceStatus[Index].ServiceStatusProcess.dwCurrentState
== SERVICE_RUNNING)
{
LoadString(hInstance, IDS_SERVICES_STARTED, szStatus,
sizeof(szStatus) / sizeof(TCHAR));
item.pszText = szStatus;
item.iSubItem = 2;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
/* set the startup type */
dwValueSize = sizeof(DWORD);
if (RegQueryValueEx(hKey,
_T("Start"),
NULL,
NULL,
(LPBYTE)&StartUp,
&dwValueSize))
{
RegCloseKey(hKey);
continue;
}
if (StartUp == 0x02)
{
LoadString(hInstance, IDS_SERVICES_AUTO, szStatus,
sizeof(szStatus) / sizeof(TCHAR));
item.pszText = szStatus;
item.iSubItem = 3;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
else if (StartUp == 0x03)
{
LoadString(hInstance, IDS_SERVICES_MAN, szStatus,
sizeof(szStatus) / sizeof(TCHAR));
item.pszText = szStatus;
item.iSubItem = 3;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
else if (StartUp == 0x04)
{
LoadString(hInstance, IDS_SERVICES_DIS, szStatus,
sizeof(szStatus) / sizeof(TCHAR));
item.pszText = szStatus;
item.iSubItem = 3;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
/* set Log On As */
dwValueSize = 0;
if (RegQueryValueEx(hKey,
_T("ObjectName"),
NULL,
NULL,
NULL,
&dwValueSize))
{
RegCloseKey(hKey);
continue;
}
LogOnAs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwValueSize);
if (LogOnAs == NULL)
{
RegCloseKey(hKey);
return FALSE;
}
if(RegQueryValueEx(hKey,
_T("ObjectName"),
NULL,
NULL,
(LPBYTE)LogOnAs,
&dwValueSize))
{
HeapFree(GetProcessHeap(), 0, LogOnAs);
RegCloseKey(hKey);
continue;
}
item.pszText = LogOnAs;
item.iSubItem = 4;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
HeapFree(GetProcessHeap(), 0, LogOnAs);
RegCloseKey(hKey);
}
NumListedServ = ListView_GetItemCount(hListView);
/* set the number of listed services in the status bar */
LoadString(hInstance, IDS_NUM_SERVICES, szNumServices,
sizeof(szNumServices) / sizeof(TCHAR));
_sntprintf(buf, 300, szNumServices, NumListedServ);
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)buf);
}
/* turn redraw flag on. It's turned off initially via the LBS_NOREDRAW flag */
SendMessage (hListView, WM_SETREDRAW, TRUE, 0) ;
return TRUE;
}
DWORD
GetServiceList(VOID)
{
SC_HANDLE ScHandle;
DWORD BytesNeeded = 0;
DWORD ResumeHandle = 0;
DWORD NumServices = 0;
ScHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
if (ScHandle != INVALID_HANDLE_VALUE)
{
if (EnumServicesStatusEx(ScHandle,
SC_ENUM_PROCESS_INFO,
SERVICE_WIN32,
SERVICE_STATE_ALL,
(LPBYTE)pServiceStatus,
0, &BytesNeeded,
&NumServices,
&ResumeHandle,
0) == 0)
{
/* Call function again if required size was returned */
if (GetLastError() == ERROR_MORE_DATA)
{
/* reserve memory for service info array */
pServiceStatus = (ENUM_SERVICE_STATUS_PROCESS *)
HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceStatus == NULL)
return FALSE;
/* fill array with service info */
if (EnumServicesStatusEx(ScHandle,
SC_ENUM_PROCESS_INFO,
SERVICE_WIN32,
SERVICE_STATE_ALL,
(LPBYTE)pServiceStatus,
BytesNeeded,
&BytesNeeded,
&NumServices,
&ResumeHandle,
0) == 0)
{
HeapFree(GetProcessHeap(), 0, pServiceStatus);
return FALSE;
}
}
else /* exit on failure */
{
return FALSE;
}
}
}
CloseServiceHandle(ScHandle);
return NumServices;
}
/*
//WORD wCodePage;
//WORD wLangID;
//SC_HANDLE hService;
//DWORD dwHandle, dwLen;
//UINT BufLen;
//TCHAR* lpData;
//TCHAR* lpBuffer;
//TCHAR szStrFileInfo[80];
//TCHAR FileName[MAX_PATH];
//LPVOID pvData;
//LPSERVICE_FAILURE_ACTIONS pServiceFailureActions = NULL;
//LPQUERY_SERVICE_CONFIG pServiceConfig = NULL;
BytesNeeded = 0;
hService = OpenService(ScHandle,
pServiceStatus[Index].lpServiceName,
SC_MANAGER_CONNECT);
if (hService != INVALID_HANDLE_VALUE)
{
/ * check if service is required by the system* /
if (!QueryServiceConfig2(hService,
SERVICE_CONFIG_FAILURE_ACTIONS,
(LPBYTE)pServiceFailureActions,
0,
&BytesNeeded))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
pServiceFailureActions = (LPSERVICE_FAILURE_ACTIONS)
HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceFailureActions == NULL)
return FALSE;
if (!QueryServiceConfig2(hService,
SERVICE_CONFIG_FAILURE_ACTIONS,
(LPBYTE)pServiceFailureActions,
BytesNeeded,
&BytesNeeded))
{
HeapFree(GetProcessHeap(), 0, pServiceFailureActions);
return FALSE;
}
}
else / * exit on failure * /
{
return FALSE;
}
}
if (pServiceFailureActions->cActions)
{
if (pServiceFailureActions->lpsaActions[0].Type == SC_ACTION_REBOOT)
{
LoadString(hInstance, IDS_SERVICES_YES, szStatus, 128);
item.pszText = szStatus;
item.iSubItem = 1;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
}
if (pServiceFailureActions != NULL)
{
HeapFree(GetProcessHeap(), 0, pServiceFailureActions);
pServiceFailureActions = NULL;
}
/ * get vendor of service binary * /
BytesNeeded = 0;
if (!QueryServiceConfig(hService, pServiceConfig, 0, &BytesNeeded))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
pServiceConfig = (LPQUERY_SERVICE_CONFIG)
HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceConfig == NULL)
return FALSE;
if (!QueryServiceConfig(hService,
pServiceConfig,
BytesNeeded,
&BytesNeeded))
{
HeapFree(GetProcessHeap(), 0, pServiceConfig);
return FALSE;
}
}
else / * exit on failure * /
{
return FALSE;
}
}
memset(&FileName, 0, MAX_PATH);
if (_tcscspn(pServiceConfig->lpBinaryPathName, _T("\"")))
{
_tcsncpy(FileName, pServiceConfig->lpBinaryPathName,
_tcscspn(pServiceConfig->lpBinaryPathName, _T(" ")) );
}
else
{
_tcscpy(FileName, pServiceConfig->lpBinaryPathName);
}
HeapFree(GetProcessHeap(), 0, pServiceConfig);
pServiceConfig = NULL;
dwLen = GetFileVersionInfoSize(FileName, &dwHandle);
if (dwLen)
{
lpData = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, dwLen);
if (lpData == NULL)
return FALSE;
if (!GetFileVersionInfo (FileName, dwHandle, dwLen, lpData)) {
HeapFree(GetProcessHeap(), 0, lpData);
return FALSE;
}
if (VerQueryValue(lpData, _T("\\VarFileInfo\\Translation"), &pvData, (PUINT) &BufLen))
{
wCodePage = LOWORD(*(DWORD*) pvData);
wLangID = HIWORD(*(DWORD*) pvData);
wsprintf(szStrFileInfo, _T("StringFileInfo\\%04X%04X\\CompanyName"), wCodePage, wLangID);
}
if (VerQueryValue (lpData, szStrFileInfo, (LPVOID) &lpBuffer, (PUINT) &BufLen)) {
item.pszText = lpBuffer;
item.iSubItem = 2;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
HeapFree(GetProcessHeap(), 0, lpData);
}
else
{
LoadString(hInstance, IDS_SERVICES_UNKNOWN, szStatus, 128);
item.pszText = szStatus;
item.iSubItem = 2;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
CloseServiceHandle(hService);
}
HeapFree(GetProcessHeap(), 0, pServiceConfig);
pServiceConfig = NULL;
dwLen = GetFileVersionInfoSize(FileName, &dwHandle);
if (dwLen)
{
lpData = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, dwLen);
if (lpData == NULL)
return FALSE;
if (!GetFileVersionInfo (FileName, dwHandle, dwLen, lpData)) {
HeapFree(GetProcessHeap(), 0, lpData);
return FALSE;
}
if (VerQueryValue(lpData, _T("\\VarFileInfo\\Translation"),
&pvData, (PUINT) &BufLen))
{
wCodePage = LOWORD(*(DWORD*) pvData);
wLangID = HIWORD(*(DWORD*) pvData);
wsprintf(szStrFileInfo, _T("StringFileInfo\\%04X%04X\\CompanyName"),
wCodePage, wLangID);
}
if (VerQueryValue (lpData, szStrFileInfo, (LPVOID) &lpBuffer, (PUINT) &BufLen))
{
item.pszText = lpBuffer;
item.iSubItem = 2;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
HeapFree(GetProcessHeap(), 0, lpData);
}
else
{
LoadString(hInstance, IDS_SERVICES_UNKNOWN, szStatus, 128);
item.pszText = szStatus;
item.iSubItem = 2;
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
}
*/

Some files were not shown because too many files have changed in this diff Show more