initial checkin of the non-shell-namespace-based control panel and software add/remove cpl

svn path=/trunk/; revision=9715
This commit is contained in:
Gero Kuehn 2004-06-18 20:43:44 +00:00
parent 86c4140124
commit 038cca4d58
20 changed files with 1217 additions and 1 deletions

View file

@ -6,7 +6,7 @@ PATH_TO_TOP = ../..
include $(PATH_TO_TOP)/rules.mak
CONTROL_PANELS = sysdm
CONTROL_PANELS = sysdm appwiz control
all: $(CONTROL_PANELS)

View file

@ -0,0 +1,14 @@
*.coff
*.cpl
*.d
*.a
*.o
*.sym
*.map
*.tmp
*.ncb
*.opt
*.plg
Debug
Release

View file

@ -0,0 +1,47 @@
# $Id: Makefile,v 1.1 2004/06/18 20:43:44 kuehng Exp $
PATH_TO_TOP = ../../..
TARGET_TYPE = dynlink
TARGET_EXTENSION = .cpl
TARGET_NAME = appwiz
TARGET_INSTALLDIR = system32
TARGET_BASE = $(TARGET_BASE_LIB_CPL_SYSDM)
TARGET_CFLAGS = \
-I./include \
-DUNICODE \
-D_UNICODE \
-D__REACTOS__ \
-Wall \
-Werror \
-fno-builtin
TARGET_LFLAGS = -nostartfiles
TARGET_SDKLIBS = kernel32.a user32.a comctl32.a
TARGET_GCCLIBS = gcc
TARGET_PCH =
TARGET_CLEAN =
TARGET_OBJECTS = appwiz.o
DEP_OBJECTS = $(TARGET_OBJECTS)
include $(PATH_TO_TOP)/rules.mak
include $(TOOLS_PATH)/helper.mk
include $(TOOLS_PATH)/depend.mk
%/TAGS:
etags -o $(@D)/TAGS $(@D)/\*.c
etags: ./TAGS

View file

@ -0,0 +1,263 @@
/*
* ReactOS
* Copyright (C) 2004 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: appwiz.c,v 1.1 2004/06/18 20:43:44 kuehng Exp $
*
* PROJECT: ReactOS Software Control Panel
* FILE: lib/cpl/system/appwiz.c
* PURPOSE: ReactOS Software Control Panel
* PROGRAMMER: Gero Kuehn (reactos.filter@gkware.com)
* UPDATE HISTORY:
* 06-17-2004 Created
*/
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <tchar.h>
#include <windows.h>
#ifdef _MSC_VER
#include <commctrl.h>
#include <cpl.h>
#endif
#include <stdlib.h>
#include <tchar.h>
#include <process.h>
#include <stdio.h>
#include "resource.h"
#include "appwiz.h"
#define NUM_APPLETS (1)
LONG CALLBACK SystemApplet(VOID);
BOOL CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK ComputerPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
HINSTANCE hApplet = 0;
/* Applets */
APPLET Applets[NUM_APPLETS] =
{
{IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet}
};
void CallUninstall(HWND hwndDlg)
{
int nIndex;
nIndex = SendDlgItemMessage(hwndDlg,IDC_SOFTWARELIST,LB_GETCURSEL,0,0);
if(nIndex == -1)
MessageBox(hwndDlg,L"No item selected",L"Error",MB_ICONSTOP);
else {
HKEY hKey;
DWORD dwType = REG_SZ;
TCHAR pszUninstallString[MAX_PATH];
DWORD dwSize = MAX_PATH;
hKey = (HKEY)SendDlgItemMessage(hwndDlg,IDC_SOFTWARELIST,LB_GETITEMDATA,(WPARAM)nIndex,0);
if(RegQueryValueEx(hKey,L"UninstallString",NULL,&dwType,(BYTE*)pszUninstallString,&dwSize)==ERROR_SUCCESS)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si,0x00,sizeof(si));
si.cb = sizeof(si);
si.wShowWindow = SW_SHOW;
if(CreateProcess(NULL,pszUninstallString,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
} else {
MessageBox(hwndDlg,L"Unable to read UninstallString. This entry is invalid or has been created by an MSI installer.",L"Error",MB_ICONSTOP);
}
}
}
/* Property page dialog callback */
BOOL CALLBACK InstallPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
HKEY hKey;
int i=0;
TCHAR pszName[MAX_PATH];
FILETIME FileTime;
DWORD dwSize = MAX_PATH;
EnableWindow(GetDlgItem(hwndDlg,IDC_INSTALL),FALSE);
if(RegOpenKey(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall",&hKey)!=ERROR_SUCCESS) {
MessageBox(hwndDlg,L"Unable to open Uninstall Key",L"Error",MB_ICONSTOP);
return FALSE;
}
while(RegEnumKeyEx(hKey,i,pszName,&dwSize,NULL,NULL,NULL,&FileTime)==ERROR_SUCCESS)
{
HKEY hSubKey;
if(RegOpenKey(hKey,pszName,&hSubKey)==ERROR_SUCCESS)
{
DWORD dwType = REG_SZ;
TCHAR pszDisplayName[MAX_PATH];
DWORD dwSize = MAX_PATH;
ULONG index;
if(RegQueryValueEx(hSubKey,L"DisplayName",NULL,&dwType,(BYTE*)pszDisplayName,&dwSize)==ERROR_SUCCESS)
{
index = SendDlgItemMessage(hwndDlg,IDC_SOFTWARELIST,LB_ADDSTRING,0,(LPARAM)pszDisplayName);
SendDlgItemMessage(hwndDlg,IDC_SOFTWARELIST,LB_SETITEMDATA,index,(LPARAM)hSubKey);
}
}
dwSize = MAX_PATH;
i++;
}
RegCloseKey(hKey);
break;
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_SOFTWARELIST:
if(HIWORD(wParam)==LBN_DBLCLK)
{
CallUninstall(hwndDlg);
}
break;
case IDC_ADDREMOVE:
CallUninstall(hwndDlg);
break;
}
break;
}
return FALSE;
}
/* Property page dialog callback */
BOOL CALLBACK RosPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
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 = hApplet;
#ifdef _MSC_VER
psp->pszTemplate = MAKEINTRESOURCE(idDlg);
#else
psp->u1.pszTemplate = MAKEINTRESOURCE(idDlg);
#endif
psp->pfnDlgProc = DlgProc;
}
/* First Applet */
LONG CALLBACK
SystemApplet(VOID)
{
PROPSHEETPAGE psp[2];
PROPSHEETHEADER psh;
TCHAR Caption[1024];
LoadString(hApplet, IDS_CPLSYSTEMNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE;
psh.hwndParent = NULL;
psh.hInstance = hApplet;
#ifdef _MSC_VER
psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
#else
psh.u1.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
#endif
psh.pszCaption = Caption;
psh.nPages = sizeof(psp) / sizeof(PROPSHEETHEADER);
#ifdef _MSC_VER
psh.nStartPage = 0;
psh.ppsp = psp;
#else
psh.u2.nStartPage = 0;
psh.u3.ppsp = psp;
#endif
psh.pfnCallback = NULL;
InitPropSheetPage(&psp[0], IDD_PROPPAGEINSTALL, InstallPageProc);
InitPropSheetPage(&psp[1], IDD_PROPPAGEROSSETUP, RosPageProc);
return (LONG)(PropertySheet(&psh) != -1);
}
/* Control Panel Callback */
LONG CALLBACK CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
{
int i = (int)lParam1;
switch(uMsg)
{
case CPL_INIT:
{
return TRUE;
}
case CPL_GETCOUNT:
{
return NUM_APPLETS;
}
case CPL_INQUIRE:
{
CPLINFO *CPlInfo = (CPLINFO*)lParam2;
CPlInfo->lData = 0;
CPlInfo->idIcon = Applets[i].idIcon;
CPlInfo->idName = Applets[i].idName;
CPlInfo->idInfo = Applets[i].idDescription;
break;
}
case CPL_DBLCLK:
{
Applets[i].AppletProc();
break;
}
}
return FALSE;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
hApplet = hinstDLL;
break;
}
return TRUE;
}

View file

@ -0,0 +1,6 @@
LIBRARY appwiz.cpl
EXPORTS
CPlApplet
; EOF

View file

@ -0,0 +1,124 @@
# Microsoft Developer Studio Project File - Name="appwiz" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=appwiz - 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 "appwiz.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 "appwiz.mak" CFG="appwiz - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "appwiz - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "appwiz - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "appwiz - 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 1
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APPWIZ_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APPWIZ_EXPORTS" /D "_UNICODE" /D "UNICODE" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG" /d "_MSC_VER"
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 /dll /machine:I386
# ADD 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 comctl32.lib /nologo /dll /machine:I386 /out:"Release/appwiz.cpl"
!ELSEIF "$(CFG)" == "appwiz - 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 1
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APPWIZ_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APPWIZ_EXPORTS" /D "_UNICODE" /D "UNICODE" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG" /d "_MSC_VER"
# SUBTRACT RSC /x
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 /dll /debug /machine:I386 /pdbtype:sept
# ADD 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 comctl32.lib /nologo /dll /debug /machine:I386 /out:"Debug/appwiz.cpl" /pdbtype:sept
!ENDIF
# Begin Target
# Name "appwiz - Win32 Release"
# Name "appwiz - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\appwiz.c
# End Source File
# Begin Source File
SOURCE=.\appwiz.h
# End Source File
# Begin Source File
SOURCE=.\resource.h
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\appwiz.def
# End Source File
# Begin Source File
SOURCE=.\appwiz.rc
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View file

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

View file

@ -0,0 +1,6 @@
LIBRARY appwiz.cpl
EXPORTS
CPlApplet=CPlApplet@16
; EOF

View file

@ -0,0 +1,20 @@
#ifndef __CPL_APPWIZ_H
#define __CPL_APPWIZ_H
typedef LONG (CALLBACK *CPLAPPLET_PROC)(VOID);
typedef struct
{
int idIcon;
int idName;
int idDescription;
CPLAPPLET_PROC AppletProc;
} APPLET, *PAPPLET;
extern HINSTANCE hApplet;
void ShowLastWin32Error(HWND hWndOwner);
#endif /* __CPL_APPWIZ_H */
/* EOF */

View file

@ -0,0 +1,77 @@
#include "resource.h"
#ifdef _MSC_VER
#include <../../../include/reactos/resource.h>
#include <../../../include/defines.h>
#else
#include <reactos/resource.h>
#include <defines.h>
#endif
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
VS_VERSION_INFO VERSIONINFO
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", RES_STR_COMPANY_NAME
VALUE "FileDescription", "ReactOS Software Control Panel\0"
VALUE "FileVersion", RES_STR_FILE_VERSION
VALUE "InternalName", "appwiz\0"
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
VALUE "OriginalFilename", "appwiz.cpl\0"
VALUE "ProductName", RES_STR_PRODUCT_NAME
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
IDI_CPLSYSTEM ICON "resources/applet.ico"
IDD_PROPPAGEINSTALL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Install/Uninstall"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,18,16,16
LTEXT "To install a new program, click Install",-1,36,18,PROPSHEETWIDTH-48,8
PUSHBUTTON "&Install...", IDC_INSTALL, PROPSHEETWIDTH-(72), 36, 60, 14
LTEXT "", -1, PROPSHEETPADDING, 63, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN
ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,76,16,16
LTEXT "The following Software can be automatically removed. To remove a program or to modify its installed components, select it from the list and click Add/Remove.",-1,36,72,PROPSHEETWIDTH-48,32
LISTBOX IDC_SOFTWARELIST, PROPSHEETPADDING, 105, PROPSHEETWIDTH-12, 88, LBS_STANDARD | WS_TABSTOP
PUSHBUTTON "Add/&Remove", IDC_ADDREMOVE, PROPSHEETWIDTH-72, 198, 60, 14
END
IDD_PROPPAGEROSSETUP DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Reactos Setup"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
END
STRINGTABLE
BEGIN
IDS_CPLSYSTEMNAME "Add/Remove Programs"
IDS_CPLSYSTEMDESCRIPTION "Sets up programs and creates shortcuts."
END

View file

@ -0,0 +1,31 @@
#ifndef __CPL_RESOURCE_H
#define __CPL_RESOURCE_H
/* metrics */
#define PROPSHEETWIDTH 246
#define PROPSHEETHEIGHT 228
#define PROPSHEETPADDING 6
#define SYSTEM_COLUMN (0 * PROPSHEETPADDING)
// this is not supported by the MS Resource compiler:
//#define LABELLINE(x) 0 //(((PROPSHEETPADDING + 2) * x) + (x + 2))
#define ICONSIZE 16
/* ids */
#define IDI_CPLSYSTEM 100
#define IDD_PROPPAGEINSTALL 100
#define IDD_PROPPAGEROSSETUP 101
#define IDS_CPLSYSTEMNAME 1001
#define IDS_CPLSYSTEMDESCRIPTION 2001
/* controls */
#define IDC_INSTALL 101
#define IDC_SOFTWARELIST 102
#define IDC_ADDREMOVE 103
#endif /* __CPL_RESOURCE_H */
/* EOF */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,15 @@
*.coff
*.exe
*.d
*.a
*.o
*.sym
*.map
*.tmp
*.ncb
*.opt
*.plg
*.aps
Debug
Release

View file

@ -0,0 +1,38 @@
# $Id: Makefile,v 1.1 2004/06/18 20:43:44 kuehng Exp $
PATH_TO_TOP = ../../..
TARGET_TYPE = program
TARGET_NAME = control
TARGET_INSTALLDIR = system32
TARGET_APPTYPE = windows
MK_CFLAGS = -D_UNICODE -DUNICODE
MK_CPPFLAGS = -D_UNICODE -DUNICODE
MK_RCFLAGS = -D_UNICODE -DUNICODE
TARGET_SDKLIBS = kernel32.a user32.a comctl32.a
# TARGET_GCCLIBS = gcc
TARGET_PCH =
TARGET_CLEAN =
TARGET_OBJECTS = control.o
DEP_OBJECTS = $(TARGET_OBJECTS)
include $(PATH_TO_TOP)/rules.mak
include $(TOOLS_PATH)/helper.mk
include $(TOOLS_PATH)/depend.mk
%/TAGS:
etags -o $(@D)/TAGS $(@D)/\*.c
etags: ./TAGS

View file

@ -0,0 +1,267 @@
/*
* ReactOS
* Copyright (C) 2004 ReactOS Team
* Copyright (C) 2004 GkWare e.K.
*
* 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: control.cpp,v 1.1 2004/06/18 20:43:44 kuehng Exp $
*
* PROJECT: ReactOS System Control Panel
* FILE: lib/cpl/system/control.cpp
* PURPOSE: ReactOS System Control Panel
* PROGRAMMER: Gero Kuehn (reactos.filter@gkware.com)
* UPDATE HISTORY:
* 06-13-2004 Created
*/
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <tchar.h>
#include <windows.h>
#ifdef _MSC_VER
#include <commctrl.h>
#include <cpl.h>
#endif
#include "resource.h"
//#define CONTROL_DEBUG_ENABLE
#ifdef CONTROL_DEBUG_ENABLE
#define CTL_DEBUG(x) dbgprint x
#else
#define CTL_DEBUG(x)
#endif
HINSTANCE hInst;
HWND hMainWnd;
void dbgprint(TCHAR *format,...)
{
TCHAR buf[1000];
va_list va;
va_start(va,format);
_vstprintf(buf,format,va);
OutputDebugString(buf);
va_end(va);
}
#define MYWNDCLASS _T("CTLPANELCLASS")
HWND hListView;
typedef LONG (CALLBACK *CPLAPPLETFUNC)(HWND hwndCPL, UINT uMsg, LPARAM lParam1, LPARAM lParam2);
typedef struct CPLLISTENTRY{
TCHAR pszPath[MAX_PATH];
HMODULE hDLL;
CPLAPPLETFUNC pFunc;
CPLINFO CPLInfo;
int nIndex;
} CPLLISTENTRY;
void PopulateCPLList(HWND hLisCtrl)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
TCHAR pszSearchPath[MAX_PATH];
GetSystemDirectory(pszSearchPath,MAX_PATH);
_tcscat(pszSearchPath,_T("\\*.cpl"));
hFind = FindFirstFile(pszSearchPath,&fd);
HIMAGELIST hImgListSmall;
HIMAGELIST hImgListLarge;
hImgListSmall = ImageList_Create(16,16,ILC_COLOR,256,1000);
hImgListLarge = ImageList_Create(32,32,ILC_COLOR,256,1000);
while(hFind != INVALID_HANDLE_VALUE)
{
CTL_DEBUG((_T("Found %s\r\n"),fd.cFileName));
CPLLISTENTRY *pEntry;
pEntry = (CPLLISTENTRY*)malloc(sizeof(CPLLISTENTRY));
if(!pEntry)
break;
_tcscpy(pEntry->pszPath,pszSearchPath);
*_tcsrchr(pEntry->pszPath,'\\')=0;
_tcscat(pEntry->pszPath,_T("\\"));
_tcscat(pEntry->pszPath,fd.cFileName);
pEntry->hDLL = LoadLibrary(pEntry->pszPath);
CTL_DEBUG((_T("Handle %08X\r\n"),pEntry->hDLL));
pEntry->pFunc = (CPLAPPLETFUNC)GetProcAddress(pEntry->hDLL,_T("CPlApplet"));
CTL_DEBUG((_T("CPLFunc %08X\r\n"),pEntry->pFunc));
if(pEntry->pFunc && pEntry->pFunc(hLisCtrl,CPL_INIT,0,0))
{
for(int i=0;i<pEntry->pFunc(hLisCtrl,CPL_GETCOUNT,0,0);i++)
{
pEntry->pFunc(hLisCtrl,CPL_INQUIRE,0,(LPARAM)&pEntry->CPLInfo);
HICON hIcon = LoadIcon(pEntry->hDLL,MAKEINTRESOURCE(pEntry->CPLInfo.idIcon));
int index;
index = ImageList_AddIcon(hImgListSmall,hIcon);
ImageList_AddIcon(hImgListLarge,hIcon);
TCHAR Name[MAX_PATH];
LoadString(pEntry->hDLL,pEntry->CPLInfo.idName,Name,MAX_PATH);
if(_tcslen(Name))
{
LV_ITEM lvi;
memset(&lvi,0x00,sizeof(lvi));
lvi.mask=LVIF_TEXT|LVIF_PARAM|LVIF_STATE|LVIF_IMAGE;
lvi.pszText = Name;
lvi.state=0;
lvi.iImage=index;
lvi.lParam = (LPARAM)pEntry;
pEntry->nIndex = ListView_InsertItem(hLisCtrl,&lvi);
LoadString(pEntry->hDLL,pEntry->CPLInfo.idInfo,Name,MAX_PATH);
ListView_SetItemText(hLisCtrl,pEntry->nIndex,1,Name);
ListView_SetImageList(hLisCtrl,hImgListSmall,LVSIL_SMALL);
ListView_SetImageList(hLisCtrl,hImgListLarge,LVSIL_NORMAL);
}
}
}
if(!FindNextFile(hFind,&fd))
hFind = INVALID_HANDLE_VALUE;
}
}
LRESULT CALLBACK MyWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
RECT rect;
GetClientRect(hWnd,&rect);
hListView = CreateWindow(WC_LISTVIEW,_T(""),LVS_REPORT | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD|WS_BORDER|WS_TABSTOP,0,0,rect.right ,rect.bottom,hWnd,NULL,hInst,0);
CTL_DEBUG((_T("Listview Window %08X\r\n"),hListView));
LV_COLUMN column;
memset(&column,0x00,sizeof(column));
column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM|LVCF_TEXT;
column.fmt=LVCFMT_LEFT;
column.cx = 200;
column.iSubItem = 0;
column.pszText = _T("Name");
ListView_InsertColumn(hListView,0,&column);
column.cx = 200;
column.iSubItem = 1;
column.pszText = _T("Comment");
ListView_InsertColumn(hListView,1,&column);
PopulateCPLList(hListView);
ListView_SetColumnWidth(hListView,2,LVSCW_AUTOSIZE_USEHEADER);
ListView_Update(hListView,0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_SIZE:
GetClientRect(hWnd,&rect);
MoveWindow(hListView,0,0,rect.right,rect.bottom,TRUE);
break;
case WM_NOTIFY:
NMHDR *phdr;
phdr = (NMHDR*)lParam;
switch(phdr->code)
{
case NM_DBLCLK:
int nSelect;
nSelect=SendMessage(hListView,LVM_GETNEXTITEM,(WPARAM)-1,LVNI_FOCUSED);
if(nSelect==-1) // no items
{
MessageBox(hWnd,_T("No Items in ListView"),_T("Error"),MB_OK|MB_ICONINFORMATION);
break;
}
CTL_DEBUG((_T("Select %d\r\n"),nSelect));
LV_ITEM lvi;
memset(&lvi,0x00,sizeof(lvi));
lvi.iItem = nSelect;
lvi.mask = LVIF_PARAM;
ListView_GetItem(hListView,&lvi);
CPLLISTENTRY *pEntry;
pEntry = (CPLLISTENTRY *)lvi.lParam;
CTL_DEBUG((_T("Listview DblClk Entry %08X\r\n"),pEntry));
if(pEntry) {
CTL_DEBUG((_T("Listview DblClk Entry Func %08X\r\n"),pEntry->pFunc));
}
if(pEntry && pEntry->pFunc)
pEntry->pFunc(hListView,CPL_DBLCLK,pEntry->CPLInfo.lData,0);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case CM_LARGEICONS:
SetWindowLong(hListView,GWL_STYLE,LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD|WS_BORDER|WS_TABSTOP);
break;
case CM_SMALLICONS:
SetWindowLong(hListView,GWL_STYLE,LVS_SMALLICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD|WS_BORDER|WS_TABSTOP);
break;
case CM_LIST:
SetWindowLong(hListView,GWL_STYLE,LVS_LIST | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD|WS_BORDER|WS_TABSTOP);
break;
case CM_DETAILS:
SetWindowLong(hListView,GWL_STYLE,LVS_REPORT | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD|WS_BORDER|WS_TABSTOP);
break;
case CM_CLOSE:
DestroyWindow(hWnd);
break;
case CM_ABOUT:
MessageBox(hWnd,_T("Simple Control Panel (not Shell-namespace based)\rCopyright 2004 GkWare e.K.\rhttp://www.gkware.com\rReleased under the GPL"),_T("About the Control Panel"),MB_OK | MB_ICONINFORMATION);
break;
}
break;
default:
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
return 0;
}
#ifdef _MSVC
int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,WCHAR *lpCmdLine,int nCmdShow)
#else
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,char *lpCmdLine,int nCmdShow)
#endif
{
MSG msg;
hInst = hInstance;
CTL_DEBUG((_T("My Control Panel\r\n")));
WNDCLASS wc;
memset(&wc,0x00,sizeof(wc));
wc.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_MAINICON));
wc.lpszClassName = MYWNDCLASS;
wc.lpszMenuName = _T("MAINMENU");
wc.lpfnWndProc = MyWindowProc;
RegisterClass(&wc);
InitCommonControls();
hMainWnd = CreateWindow(MYWNDCLASS,_T("Control Panel"),WS_OVERLAPPEDWINDOW,300,300,500,300,NULL,LoadMenu(hInst,MAKEINTRESOURCE(IDM_MAINMENU)),hInst,0);
if(!hMainWnd) {
CTL_DEBUG((_T("Unable to create window\r\n")));
return -1;
}
ShowWindow(hMainWnd,nCmdShow);
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

View file

@ -0,0 +1,137 @@
# Microsoft Developer Studio Project File - Name="control" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=control - 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 "control.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 "control.mak" CFG="control - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "control - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "control - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "control - 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 "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "../../../" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG" /d "MS_COMPILER"
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:windows /machine:I386
# ADD 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 comctl32.lib /nologo /subsystem:windows /machine:I386
# Begin Custom Build
TargetDir=.\Release
TargetName=control
InputPath=.\Release\control.exe
InputName=control
SOURCE="$(InputPath)"
"C:\reactos\reactos\$(InputName).EXE" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
copy $(TargetDir)\$(TargetName).EXE C:\reactos\reactos
# End Custom Build
!ELSEIF "$(CFG)" == "control - 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 "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG" /d "MS_COMPILER"
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:windows /debug /machine:I386 /pdbtype:sept
# ADD 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 comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# Begin Custom Build
TargetDir=.\Debug
TargetName=control
InputPath=.\Debug\control.exe
InputName=control
SOURCE="$(InputPath)"
"C:\reactos\reactos\$(InputName).EXE" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
copy $(TargetDir)\$(TargetName).EXE C:\reactos\reactos
# End Custom Build
!ENDIF
# Begin Target
# Name "control - Win32 Release"
# Name "control - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\control.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\config.ico
# End Source File
# Begin Source File
SOURCE=.\control.rc
# End Source File
# End Group
# End Target
# End Project

View file

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

View file

@ -0,0 +1,86 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#ifndef MS_COMPILER
#include <reactos/resource.h>
#include <defines.h>
#else
#include <../../../include/reactos/resource.h>
#include <../../../include/defines.h>
#endif
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDM_MAINMENU MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Close", CM_CLOSE
END
POPUP "&View"
BEGIN
MENUITEM "Large Icons", CM_LARGEICONS
MENUITEM "Small Icons", CM_SMALLICONS
MENUITEM "List", CM_LIST
MENUITEM "Details", CM_DETAILS
END
POPUP "Help"
BEGIN
MENUITEM "About", CM_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_MAINICON ICON DISCARDABLE "resources\config.ico"
/////////////////////////////////////////////////////////////////////////////
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
VS_VERSION_INFO VERSIONINFO
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", RES_STR_COMPANY_NAME
VALUE "FileDescription", "ReactOS System Control Panel\0"
VALUE "FileVersion", RES_STR_FILE_VERSION
VALUE "InternalName", "control\0"
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
VALUE "OriginalFilename", "control.exe\0"
VALUE "ProductName", RES_STR_PRODUCT_NAME
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

View file

@ -0,0 +1,27 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by control.rc
//
#define IDR_MENU1 101
#define IDM_MAINMENU 101
#define IDI_MAINICON 104
#define ID_VIEW_LARGEICONS 40002
#define CM_LARGEICONS 40002
#define ID_VIEW_SMALLICONS 40003
#define CM_SMALLICONS 40003
#define ID_HELP_ABOUT 40007
#define CM_ABOUT 40007
#define CM_CLOSE 40008
#define CM_LIST 40009
#define CM_DETAILS 40010
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40011
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB