mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Addition of control panel applet support to shell32. Still need to clean local and do build testing. More to come soon.
svn path=/trunk/; revision=3550
This commit is contained in:
parent
939bdcdace
commit
eda8dee587
22 changed files with 5436 additions and 926 deletions
551
reactos/lib/shell32/control/control.c
Normal file
551
reactos/lib/shell32/control/control.c
Normal file
|
@ -0,0 +1,551 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel
|
||||
*
|
||||
* control.c
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
#include <cpl.h>
|
||||
#include <commctrl.h>
|
||||
#include <tchar.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
//#include <memory.h>
|
||||
//#include <process.h>
|
||||
|
||||
#include "control.h"
|
||||
#include "framewnd.h"
|
||||
#include "settings.h"
|
||||
|
||||
#include "shell32.h"
|
||||
#include "trace.h"
|
||||
|
||||
//#define _USE_WINE_WND_
|
||||
|
||||
//WINE_DEFAULT_DEBUG_CHANNEL(shlctrl);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Global Variables:
|
||||
//
|
||||
|
||||
HINSTANCE hInst;
|
||||
HWND hFrameWnd;
|
||||
HWND hStatusBar;
|
||||
HMENU hMenuFrame;
|
||||
|
||||
TCHAR szTitle[MAX_LOADSTRING];
|
||||
TCHAR szWindowClass[MAX_LOADSTRING];
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||
{
|
||||
RECT rect;
|
||||
WNDCLASSEX wcFrame = {
|
||||
sizeof(WNDCLASSEX),
|
||||
CS_HREDRAW | CS_VREDRAW/*style*/,
|
||||
FrameWndProc,
|
||||
0/*cbClsExtra*/,
|
||||
0/*cbWndExtra*/,
|
||||
hInstance,
|
||||
LoadIcon(hInstance, (LPCTSTR)MAKEINTRESOURCE(IDI_CONTROL)),
|
||||
LoadCursor(0, IDC_ARROW),
|
||||
0/*hbrBackground*/,
|
||||
0/*lpszMenuName*/,
|
||||
szWindowClass,
|
||||
(HICON)LoadImage(hInstance, (LPCTSTR)MAKEINTRESOURCE(IDI_CONTROL), IMAGE_ICON,
|
||||
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED)
|
||||
};
|
||||
ATOM hFrameWndClass = RegisterClassEx(&wcFrame); // register frame window class
|
||||
|
||||
hMenuFrame = LoadMenu(hInstance, (LPCTSTR)MAKEINTRESOURCE(IDR_CONTROL_MENU));
|
||||
|
||||
// Initialize the Windows Common Controls DLL
|
||||
InitCommonControls();
|
||||
|
||||
if (LoadSettings(&rect)) {
|
||||
hFrameWnd = CreateWindowEx(0, (LPCTSTR)(int)hFrameWndClass, szTitle,
|
||||
WS_OVERLAPPEDWINDOW | WS_EX_CLIENTEDGE,
|
||||
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
|
||||
NULL, hMenuFrame, hInstance, NULL/*lpParam*/);
|
||||
} else {
|
||||
hFrameWnd = CreateWindowEx(0, (LPCTSTR)(int)hFrameWndClass, szTitle,
|
||||
WS_OVERLAPPEDWINDOW | WS_EX_CLIENTEDGE,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
NULL, hMenuFrame, hInstance, NULL/*lpParam*/);
|
||||
}
|
||||
|
||||
|
||||
if (!hFrameWnd) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Create the status bar
|
||||
hStatusBar = CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS,
|
||||
_T(""), hFrameWnd, STATUS_WINDOW);
|
||||
if (hStatusBar) {
|
||||
// Create the status bar panes
|
||||
SetupStatusBar(hFrameWnd, FALSE);
|
||||
CheckMenuItem(GetSubMenu(hMenuFrame, ID_VIEW_MENU), ID_VIEW_STATUSBAR, MF_BYCOMMAND|MF_CHECKED);
|
||||
}
|
||||
ShowWindow(hFrameWnd, nCmdShow);
|
||||
UpdateWindow(hFrameWnd);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void ExitInstance(void)
|
||||
{
|
||||
DestroyMenu(hMenuFrame);
|
||||
}
|
||||
|
||||
|
||||
int APIENTRY ControlMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPCTSTR pCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
MSG msg;
|
||||
HACCEL hAccel;
|
||||
|
||||
// Initialize global strings
|
||||
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
|
||||
LoadString(hInstance, IDC_CONTROL, szWindowClass, MAX_LOADSTRING);
|
||||
|
||||
// Store instance handle in our global variable
|
||||
hInst = hInstance;
|
||||
|
||||
// Perform application initialization:
|
||||
if (!InitInstance(hInstance, nCmdShow)) {
|
||||
return FALSE;
|
||||
}
|
||||
hAccel = LoadAccelerators(hInstance, (LPCTSTR)IDC_CONTROL);
|
||||
|
||||
// Main message loop:
|
||||
while (GetMessage(&msg, (HWND)NULL, 0, 0)) {
|
||||
if (!TranslateAccelerator(msg.hwnd, hAccel, &msg)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
ExitInstance();
|
||||
return msg.wParam;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
CPlApplet* Control_UnloadApplet(CPlApplet* applet)
|
||||
{
|
||||
unsigned i;
|
||||
CPlApplet* next;
|
||||
|
||||
for (i = 0; i < applet->count; i++) {
|
||||
if (!applet->info[i].dwSize) continue;
|
||||
applet->proc(applet->hWnd, CPL_STOP, i, applet->info[i].lData);
|
||||
}
|
||||
if (applet->proc) applet->proc(applet->hWnd, CPL_EXIT, 0L, 0L);
|
||||
FreeLibrary(applet->hModule);
|
||||
next = applet->next;
|
||||
HeapFree(GetProcessHeap(), 0, applet);
|
||||
return next;
|
||||
}
|
||||
|
||||
CPlApplet* Control_LoadApplet(HWND hWnd, LPCTSTR cmd, CPlApplet** pListHead)
|
||||
{
|
||||
CPlApplet* applet;
|
||||
unsigned i;
|
||||
CPLINFO info;
|
||||
|
||||
if (!(applet = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*applet))))
|
||||
return applet;
|
||||
applet->hWnd = hWnd;
|
||||
if (!(applet->hModule = LoadLibrary(cmd))) {
|
||||
TRACE(_T("Cannot load control panel applet %s\n"), cmd);
|
||||
goto theError;
|
||||
}
|
||||
if (!(applet->proc = (APPLET_PROC)GetProcAddress(applet->hModule, "CPlApplet"))) {
|
||||
// if (!(applet->proc = (APPLET_PROC)GetProcAddress(applet->hModule, "_CPlApplet@16"))) {
|
||||
TRACE(_T("Not a valid control panel applet %s\n"), cmd);
|
||||
goto theError;
|
||||
}
|
||||
if (!applet->proc(hWnd, CPL_INIT, 0L, 0L)) {
|
||||
TRACE(_T("Init of applet has failed\n"));
|
||||
goto theError;
|
||||
}
|
||||
if ((applet->count = applet->proc(hWnd, CPL_GETCOUNT, 0L, 0L)) == 0) {
|
||||
TRACE(_T("No subprogram in applet\n"));
|
||||
goto theError;
|
||||
}
|
||||
applet = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, applet,
|
||||
// sizeof(*applet) + (applet->count - 1) * sizeof(NEWCPLINFOA));
|
||||
sizeof(*applet) + (applet->count - 0) * sizeof(NEWCPLINFO));
|
||||
for (i = 0; i < applet->count; i++) {
|
||||
// applet->info[i].dwSize = sizeof(NEWCPLINFOA);
|
||||
applet->info[i].dwSize = sizeof(NEWCPLINFO);
|
||||
/* proc is supposed to return a null value upon success for
|
||||
* CPL_INQUIRE and CPL_NEWINQUIRE
|
||||
* However, real drivers don't seem to behave like this
|
||||
* So, use introspection rather than return value
|
||||
*/
|
||||
applet->info[i].hIcon = 0;
|
||||
applet->proc(hWnd, CPL_NEWINQUIRE, i, (LPARAM)&applet->info[i]);
|
||||
if (applet->info[i].hIcon == 0) {
|
||||
applet->proc(hWnd, CPL_INQUIRE, i, (LPARAM)&info);
|
||||
if (info.idIcon == 0 || info.idName == 0) {
|
||||
TRACE(_T("Couldn't get info from sp %u\n"), i);
|
||||
applet->info[i].dwSize = 0;
|
||||
} else {
|
||||
/* convert the old data into the new structure */
|
||||
applet->info[i].dwFlags = 0;
|
||||
applet->info[i].dwHelpContext = 0;
|
||||
applet->info[i].lData = info.lData;
|
||||
// applet->info[i].hIcon = LoadIcon(applet->hModule, (LPCTSTR)MAKEINTRESOURCEA(info.idIcon));
|
||||
// applet->info[i].hIcon = LoadIcon(applet->hModule, (LPCTSTR)MAKEINTRESOURCE(info.idIcon));
|
||||
applet->info[i].hIcon = LoadImage(applet->hModule, (LPCTSTR)info.idIcon, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
|
||||
|
||||
LoadString(applet->hModule, info.idName, applet->info[i].szName, sizeof(applet->info[i].szName)/sizeof(TCHAR));
|
||||
//LoadString(applet->hModule, info.idInfo, applet->info[i].szInfo, sizeof(applet->info[i].szInfo)/sizeof(TCHAR));
|
||||
//applet->info[i].szHelpFile[0] = '\0';
|
||||
LoadString(applet->hModule, info.idInfo, applet->info[i].szInfo, 192);
|
||||
}
|
||||
} else {
|
||||
TRACE(_T("Using CPL_NEWINQUIRE data\n"));
|
||||
}
|
||||
}
|
||||
applet->next = *pListHead;
|
||||
*pListHead = applet;
|
||||
return applet;
|
||||
theError:
|
||||
Control_UnloadApplet(applet);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void Control_DoLaunch(CPlApplet** pListHead, HWND hWnd, LPCTSTR cmd)
|
||||
/* forms to parse:
|
||||
* foo.cpl,@sp,str
|
||||
* foo.cpl,@sp
|
||||
* foo.cpl,,str
|
||||
* foo.cpl @sp
|
||||
* foo.cpl str
|
||||
*/
|
||||
{
|
||||
TCHAR* buffer;
|
||||
TCHAR* beg = NULL;
|
||||
TCHAR* end;
|
||||
TCHAR ch;
|
||||
unsigned sp = 0;
|
||||
TCHAR* extraPmts = NULL;
|
||||
|
||||
buffer = HeapAlloc(GetProcessHeap(), 0, _tcslen(cmd) + 1);
|
||||
if (!buffer) return;
|
||||
|
||||
end = _tcscpy(buffer, cmd);
|
||||
|
||||
for (;;) {
|
||||
ch = *end;
|
||||
if (ch == _T(' ') || ch == _T(',') || ch == _T('\0')) {
|
||||
*end = _T('\0');
|
||||
if (beg) {
|
||||
if (*beg == _T('@')) {
|
||||
sp = _ttoi(beg + 1);
|
||||
} else if (*beg == _T('\0')) {
|
||||
sp = 0;
|
||||
} else {
|
||||
extraPmts = beg;
|
||||
}
|
||||
}
|
||||
if (ch == _T('\0')) break;
|
||||
beg = end + 1;
|
||||
if (ch == _T(' ')) while (end[1] == _T(' ')) end++;
|
||||
}
|
||||
end++;
|
||||
}
|
||||
#if 1
|
||||
Control_LoadApplet(hWnd, buffer, pListHead);
|
||||
if (*pListHead) {
|
||||
CPlApplet* applet = *pListHead;
|
||||
assert(applet && applet->next == NULL);
|
||||
if (sp >= applet->count) {
|
||||
TRACE(_T("Out of bounds (%u >= %u), setting to 0\n"), sp, applet->count);
|
||||
sp = 0;
|
||||
}
|
||||
if (applet->info[sp].dwSize) {
|
||||
if (!applet->proc(applet->hWnd, CPL_STARTWPARMS, sp, (LPARAM)extraPmts))
|
||||
applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].lData);
|
||||
}
|
||||
Control_UnloadApplet(applet);
|
||||
}
|
||||
#else
|
||||
|
||||
//static void Control_LaunchApplet(HWND hWnd, CPlEntry* pCPlEntry)
|
||||
|
||||
#endif
|
||||
HeapFree(GetProcessHeap(), 0, buffer);
|
||||
}
|
||||
|
||||
//int APIENTRY ControlMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPCTSTR lpCmdLine, int nCmdShow);
|
||||
|
||||
VOID Control_RunDLL(HWND hWnd, HINSTANCE hInst_unused, LPCTSTR lpCmdLine, DWORD nCmdShow)
|
||||
{
|
||||
CPanel panel;
|
||||
// TRACE("(0x%08x, 0x%08lx, %s, 0x%08lx)\n", hWnd, (DWORD)hInst, debugstr_a(lpCmdLine), nCmdShow);
|
||||
|
||||
memset(&panel, 0, sizeof(panel));
|
||||
|
||||
if (!lpCmdLine || !*lpCmdLine) {
|
||||
#ifdef _USE_WINE_WND_
|
||||
Control_DoWindow(&panel, hWnd, hInst);
|
||||
#else
|
||||
ControlMain(hInst, NULL, lpCmdLine, nCmdShow);
|
||||
#endif
|
||||
} else {
|
||||
Control_DoLaunch(&panel.first, hWnd, lpCmdLine);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#ifdef _USE_WINE_WND_
|
||||
|
||||
static void Control_WndProc_Create(HWND hWnd, const CREATESTRUCTA* cs)
|
||||
{
|
||||
CPanel* panel = (CPanel*)cs->lpCreateParams;
|
||||
|
||||
SetWindowLong(hWnd, 0, (LPARAM)panel);
|
||||
panel->status = 0;
|
||||
panel->hWnd = hWnd;
|
||||
}
|
||||
|
||||
#define XICON 32
|
||||
#define XSTEP 128
|
||||
#define YICON 32
|
||||
#define YSTEP 64
|
||||
|
||||
static BOOL Control_Localize(const CPanel* panel, unsigned cx, unsigned cy,
|
||||
CPlApplet** papplet, unsigned* psp)
|
||||
{
|
||||
unsigned i, x = (XSTEP-XICON)/2, y = 0;
|
||||
CPlApplet* applet;
|
||||
RECT rc;
|
||||
|
||||
GetClientRect(panel->hWnd, &rc);
|
||||
for (applet = panel->first; applet; applet = applet = applet->next) {
|
||||
for (i = 0; i < applet->count; i++) {
|
||||
if (!applet->info[i].dwSize) continue;
|
||||
if (x + XSTEP >= rc.right - rc.left) {
|
||||
x = (XSTEP-XICON)/2;
|
||||
y += YSTEP;
|
||||
}
|
||||
if (cx >= x && cx < x + XICON && cy >= y && cy < y + YSTEP) {
|
||||
*papplet = applet;
|
||||
*psp = i;
|
||||
return TRUE;
|
||||
}
|
||||
x += XSTEP;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static LRESULT Control_WndProc_Paint(const CPanel* panel, WPARAM wParam)
|
||||
{
|
||||
HDC hdc;
|
||||
PAINTSTRUCT ps;
|
||||
RECT rc, txtRect;
|
||||
unsigned i, x = 0, y = 0;
|
||||
CPlApplet* applet;
|
||||
HGDIOBJ hOldFont;
|
||||
|
||||
hdc = (wParam) ? (HDC)wParam : BeginPaint(panel->hWnd, &ps);
|
||||
hOldFont = SelectObject(hdc, GetStockObject(ANSI_VAR_FONT));
|
||||
GetClientRect(panel->hWnd, &rc);
|
||||
for (applet = panel->first; applet; applet = applet = applet->next) {
|
||||
for (i = 0; i < applet->count; i++) {
|
||||
if (x + XSTEP >= rc.right - rc.left) {
|
||||
x = 0;
|
||||
y += YSTEP;
|
||||
}
|
||||
if (!applet->info[i].dwSize) continue;
|
||||
DrawIcon(hdc, x + (XSTEP-XICON)/2, y, applet->info[i].hIcon);
|
||||
txtRect.left = x;
|
||||
txtRect.right = x + XSTEP;
|
||||
txtRect.top = y + YICON;
|
||||
txtRect.bottom = y + YSTEP;
|
||||
DrawText(hdc, applet->info[i].szName, -1, &txtRect,
|
||||
DT_CENTER | DT_VCENTER);
|
||||
x += XSTEP;
|
||||
}
|
||||
}
|
||||
SelectObject(hdc, hOldFont);
|
||||
if (!wParam) EndPaint(panel->hWnd, &ps);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static LRESULT Control_WndProc_LButton(CPanel* panel, LPARAM lParam, BOOL up)
|
||||
{
|
||||
unsigned i;
|
||||
CPlApplet* applet;
|
||||
|
||||
if (Control_Localize(panel, LOWORD(lParam), HIWORD(lParam), &applet, &i)) {
|
||||
if (up) {
|
||||
if (panel->clkApplet == applet && panel->clkSP == i) {
|
||||
applet->proc(applet->hWnd, CPL_DBLCLK, i, applet->info[i].lData);
|
||||
}
|
||||
} else {
|
||||
panel->clkApplet = applet;
|
||||
panel->clkSP = i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//static LRESULT WINAPI Control_WndProc(HWND hWnd, UINT wMsg,
|
||||
static LRESULT __stdcall Control_WndProc(HWND hWnd, UINT wMsg,
|
||||
WPARAM lParam1, LPARAM lParam2)
|
||||
{
|
||||
CPanel* panel = (CPanel*)GetWindowLongA(hWnd, 0);
|
||||
|
||||
if (panel || wMsg == WM_CREATE) {
|
||||
switch (wMsg) {
|
||||
case WM_CREATE:
|
||||
Control_WndProc_Create(hWnd, (CREATESTRUCTA*)lParam2);
|
||||
return 0;
|
||||
case WM_DESTROY:
|
||||
while ((panel->first = Control_UnloadApplet(panel->first)));
|
||||
break;
|
||||
case WM_PAINT:
|
||||
return Control_WndProc_Paint(panel, lParam1);
|
||||
case WM_LBUTTONUP:
|
||||
return Control_WndProc_LButton(panel, lParam2, TRUE);
|
||||
case WM_LBUTTONDOWN:
|
||||
return Control_WndProc_LButton(panel, lParam2, FALSE);
|
||||
/* EPP case WM_COMMAND: */
|
||||
/* EPP return Control_WndProc_Command(mwi, lParam1, lParam2); */
|
||||
}
|
||||
}
|
||||
|
||||
return DefWindowProcA(hWnd, wMsg, lParam1, lParam2);
|
||||
}
|
||||
|
||||
static void Control_DoInterface(CPanel* panel, HWND hWnd, HINSTANCE hInst)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
MSG msg;
|
||||
|
||||
wc.style = CS_HREDRAW|CS_VREDRAW;
|
||||
wc.lpfnWndProc = Control_WndProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = sizeof(CPlApplet*);
|
||||
wc.hInstance = hInst;
|
||||
wc.hIcon = 0;
|
||||
wc.hCursor = 0;
|
||||
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.lpszClassName = "Shell_Control_WndClass";
|
||||
|
||||
if (!RegisterClass(&wc)) return;
|
||||
|
||||
CreateWindowEx(0, wc.lpszClassName, "Wine Control Panel",
|
||||
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
hWnd, (HMENU)0, hInst, panel);
|
||||
if (!panel->hWnd) return;
|
||||
while (GetMessage(&msg, panel->hWnd, 0, 0)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
if (!panel->first) break;
|
||||
}
|
||||
}
|
||||
|
||||
static void Control_DoWindow(CPanel* panel, HWND hWnd, HINSTANCE hInst)
|
||||
{
|
||||
HANDLE h;
|
||||
WIN32_FIND_DATA fd;
|
||||
TCHAR buffer[MAX_PATH];
|
||||
|
||||
/* TRACE: should grab path somewhere from configuration */
|
||||
if ((h = FindFirstFile("c:\\winnt\\system32\\*.cpl", &fd)) != 0) {
|
||||
do {
|
||||
sprintf(buffer, "c:\\winnt\\system32\\%s", fd.cFileName);
|
||||
if (!strstr(fd.cFileName, "powercfg")) {
|
||||
Control_LoadApplet(hWnd, buffer, panel);
|
||||
}
|
||||
} while (FindNextFile(h, &fd));
|
||||
FindClose(h);
|
||||
}
|
||||
|
||||
if (panel->first) Control_DoInterface(panel, hWnd, hInst);
|
||||
}
|
||||
|
||||
#endif // _USE_WINE_WND_
|
||||
|
||||
#if 0
|
||||
/*************************************************************************
|
||||
* Control_RunDLL [SHELL32.@]
|
||||
*
|
||||
*/
|
||||
|
||||
VOID WINAPI
|
||||
Control_RunDLL(HWND hWnd, HINSTANCE hInst_unused, LPCSTR lpCmdLine, DWORD nCmdShow)
|
||||
{
|
||||
// TRACE("(0x%08x, 0x%08lx, %s, 0x%08lx)\n", hWnd, (DWORD)hInst, debugstr_a(lpCmdLine), nCmdShow);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Control_FillCache_RunDLL [SHELL32.@]
|
||||
*
|
||||
*/
|
||||
HRESULT WINAPI
|
||||
Control_FillCache_RunDLL(HWND hWnd, HANDLE hModule, DWORD w, DWORD x)
|
||||
{
|
||||
TRACE(_T("0x%04x 0x%04x 0x%04lx 0x%04lx stub\n"), hWnd, hModule, w, x);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* RunDLL_CallEntry16 [SHELL32.122]
|
||||
* the name is probably wrong
|
||||
*/
|
||||
HRESULT WINAPI
|
||||
RunDLL_CallEntry16(DWORD v, DWORD w, DWORD x, DWORD y, DWORD z)
|
||||
{
|
||||
TRACE(_T("0x%04lx 0x%04lx 0x%04lx 0x%04lx 0x%04lx stub\n"),v,w,x,y,z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* CallCPLEntry16 [SHELL32.166]
|
||||
*
|
||||
* called by desk.cpl on "Advanced" with:
|
||||
* hMod("DeskCp16.Dll"), pFunc("CplApplet"), 0, 1, 0xc, 0
|
||||
*
|
||||
*/
|
||||
DWORD WINAPI
|
||||
CallCPLEntry16(HMODULE hMod, FARPROC pFunc, DWORD dw3, DWORD dw4, DWORD dw5, DWORD dw6)
|
||||
{
|
||||
TRACE(_T("(%04x, %p, %08lx, %08lx, %08lx, %08lx): stub.\n"), hMod, pFunc, dw3, dw4, dw5, dw6);
|
||||
return 0x0deadbee;
|
||||
}
|
||||
#endif
|
174
reactos/lib/shell32/control/control.h
Normal file
174
reactos/lib/shell32/control/control.h
Normal file
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel
|
||||
*
|
||||
* control.h
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __CONTROL_H__
|
||||
#define __CONTROL_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
#define STATUS_WINDOW 2001
|
||||
#define TREE_WINDOW 2002
|
||||
#define LIST_WINDOW 2003
|
||||
|
||||
#define MAX_LOADSTRING 100
|
||||
#define SPLIT_WIDTH 5
|
||||
#define MAX_NAME_LEN 500
|
||||
|
||||
#define MAX_CPL_NAME 128
|
||||
#define MAX_CPL_INFO 128
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
typedef struct tagNEWCPLINFO {
|
||||
DWORD dwSize;
|
||||
DWORD dwFlags;
|
||||
DWORD dwHelpContext;
|
||||
LONG lData;
|
||||
HICON hIcon;
|
||||
TCHAR szName[32];
|
||||
TCHAR szInfo[64];
|
||||
TCHAR szHelpFile[128];
|
||||
} NEWCPLINFO;
|
||||
|
||||
*/
|
||||
typedef struct tagCPLAppletINFO {
|
||||
DWORD dwSize;
|
||||
DWORD dwFlags;
|
||||
DWORD dwHelpContext;
|
||||
LONG lData;
|
||||
HICON hIcon;
|
||||
TCHAR szName[32];
|
||||
TCHAR szInfo[192];
|
||||
// TCHAR szHelpFile[128];
|
||||
} CPLAppletINFO;
|
||||
|
||||
|
||||
typedef struct CPlApplet {
|
||||
struct CPlApplet* next; /* linked list */
|
||||
HWND hWnd;
|
||||
unsigned count; /* number of subprograms */
|
||||
HMODULE hModule; /* module of loaded applet */
|
||||
TCHAR filename[MAX_PATH];
|
||||
APPLET_PROC proc; /* entry point address */
|
||||
NEWCPLINFO info[1]; /* array of count information. dwSize field is 0 if entry is invalid */
|
||||
} CPlApplet;
|
||||
|
||||
typedef struct CPlEntry {
|
||||
CPlApplet* pCPlApplet; /* which cpl module we are associated with (contained in) */
|
||||
HWND hWnd; /* handle to existing window if we are already launched */
|
||||
unsigned nSubProg; /* which sub-program we are within the CPlApplet */
|
||||
unsigned nIconIndex; /* */
|
||||
long lData;
|
||||
// union {
|
||||
// NEWCPLINFO NewCplInfo;
|
||||
// CPLAppletINFO AppletInfo;
|
||||
// } info;
|
||||
} CPlEntry;
|
||||
|
||||
typedef struct CPanel {
|
||||
CPlApplet* first; /* linked list */
|
||||
HWND hWnd;
|
||||
unsigned status;
|
||||
CPlApplet* clkApplet;
|
||||
unsigned clkSP;
|
||||
} CPanel;
|
||||
|
||||
#ifndef CPL_STARTWPARMSW
|
||||
#undef CPL_STARTWPARMS
|
||||
#define CPL_STARTWPARMSW 10
|
||||
#ifdef UNICODE
|
||||
#define CPL_STARTWPARMS CPL_STARTWPARMSW
|
||||
#else
|
||||
#define CPL_STARTWPARMS CPL_STARTWPARMSA
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
enum OPTION_FLAGS {
|
||||
OPTIONS_AUTO_REFRESH = 0x01,
|
||||
OPTIONS_READ_ONLY_MODE = 0x02,
|
||||
OPTIONS_CONFIRM_ON_DELETE = 0x04,
|
||||
OPTIONS_SAVE_ON_EXIT = 0x08,
|
||||
OPTIONS_DISPLAY_BINARY_DATA = 0x10,
|
||||
OPTIONS_VIEW_TREE_ONLY = 0x20,
|
||||
OPTIONS_VIEW_DATA_ONLY = 0x40,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
HWND hWnd;
|
||||
HWND hTreeWnd;
|
||||
HWND hListWnd;
|
||||
int nFocusPanel; // 0: left 1: right
|
||||
int nSplitPos;
|
||||
WINDOWPLACEMENT pos;
|
||||
TCHAR szPath[MAX_PATH];
|
||||
} ChildWnd;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Global Variables:
|
||||
//
|
||||
extern HINSTANCE hInst;
|
||||
extern HWND hFrameWnd;
|
||||
extern HMENU hMenuFrame;
|
||||
extern HWND hStatusBar;
|
||||
extern HFONT hFont;
|
||||
extern enum OPTION_FLAGS Options;
|
||||
|
||||
extern TCHAR szTitle[];
|
||||
extern TCHAR szWindowClass[];
|
||||
|
||||
void Control_DoLaunch(CPlApplet** pListHead, HWND hWnd, LPCTSTR cmd);
|
||||
CPlApplet* Control_LoadApplet(HWND hWnd, LPCTSTR cmd, CPlApplet** pListHead);
|
||||
CPlApplet* Control_UnloadApplet(CPlApplet* applet);
|
||||
|
||||
|
||||
#ifdef __GNUC__
|
||||
typedef struct tagNMITEMACTIVATE{
|
||||
NMHDR hdr;
|
||||
int iItem;
|
||||
int iSubItem;
|
||||
UINT uNewState;
|
||||
UINT uOldState;
|
||||
UINT uChanged;
|
||||
POINT ptAction;
|
||||
LPARAM lParam;
|
||||
UINT uKeyFlags;
|
||||
} NMITEMACTIVATE, FAR *LPNMITEMACTIVATE;
|
||||
#define HDITEM HD_ITEM
|
||||
#define LPNMLISTVIEW LPNM_LISTVIEW
|
||||
#define NMLISTVIEW NM_LISTVIEW
|
||||
#define HDN_ENDDRAG TBN_ENDDRAG
|
||||
#define LVSICF_NOSCROLL LVS_NOSCROLL
|
||||
#define HDM_GETORDERARRAY (HDM_FIRST+19) // TODO: FIX ME
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __CONTROL_H__
|
458
reactos/lib/shell32/control/framewnd.c
Normal file
458
reactos/lib/shell32/control/framewnd.c
Normal file
|
@ -0,0 +1,458 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel Frame Window implementation
|
||||
*
|
||||
* framewnd.c
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
#include <cpl.h>
|
||||
#include <commctrl.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
#include <tchar.h>
|
||||
#include <process.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "control.h"
|
||||
#include "framewnd.h"
|
||||
#include "settings.h"
|
||||
#include "listview.h"
|
||||
//#include <shellapi.h>
|
||||
#include "trace.h"
|
||||
|
||||
|
||||
#ifdef __GNUC__
|
||||
int WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
|
||||
int WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
|
||||
#else
|
||||
int ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
|
||||
int ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
|
||||
#endif
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Global and Local Variables:
|
||||
//
|
||||
|
||||
DWORD nListStyle;
|
||||
DWORD nSortOrder;
|
||||
|
||||
static int nSelectedItem;
|
||||
static HWND hListWnd;
|
||||
static BOOL bInMenuLoop = FALSE; // Tells us if we are in the menu loop
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Local module support methods
|
||||
//
|
||||
|
||||
static void resize_frame_rect(HWND hWnd, PRECT prect)
|
||||
{
|
||||
RECT rt;
|
||||
/*
|
||||
if (IsWindowVisible(hToolBar)) {
|
||||
SendMessage(hToolBar, WM_SIZE, 0, 0);
|
||||
GetClientRect(hToolBar, &rt);
|
||||
prect->top = rt.bottom+3;
|
||||
prect->bottom -= rt.bottom+3;
|
||||
}
|
||||
*/
|
||||
if (IsWindowVisible(hStatusBar)) {
|
||||
SetupStatusBar(hWnd, TRUE);
|
||||
GetClientRect(hStatusBar, &rt);
|
||||
prect->bottom -= rt.bottom;
|
||||
}
|
||||
MoveWindow(hListWnd, prect->left, prect->top, prect->right, prect->bottom, TRUE);
|
||||
}
|
||||
|
||||
void resize_frame_client(HWND hWnd)
|
||||
{
|
||||
RECT rect;
|
||||
|
||||
GetClientRect(hWnd, &rect);
|
||||
resize_frame_rect(hWnd, &rect);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void OnEnterMenuLoop(HWND hWnd)
|
||||
{
|
||||
int nParts;
|
||||
|
||||
// Update the status bar pane sizes
|
||||
nParts = -1;
|
||||
SendMessage(hStatusBar, SB_SETPARTS, 1, (long)&nParts);
|
||||
bInMenuLoop = TRUE;
|
||||
SendMessage(hStatusBar, SB_SETTEXT, (WPARAM)0, (LPARAM)_T(""));
|
||||
}
|
||||
|
||||
static void OnExitMenuLoop(HWND hwndLV, HWND hWnd)
|
||||
{
|
||||
bInMenuLoop = FALSE;
|
||||
// Update the status bar pane sizes
|
||||
SetupStatusBar(hWnd, TRUE);
|
||||
UpdateStatusBar(hwndLV, -1);
|
||||
}
|
||||
|
||||
static void OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
|
||||
{
|
||||
TCHAR str[100];
|
||||
|
||||
_tcscpy(str, _T(""));
|
||||
if (nFlags & MF_POPUP) {
|
||||
if (hSysMenu != GetMenu(hWnd)) {
|
||||
if (nItemID == 2) nItemID = 5;
|
||||
}
|
||||
}
|
||||
if (LoadString(hInst, nItemID, str, 100)) {
|
||||
// load appropriate string
|
||||
LPTSTR lpsz = str;
|
||||
// first newline terminates actual string
|
||||
lpsz = _tcschr(lpsz, '\n');
|
||||
if (lpsz != NULL)
|
||||
*lpsz = '\0';
|
||||
}
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)str);
|
||||
}
|
||||
|
||||
void SetupStatusBar(HWND hWnd, BOOL bResize)
|
||||
{
|
||||
RECT rc;
|
||||
int nParts;
|
||||
GetClientRect(hWnd, &rc);
|
||||
nParts = rc.right;
|
||||
// nParts = -1;
|
||||
if (bResize)
|
||||
SendMessage(hStatusBar, WM_SIZE, 0, 0);
|
||||
SendMessage(hStatusBar, SB_SETPARTS, 1, (LPARAM)&nParts);
|
||||
}
|
||||
|
||||
void UpdateStatusBar(HWND hwndLV, int list_index)
|
||||
{
|
||||
static int last_list_index;
|
||||
TCHAR buffer[MAX_CPL_INFO];
|
||||
LVITEM item;
|
||||
|
||||
if (list_index == -1) list_index = last_list_index;
|
||||
last_list_index = list_index;
|
||||
//LPNMLISTVIEW pnmv = (LPNMLISTVIEW)lParam;
|
||||
//CPlEntry* pCPlEntry pCPLInfo = pnmv->lParam
|
||||
item.mask = LVIF_TEXT;
|
||||
item.iItem = last_list_index;
|
||||
item.pszText = buffer;
|
||||
item.cchTextMax = MAX_CPL_INFO;
|
||||
item.iSubItem = 1;
|
||||
if (ListView_GetItem(hwndLV, &item)) {
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)buffer);
|
||||
}
|
||||
}
|
||||
|
||||
static void toggle_child(HWND hWnd, UINT cmd, HWND hchild)
|
||||
{
|
||||
BOOL vis = IsWindowVisible(hchild);
|
||||
HMENU hMenuView = GetSubMenu(hMenuFrame, ID_VIEW_MENU);
|
||||
|
||||
CheckMenuItem(hMenuView, cmd, vis?MF_BYCOMMAND:MF_BYCOMMAND|MF_CHECKED);
|
||||
ShowWindow(hchild, vis?SW_HIDE:SW_SHOW);
|
||||
resize_frame_client(hWnd);
|
||||
}
|
||||
|
||||
static void OnPaint(HWND hWnd)
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
RECT rt;
|
||||
HDC hdc;
|
||||
|
||||
GetClientRect(hWnd, &rt);
|
||||
hdc = BeginPaint(hWnd, &ps);
|
||||
FillRect(ps.hdc, &rt, GetStockObject(LTGRAY_BRUSH));
|
||||
EndPaint(hWnd, &ps);
|
||||
}
|
||||
|
||||
static void SetListSytle(DWORD view)
|
||||
{
|
||||
HMENU hMenuView = GetSubMenu(hMenuFrame, ID_VIEW_MENU);
|
||||
DWORD dwListStyle = GetWindowLong(hListWnd, GWL_STYLE);
|
||||
dwListStyle &= ~(LVS_ICON | LVS_SMALLICON | LVS_LIST | LVS_REPORT);
|
||||
nListStyle = view;
|
||||
switch (view) {
|
||||
case ID_VIEW_LARGE_ICONS:
|
||||
dwListStyle |= LVS_ICON;
|
||||
break;
|
||||
case ID_VIEW_SMALL_ICONS:
|
||||
dwListStyle |= LVS_SMALLICON;
|
||||
break;
|
||||
case ID_VIEW_LIST:
|
||||
dwListStyle |= LVS_LIST;
|
||||
break;
|
||||
default:
|
||||
nListStyle = ID_VIEW_DETAILS;
|
||||
case ID_VIEW_DETAILS:
|
||||
dwListStyle |= LVS_REPORT;
|
||||
break;
|
||||
}
|
||||
SetWindowLong(hListWnd, GWL_STYLE, dwListStyle);
|
||||
CheckMenuItem(hMenuView, ID_VIEW_LARGE_ICONS, MF_BYCOMMAND);
|
||||
CheckMenuItem(hMenuView, ID_VIEW_SMALL_ICONS, MF_BYCOMMAND);
|
||||
CheckMenuItem(hMenuView, ID_VIEW_LIST, MF_BYCOMMAND);
|
||||
CheckMenuItem(hMenuView, ID_VIEW_DETAILS, MF_BYCOMMAND);
|
||||
CheckMenuItem(hMenuView, nListStyle, MF_BYCOMMAND|MF_CHECKED);
|
||||
}
|
||||
|
||||
void SetViewArrangement(DWORD cmd)
|
||||
{
|
||||
DWORD dwListStyle = GetWindowLong(hListWnd, GWL_STYLE);
|
||||
HMENU hMenuView = GetSubMenu(hMenuFrame, ID_VIEW_MENU);
|
||||
nSortOrder = cmd;
|
||||
dwListStyle &= ~(LVS_AUTOARRANGE);
|
||||
switch (cmd) {
|
||||
case ID_VIEW_ARRANGE_BY_NAME:
|
||||
SortListView(hListWnd, 0);
|
||||
break;
|
||||
case ID_VIEW_ARRANGE_BY_COMMENT:
|
||||
SortListView(hListWnd, 1);
|
||||
break;
|
||||
default:
|
||||
nSortOrder = ID_VIEW_ARRANGE_AUTO;
|
||||
case ID_VIEW_ARRANGE_AUTO:
|
||||
SortListView(hListWnd, -1);
|
||||
dwListStyle |= LVS_AUTOARRANGE;
|
||||
break;
|
||||
}
|
||||
SetWindowLong(hListWnd, GWL_STYLE, dwListStyle);
|
||||
CheckMenuItem(hMenuView, ID_VIEW_ARRANGE_BY_NAME, MF_BYCOMMAND);
|
||||
CheckMenuItem(hMenuView, ID_VIEW_ARRANGE_BY_COMMENT, MF_BYCOMMAND);
|
||||
CheckMenuItem(hMenuView, ID_VIEW_ARRANGE_AUTO, MF_BYCOMMAND);
|
||||
CheckMenuItem(hMenuView, nSortOrder, MF_BYCOMMAND|MF_CHECKED);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// FUNCTION: _CmdWndProc(HWND, unsigned, WORD, LONG)
|
||||
//
|
||||
// PURPOSE: Processes WM_COMMAND messages for the main frame window.
|
||||
//
|
||||
//
|
||||
|
||||
static void OnFileOpen(HWND hWnd)
|
||||
{
|
||||
LVITEM item;
|
||||
|
||||
item.mask = LVIF_PARAM;
|
||||
item.iItem = nSelectedItem;
|
||||
item.iSubItem = 0;
|
||||
if (ListView_GetItem(hListWnd, &item)) {
|
||||
Control_LaunchApplet(hListWnd, (CPlEntry*)item.lParam);
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (LOWORD(wParam)) {
|
||||
// Parse the menu selections:
|
||||
case ID_FILE_OPEN:
|
||||
OnFileOpen(hWnd);
|
||||
break;
|
||||
case ID_FILE_EXIT:
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
case ID_VIEW_REFRESH:
|
||||
RefreshListView(hListWnd, NULL);
|
||||
break;
|
||||
case ID_VIEW_LARGE_ICONS:
|
||||
case ID_VIEW_SMALL_ICONS:
|
||||
case ID_VIEW_LIST:
|
||||
case ID_VIEW_DETAILS:
|
||||
SetListSytle(LOWORD(wParam));
|
||||
break;
|
||||
case ID_VIEW_STATUSBAR:
|
||||
toggle_child(hWnd, LOWORD(wParam), hStatusBar);
|
||||
break;
|
||||
case ID_VIEW_ARRANGE_BY_NAME:
|
||||
case ID_VIEW_ARRANGE_BY_COMMENT:
|
||||
case ID_VIEW_ARRANGE_AUTO:
|
||||
SetViewArrangement(LOWORD(wParam));
|
||||
break;
|
||||
case ID_VIEW_LINE_UP_ICONS:
|
||||
ListView_Arrange(hListWnd, LVA_DEFAULT );
|
||||
break;
|
||||
case ID_HELP_ABOUT:
|
||||
#ifdef UNICODE
|
||||
ShellAboutW(hWnd, szTitle, L"", LoadIcon(hInst, (LPCTSTR)IDI_CONTROL));
|
||||
#else
|
||||
ShellAboutA(hWnd, szTitle, "", LoadIcon(hInst, (LPCTSTR)IDI_CONTROL));
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
extern CPlApplet* pListHead; // holds pointer to linked list of cpl modules CPlApplet*
|
||||
|
||||
static void OnLeftClick(HWND hWnd, NMITEMACTIVATE* nmitem)
|
||||
{
|
||||
//HMENU hMenu = NULL;
|
||||
LVHITTESTINFO info;
|
||||
|
||||
info.pt.x = nmitem->ptAction.x;
|
||||
info.pt.y = nmitem->ptAction.y;
|
||||
if (ListView_HitTest(hListWnd, &info) != -1) {
|
||||
LVITEM item;
|
||||
item.mask = LVIF_PARAM;
|
||||
item.iItem = info.iItem;
|
||||
if (ListView_GetItem(hListWnd, &item)) {
|
||||
//Control_LaunchApplet(hWnd, (CPlEntry*)item.lParam);
|
||||
//hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_CONTROL_CONTEXT_APPLET));
|
||||
}
|
||||
} else {
|
||||
TCHAR buffer[MAX_CPL_INFO];
|
||||
int obj_count = ListView_GetItemCount(hListWnd);
|
||||
int cpl_count = 0;
|
||||
int cpl_locked_count = 0;
|
||||
CPlApplet* applet = pListHead;
|
||||
while (applet) {
|
||||
++cpl_count;
|
||||
if (applet->hModule) ++cpl_locked_count;
|
||||
applet = applet->next;
|
||||
}
|
||||
|
||||
|
||||
TRACE(_T("OnLeftClick(0x%08X) - %u\n"), hWnd, obj_count);
|
||||
|
||||
wsprintf(buffer, _T("%u applets in %u libraries (%u locked)"), obj_count, cpl_count, cpl_locked_count);
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)buffer);
|
||||
}
|
||||
}
|
||||
|
||||
static void OnRightClick(HWND hWnd, NMITEMACTIVATE* nmitem)
|
||||
{
|
||||
HMENU hMenu = NULL;
|
||||
LVHITTESTINFO info;
|
||||
info.pt.x = nmitem->ptAction.x;
|
||||
info.pt.y = nmitem->ptAction.y;
|
||||
if (ListView_HitTest(hListWnd, &info) != -1) {
|
||||
LVITEM item;
|
||||
item.mask = LVIF_PARAM;
|
||||
item.iItem = info.iItem;
|
||||
if (ListView_GetItem(hListWnd, &item)) {
|
||||
//Control_LaunchApplet(hWnd, (CPlEntry*)item.lParam);
|
||||
hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_CONTROL_CONTEXT_APPLET));
|
||||
}
|
||||
}
|
||||
if (!hMenu) {
|
||||
hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_CONTROL_CONTEXT));
|
||||
}
|
||||
if (hMenu) {
|
||||
HMENU hSubMenu = GetSubMenu(hMenu, 0);
|
||||
if (hSubMenu) {
|
||||
POINT pt;
|
||||
GetCursorPos(&pt);
|
||||
TrackPopupMenu(hSubMenu, TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON, pt.x, pt.y, 0, hWnd, NULL);
|
||||
}
|
||||
DestroyMenu(hMenu);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// FUNCTION: FrameWndProc(HWND, unsigned, WORD, LONG)
|
||||
//
|
||||
// PURPOSE: Processes messages for the main frame window.
|
||||
//
|
||||
// WM_COMMAND - process the application menu
|
||||
// WM_DESTROY - post a quit message and return
|
||||
//
|
||||
//
|
||||
|
||||
LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
RECT rect;
|
||||
|
||||
switch (message) {
|
||||
case WM_CREATE:
|
||||
hListWnd = CreateListView(hWnd, LIST_WINDOW);
|
||||
SetListSytle(nListStyle);
|
||||
SetViewArrangement(nSortOrder);
|
||||
break;
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
NMITEMACTIVATE* nmitem = (LPNMITEMACTIVATE)lParam;
|
||||
if (nmitem->hdr.idFrom == LIST_WINDOW) {
|
||||
switch (((LPNMHDR)lParam)->code) {
|
||||
case LVN_ITEMCHANGED:
|
||||
nSelectedItem = ((LPNMLISTVIEW)lParam)->iItem;
|
||||
UpdateStatusBar(hListWnd, ((LPNMLISTVIEW)lParam)->iItem);
|
||||
break;
|
||||
//case NM_DBLCLK:
|
||||
//OnDblClick(hWnd, nmitem);
|
||||
//break;
|
||||
case NM_RETURN:
|
||||
OnFileOpen(hWnd);
|
||||
break;
|
||||
case NM_CLICK:
|
||||
OnLeftClick(hWnd, nmitem);
|
||||
break;
|
||||
case NM_RCLICK:
|
||||
OnRightClick(hWnd, nmitem);
|
||||
break;
|
||||
//default:
|
||||
//return FALSE;
|
||||
}
|
||||
if (ListViewNotifyProc(hListWnd, message, wParam, lParam))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
case WM_COMMAND:
|
||||
if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
case WM_PAINT:
|
||||
OnPaint(hWnd);
|
||||
return 0;
|
||||
case WM_SIZE:
|
||||
resize_frame_client(hWnd);
|
||||
//if (nSortOrder == ID_VIEW_ARRANGE_AUTO) SetViewArrangement(nSortOrder);
|
||||
//if (nSortOrder == ID_VIEW_ARRANGE_AUTO) ListView_Update(hListWnd, 0);
|
||||
break;
|
||||
case WM_TIMER:
|
||||
break;
|
||||
case WM_ENTERMENULOOP:
|
||||
OnEnterMenuLoop(hWnd);
|
||||
break;
|
||||
case WM_EXITMENULOOP:
|
||||
OnExitMenuLoop(hListWnd, hWnd);
|
||||
break;
|
||||
case WM_MENUSELECT:
|
||||
OnMenuSelect(hWnd, LOWORD(wParam), HIWORD(wParam), (HMENU)lParam);
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
GetWindowRect(hWnd, &rect);
|
||||
SaveSettings(&rect);
|
||||
DestroyListView(hListWnd);
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
45
reactos/lib/shell32/control/framewnd.h
Normal file
45
reactos/lib/shell32/control/framewnd.h
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel Frame Window implementation
|
||||
*
|
||||
* framewnd.h
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __FRAMEWND_H__
|
||||
#define __FRAMEWND_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
|
||||
LRESULT CALLBACK FrameWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
void SetupStatusBar(HWND hWnd, BOOL bResize);
|
||||
void UpdateStatusBar(HWND hwndLV, int list_index);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __FRAMEWND_H__
|
660
reactos/lib/shell32/control/listview.c
Normal file
660
reactos/lib/shell32/control/listview.c
Normal file
|
@ -0,0 +1,660 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel ListCtrl implementation
|
||||
*
|
||||
* listview.c
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
#include <cpl.h>
|
||||
#include <commctrl.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
#include <tchar.h>
|
||||
#include <process.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <windowsx.h>
|
||||
#include "control.h"
|
||||
#include "listview.h"
|
||||
|
||||
#include "assert.h"
|
||||
#include "trace.h"
|
||||
|
||||
|
||||
static int _GetSystemDirectory(LPTSTR buffer, int buflen)
|
||||
{
|
||||
#if 0
|
||||
return GetSystemDirectory(buffer, buflen);
|
||||
#else
|
||||
return GetCurrentDirectory(buflen, buffer);
|
||||
// if (lstrcpyn(buffer, szTestDirName, buflen - 1)) {
|
||||
// return lstrlen(buffer);
|
||||
// }
|
||||
// return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Global and Local Variables:
|
||||
//
|
||||
|
||||
#define MAX_LIST_COLUMNS (IDS_LIST_COLUMN_LAST - IDS_LIST_COLUMN_FIRST + 1)
|
||||
static int default_column_widths[MAX_LIST_COLUMNS] = { 250, 500 };
|
||||
static int column_alignment[MAX_LIST_COLUMNS] = { LVCFMT_LEFT, LVCFMT_LEFT };
|
||||
|
||||
CPlApplet* pListHead; // holds pointer to linked list of cpl modules CPlApplet*
|
||||
//static CPlApplet* pListHead; // holds pointer to linked list of cpl modules CPlApplet*
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Local module support methods
|
||||
//
|
||||
|
||||
static void AddAppletsToListView(HWND hwndLV, CPlApplet* pApplet)
|
||||
{
|
||||
LVITEM item;
|
||||
UINT count;
|
||||
|
||||
for (count = 0; count < pApplet->count; count++) {
|
||||
int index = 0;
|
||||
NEWCPLINFO* pCPLInfo = &pApplet->info[count];
|
||||
|
||||
CPlEntry* pCPlEntry;
|
||||
if (!(pCPlEntry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pCPlEntry))))
|
||||
return;
|
||||
|
||||
pCPlEntry->hWnd = hwndLV;
|
||||
pCPlEntry->nSubProg = count;
|
||||
pCPlEntry->pCPlApplet = pApplet;
|
||||
|
||||
if (pCPLInfo->hIcon) { // add the icon to an image list
|
||||
HIMAGELIST hImageList;
|
||||
hImageList = ListView_GetImageList(hwndLV, LVSIL_NORMAL);
|
||||
index = ImageList_AddIcon(hImageList, pCPLInfo->hIcon);
|
||||
hImageList = ListView_GetImageList(hwndLV, LVSIL_SMALL);
|
||||
ImageList_AddIcon(hImageList, pCPLInfo->hIcon);
|
||||
DestroyIcon(pCPLInfo->hIcon);
|
||||
}
|
||||
item.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE | LVIF_PARAM;
|
||||
item.iItem = 0;//idx;
|
||||
item.iSubItem = 0;
|
||||
item.state = 0;
|
||||
item.stateMask = 0;
|
||||
// item.pszText = LPSTR_TEXTCALLBACK;
|
||||
// item.cchTextMax = 50;
|
||||
item.pszText = pCPLInfo->szName;
|
||||
item.cchTextMax = _tcslen(item.pszText);
|
||||
item.iImage = index;
|
||||
item.lParam = (LPARAM)pCPlEntry;
|
||||
#if (_WIN32_IE >= 0x0300)
|
||||
item.iIndent = 0;
|
||||
#endif
|
||||
index = ListView_InsertItem(hwndLV, &item);
|
||||
if (index != -1 && pCPLInfo->szInfo != NULL) {
|
||||
ListView_SetItemText(hwndLV, index, 1, pCPLInfo->szInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateListColumns(HWND hwndLV)
|
||||
{
|
||||
TCHAR szText[50];
|
||||
int index;
|
||||
LV_COLUMN lvC;
|
||||
|
||||
// Create columns.
|
||||
lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
||||
lvC.pszText = szText;
|
||||
|
||||
// Load the column labels from the resource file.
|
||||
for (index = 0; index < MAX_LIST_COLUMNS; index++) {
|
||||
lvC.iSubItem = index;
|
||||
lvC.cx = default_column_widths[index];
|
||||
lvC.fmt = column_alignment[index];
|
||||
LoadString(hInst, IDS_LIST_COLUMN_FIRST + index, szText, 50);
|
||||
if (ListView_InsertColumn(hwndLV, index, &lvC) == -1) {
|
||||
// TODO: handle failure condition...
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// InitListViewImageLists - creates image lists for a list view control.
|
||||
// This function only creates image lists. It does not insert the
|
||||
// items into the control, which is necessary for the control to be
|
||||
// visible.
|
||||
// Returns TRUE if successful, or FALSE otherwise.
|
||||
// hwndLV - handle to the list view control.
|
||||
static BOOL InitListViewImageLists(HWND hwndLV)
|
||||
{
|
||||
// HICON hiconItem; // icon for list view items
|
||||
HIMAGELIST hLarge; // image list for icon view
|
||||
HIMAGELIST hSmall; // image list for other views
|
||||
|
||||
// Create the full-sized icon image lists.
|
||||
hLarge = ImageList_Create(GetSystemMetrics(SM_CXICON),
|
||||
GetSystemMetrics(SM_CYICON), ILC_MASK, 1, 20);
|
||||
hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
|
||||
GetSystemMetrics(SM_CYSMICON), ILC_MASK, 1, 20);
|
||||
|
||||
// Add an icon to each image list.
|
||||
// hiconItem = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ITEM));
|
||||
// hiconItem = LoadIcon(hInst, MAKEINTRESOURCE(IDI_CONTROL));
|
||||
// ImageList_AddIcon(hLarge, hiconItem);
|
||||
// ImageList_AddIcon(hSmall, hiconItem);
|
||||
// DestroyIcon(hiconItem);
|
||||
|
||||
/*********************************************************
|
||||
Usually you have multiple icons; therefore, the previous
|
||||
four lines of code can be inside a loop. The following code
|
||||
shows such a loop. The icons are defined in the application's
|
||||
header file as resources, which are numbered consecutively
|
||||
starting with IDS_FIRSTICON. The number of icons is
|
||||
defined in the header file as C_ICONS.
|
||||
|
||||
for(index = 0; index < C_ICONS; index++) {
|
||||
hIconItem = LoadIcon (hInst, MAKEINTRESOURCE (IDS_FIRSTICON + index));
|
||||
ImageList_AddIcon(hSmall, hIconItem);
|
||||
ImageList_AddIcon(hLarge, hIconItem);
|
||||
Destroy(hIconItem);
|
||||
}
|
||||
*********************************************************/
|
||||
|
||||
// Assign the image lists to the list view control.
|
||||
ListView_SetImageList(hwndLV, hLarge, LVSIL_NORMAL);
|
||||
ListView_SetImageList(hwndLV, hSmall, LVSIL_SMALL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
typedef LONG (WINAPI *CPlApplet_Ptr)(HWND, UINT, LONG, LONG);
|
||||
|
||||
static void AddEntryToList(HWND hwndLV, LPTSTR szName, LPTSTR szInfo, CPlEntry* pCPlEntry)
|
||||
{
|
||||
LVITEM item;
|
||||
int index;
|
||||
|
||||
assert(pCPlEntry);
|
||||
memset(&item, 0, sizeof(LVITEM));
|
||||
item.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE | LVIF_PARAM;
|
||||
if (szName != NULL) {
|
||||
item.pszText = szName;
|
||||
item.cchTextMax = _tcslen(item.pszText);
|
||||
item.iImage = pCPlEntry->nIconIndex;
|
||||
} else {
|
||||
item.pszText = LPSTR_TEXTCALLBACK;
|
||||
item.cchTextMax = MAX_CPL_NAME;
|
||||
item.iImage = I_IMAGECALLBACK;
|
||||
}
|
||||
item.lParam = (LPARAM)pCPlEntry;
|
||||
#if (_WIN32_IE >= 0x0300)
|
||||
item.iIndent = 0;
|
||||
#endif
|
||||
index = ListView_InsertItem(hwndLV, &item);
|
||||
if (index != -1) {
|
||||
if (szInfo != NULL) {
|
||||
ListView_SetItemText(hwndLV, index, 1, szInfo);
|
||||
} else {
|
||||
ListView_SetItemText(hwndLV, index, 1, LPSTR_TEXTCALLBACK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
static CPlApplet* Control_LoadApplet(HWND hwndLV, LPTSTR buffer, CPlApplet** pListHead)
|
||||
{
|
||||
HMODULE hCpl;
|
||||
hCpl = LoadLibrary(buffer);
|
||||
if (hCpl) {
|
||||
CPlApplet_Ptr pCPlApplet;
|
||||
pCPlApplet = (CPlApplet_Ptr)(FARPROC)GetProcAddress(hCpl, "CPlApplet");
|
||||
if (pCPlApplet) {
|
||||
if (pCPlApplet(hwndLV, CPL_INIT, 0, 0)) {
|
||||
int nSubProgs = pCPlApplet(hwndLV, CPL_GETCOUNT, 0, 0);
|
||||
if (nSubProgs == 0) {
|
||||
TRACE(_T("No subprogram in applet\n"));
|
||||
}
|
||||
|
||||
{
|
||||
CPlApplet* applet;
|
||||
if (!(applet = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*applet)))) {
|
||||
return applet;
|
||||
}
|
||||
applet->next = *pListHead;
|
||||
*pListHead = applet;
|
||||
}
|
||||
strncpy(applet->filename, buffer, MAX_PATH);
|
||||
while (nSubProgs && nSubProgs--) {
|
||||
CPLINFO cplInfo;
|
||||
memset(&cplInfo, 0, sizeof(CPLINFO));
|
||||
pCPlApplet(hwndLV, CPL_INQUIRE, nSubProgs, (LPARAM)&cplInfo);
|
||||
if (cplInfo.idName == CPL_DYNAMIC_RES) {
|
||||
#if UNICODE
|
||||
NEWCPLINFO cplNewInfo;
|
||||
memset(&cplNewInfo, 0, sizeof(NEWCPLINFO));
|
||||
cplNewInfo.dwSize = sizeof(NEWCPLINFO);
|
||||
pCPlApplet(hwndLV, CPL_NEWINQUIRE, nSubProgs, (LPARAM)&cplNewInfo);
|
||||
cplNewInfo.lData = hCpl;
|
||||
AddEntryToList(hwndLV, &cplNewInfo);
|
||||
#endif
|
||||
} else {
|
||||
int index = 0;
|
||||
NEWCPLINFO cplNewInfo;
|
||||
memset(&cplNewInfo, 0, sizeof(NEWCPLINFO));
|
||||
cplNewInfo.dwSize = sizeof(NEWCPLINFO);
|
||||
if (LoadString(hCpl, cplInfo.idName, cplNewInfo.szName, sizeof(cplNewInfo.szName)/sizeof(TCHAR))) {
|
||||
}
|
||||
if (LoadString(hCpl, cplInfo.idInfo, cplNewInfo.szInfo, sizeof(cplNewInfo.szInfo)/sizeof(TCHAR))) {
|
||||
}
|
||||
cplNewInfo.hIcon = LoadImage(hCpl, (LPCTSTR)cplInfo.idIcon, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
|
||||
cplNewInfo.lData = (LONG)hCpl;
|
||||
AddEntryToList(hwndLV, &cplNewInfo);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
} else {
|
||||
TRACE(_T("Init of applet has failed\n"));
|
||||
}
|
||||
} else {
|
||||
TRACE(_T("Not a valid control panel applet %s\n"), buffer);
|
||||
}
|
||||
FreeLibrary(hCpl);
|
||||
} else {
|
||||
TRACE(_T("Cannot load control panel applet %s\n"), buffer);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
static void LoadApplet(HWND hwndLV, LPTSTR buffer, CPlApplet** pListHead)
|
||||
{
|
||||
HMODULE hModule;
|
||||
hModule = LoadLibrary(buffer);
|
||||
if (hModule) {
|
||||
CPlApplet_Ptr pCPlApplet;
|
||||
pCPlApplet = (CPlApplet_Ptr)(FARPROC)GetProcAddress(hModule, "CPlApplet");
|
||||
if (pCPlApplet) {
|
||||
if (pCPlApplet(hwndLV, CPL_INIT, 0, 0)) {
|
||||
CPlApplet* applet;
|
||||
int nSubProgs = pCPlApplet(hwndLV, CPL_GETCOUNT, 0, 0);
|
||||
if (nSubProgs == 0) {
|
||||
TRACE(_T("No subprogram in applet\n"));
|
||||
}
|
||||
if (!(applet = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*applet)))) {
|
||||
goto loadapplet_error;
|
||||
}
|
||||
applet->next = *pListHead;
|
||||
*pListHead = applet;
|
||||
_tcsncpy(applet->filename, buffer, MAX_PATH);
|
||||
while (nSubProgs && nSubProgs--) {
|
||||
NEWCPLINFO cplNewInfo;
|
||||
memset(&cplNewInfo, 0, sizeof(NEWCPLINFO));
|
||||
cplNewInfo.dwSize = sizeof(NEWCPLINFO);
|
||||
pCPlApplet(hwndLV, CPL_NEWINQUIRE, nSubProgs, (LPARAM)&cplNewInfo);
|
||||
if (cplNewInfo.hIcon == 0) {
|
||||
CPLINFO cplInfo;
|
||||
memset(&cplInfo, 0, sizeof(CPLINFO));
|
||||
pCPlApplet(hwndLV, CPL_INQUIRE, nSubProgs, (LPARAM)&cplInfo);
|
||||
if (cplInfo.idIcon == 0 || cplInfo.idName == 0) {
|
||||
TRACE(_T("Couldn't get info from sp %u\n"), nSubProgs);
|
||||
} else {
|
||||
TCHAR szName[MAX_CPL_NAME];
|
||||
TCHAR szInfo[MAX_CPL_INFO];
|
||||
HICON hIcon = NULL;
|
||||
CPlEntry* pCPlEntry;
|
||||
if (!(pCPlEntry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPlEntry)))) {
|
||||
goto loadapplet_error;
|
||||
}
|
||||
pCPlEntry->nSubProg = nSubProgs;
|
||||
pCPlEntry->lData = cplInfo.lData;
|
||||
pCPlEntry->pCPlApplet = applet;
|
||||
hIcon = LoadImage(hModule, (LPCTSTR)cplInfo.idIcon, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
|
||||
LoadString(hModule, cplInfo.idName, szName, MAX_CPL_NAME);
|
||||
LoadString(hModule, cplInfo.idInfo, szInfo, MAX_CPL_INFO);
|
||||
if (hIcon) { // add the icon to an image list
|
||||
HIMAGELIST hImageList;
|
||||
hImageList = ListView_GetImageList(hwndLV, LVSIL_NORMAL);
|
||||
pCPlEntry->nIconIndex = ImageList_AddIcon(hImageList, hIcon);
|
||||
hImageList = ListView_GetImageList(hwndLV, LVSIL_SMALL);
|
||||
ImageList_AddIcon(hImageList, hIcon);
|
||||
DestroyIcon(hIcon);
|
||||
}
|
||||
AddEntryToList(hwndLV, szName, szInfo, pCPlEntry);
|
||||
}
|
||||
} else {
|
||||
HIMAGELIST hImageList;
|
||||
CPlEntry* pCPlEntry;
|
||||
TRACE(_T("Using CPL_NEWINQUIRE data\n"));
|
||||
if (!(pCPlEntry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPlEntry)))) {
|
||||
goto loadapplet_error;
|
||||
}
|
||||
applet->hModule = LoadLibrary(buffer);
|
||||
pCPlEntry->nSubProg = nSubProgs;
|
||||
pCPlEntry->lData = cplNewInfo.lData;
|
||||
pCPlEntry->pCPlApplet = applet;
|
||||
hImageList = ListView_GetImageList(hwndLV, LVSIL_NORMAL);
|
||||
pCPlEntry->nIconIndex = ImageList_AddIcon(hImageList, cplNewInfo.hIcon);
|
||||
hImageList = ListView_GetImageList(hwndLV, LVSIL_SMALL);
|
||||
ImageList_AddIcon(hImageList, cplNewInfo.hIcon);
|
||||
DestroyIcon(cplNewInfo.hIcon);
|
||||
AddEntryToList(hwndLV, NULL, NULL, pCPlEntry);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
TRACE(_T("Init of applet has failed\n"));
|
||||
}
|
||||
} else {
|
||||
TRACE(_T("Not a valid control panel applet %s\n"), buffer);
|
||||
}
|
||||
loadapplet_error:
|
||||
FreeLibrary(hModule);
|
||||
} else {
|
||||
TRACE(_T("Cannot load control panel applet %s\n"), buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static BOOL InitListViewItems(HWND hwndLV, LPTSTR szPath)
|
||||
{
|
||||
WIN32_FIND_DATA data;
|
||||
HANDLE hFind;
|
||||
TCHAR buffer[MAX_PATH+10], *p;
|
||||
UINT length;
|
||||
|
||||
length = _GetSystemDirectory(buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
p = &buffer[length];
|
||||
lstrcpy(p, _T("\\*.cpl"));
|
||||
memset(&data, 0, sizeof(WIN32_FIND_DATA));
|
||||
hFind = FindFirstFile(buffer, &data);
|
||||
if (hFind != INVALID_HANDLE_VALUE) {
|
||||
do {
|
||||
if (!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
|
||||
#if 0
|
||||
CPlApplet* pApplet;
|
||||
lstrcpy(p+1, data.cFileName);
|
||||
pApplet = Control_LoadApplet(hwndLV, buffer, &pListHead);
|
||||
if (pApplet != NULL) {
|
||||
AddAppletsToListView(hwndLV, pApplet);
|
||||
}
|
||||
#else
|
||||
lstrcpy(p+1, data.cFileName);
|
||||
LoadApplet(hwndLV, buffer, &pListHead);
|
||||
#endif
|
||||
}
|
||||
} while (FindNextFile(hFind, &data));
|
||||
FindClose(hFind);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// OnGetDispInfo - processes the LVN_GETDISPINFO notification message.
|
||||
static void OnGetDispInfo(HWND hWnd, NMLVDISPINFO* plvdi)
|
||||
{
|
||||
CPlEntry* pCPlEntry = (CPlEntry*)plvdi->item.lParam;
|
||||
|
||||
plvdi->item.pszText = NULL;
|
||||
plvdi->item.cchTextMax = 0;
|
||||
if (pCPlEntry != NULL) {
|
||||
CPlApplet* pApplet = pCPlEntry->pCPlApplet;
|
||||
assert(pApplet);
|
||||
if (pApplet->hModule) {
|
||||
CPlApplet_Ptr pCPlApplet;
|
||||
pCPlApplet = (CPlApplet_Ptr)(FARPROC)GetProcAddress(pApplet->hModule, "CPlApplet");
|
||||
if (pCPlApplet) {
|
||||
static NEWCPLINFO cplNewInfo;
|
||||
memset(&cplNewInfo, 0, sizeof(NEWCPLINFO));
|
||||
cplNewInfo.dwSize = sizeof(NEWCPLINFO);
|
||||
pCPlApplet(hWnd, CPL_NEWINQUIRE, pCPlEntry->nSubProg, (LPARAM)&cplNewInfo);
|
||||
|
||||
if (plvdi->item.mask && LVIF_IMAGE) {
|
||||
if (cplNewInfo.hIcon) { // add the icon to an image list
|
||||
HIMAGELIST hImageList;
|
||||
hImageList = ListView_GetImageList(hWnd, LVSIL_NORMAL);
|
||||
pCPlEntry->nIconIndex = ImageList_ReplaceIcon(hImageList, pCPlEntry->nIconIndex, cplNewInfo.hIcon);
|
||||
hImageList = ListView_GetImageList(hWnd, LVSIL_SMALL);
|
||||
ImageList_ReplaceIcon(hImageList, pCPlEntry->nIconIndex, cplNewInfo.hIcon);
|
||||
DestroyIcon(cplNewInfo.hIcon);
|
||||
}
|
||||
plvdi->item.iImage = pCPlEntry->nIconIndex;
|
||||
}
|
||||
if (plvdi->item.mask && LVIF_STATE) {
|
||||
}
|
||||
if (plvdi->item.mask && LVIF_TEXT) {
|
||||
switch (plvdi->item.iSubItem) {
|
||||
case 0:
|
||||
plvdi->item.pszText = cplNewInfo.szName;
|
||||
plvdi->item.cchTextMax = _tcslen(plvdi->item.pszText);
|
||||
break;
|
||||
case 1:
|
||||
plvdi->item.pszText = cplNewInfo.szInfo;
|
||||
plvdi->item.cchTextMax = _tcslen(plvdi->item.pszText);
|
||||
break;
|
||||
case 2:
|
||||
plvdi->item.pszText = _T("");
|
||||
plvdi->item.cchTextMax = _tcslen(plvdi->item.pszText);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void OnDeleteItem(NMLISTVIEW* pnmlv)
|
||||
{
|
||||
CPlEntry* pCPlEntry = (CPlEntry*)pnmlv->lParam;
|
||||
if (pCPlEntry != NULL) {
|
||||
HeapFree(GetProcessHeap(), 0, pCPlEntry);
|
||||
}
|
||||
}
|
||||
|
||||
static void OnItemChanged(NMLISTVIEW* pnmlv)
|
||||
{
|
||||
}
|
||||
|
||||
void Control_LaunchApplet(HWND hwndLV, CPlEntry* pCPlEntry)
|
||||
{
|
||||
CPlApplet_Ptr pCPlApplet;
|
||||
CPlApplet* pApplet = pCPlEntry->pCPlApplet;
|
||||
|
||||
assert(pApplet);
|
||||
if (pApplet->hModule == NULL) {
|
||||
pApplet->hModule = LoadLibrary(pApplet->filename);
|
||||
pCPlApplet = (CPlApplet_Ptr)(FARPROC)GetProcAddress(pApplet->hModule, "CPlApplet");
|
||||
if (pCPlApplet) {
|
||||
if (pCPlApplet(hwndLV, CPL_INIT, 0, 0)) {
|
||||
unsigned int nSubProgs = pCPlApplet(hwndLV, CPL_GETCOUNT, 0, 0);
|
||||
if (nSubProgs < pCPlEntry->nSubProg) {
|
||||
TRACE(_T("Only %u subprograms in applet, requested %u\n"), nSubProgs, pCPlEntry->nSubProg);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
TRACE(_T("Init of applet has failed\n"));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
TRACE(_T("Not a valid control panel applet %s\n"), pApplet->filename);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (pApplet->hModule) {
|
||||
pCPlApplet = (CPlApplet_Ptr)(FARPROC)GetProcAddress(pApplet->hModule, "CPlApplet");
|
||||
if (pCPlApplet) {
|
||||
TCHAR* extraPmts = NULL;
|
||||
if (!pCPlApplet(hwndLV, CPL_STARTWPARMS, pCPlEntry->nSubProg, (LPARAM)extraPmts))
|
||||
pCPlApplet(hwndLV, CPL_DBLCLK, pCPlEntry->nSubProg, pCPlEntry->lData);
|
||||
}
|
||||
|
||||
}
|
||||
// NEWCPLINFO* pCPLInfo = &(pCPlEntry->pCPlApplet->info[pCPlEntry->nSubProg]);
|
||||
// TCHAR* extraPmts = NULL;
|
||||
// if (pCPLInfo->dwSize && pApplet->proc) {
|
||||
// if (!pApplet->proc(pApplet->hWnd, CPL_STARTWPARMS, pCPlEntry->nSubProg, (LPARAM)extraPmts))
|
||||
// pApplet->proc(pApplet->hWnd, CPL_DBLCLK, pCPlEntry->nSubProg, pCPLInfo->lData);
|
||||
// }
|
||||
}
|
||||
|
||||
static void OnDblClick(HWND hWnd, NMITEMACTIVATE* nmitem)
|
||||
{
|
||||
LVHITTESTINFO info;
|
||||
/*
|
||||
#ifdef _MSC_VER
|
||||
switch (nmitem->uKeyFlags) {
|
||||
case LVKF_ALT: // The ALT key is pressed.
|
||||
break;
|
||||
case LVKF_CONTROL: // The CTRL key is pressed.
|
||||
break;
|
||||
case LVKF_SHIFT: // The SHIFT key is pressed.
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
info.pt.x = nmitem->ptAction.x;
|
||||
info.pt.y = nmitem->ptAction.y;
|
||||
if (ListView_HitTest(hWnd, &info) != -1) {
|
||||
LVITEM item;
|
||||
item.mask = LVIF_PARAM;
|
||||
item.iItem = info.iItem;
|
||||
if (ListView_GetItem(hWnd, &item)) {
|
||||
Control_LaunchApplet(hWnd, (CPlEntry*)item.lParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct CompareData {
|
||||
HWND hListWnd;
|
||||
int nSortColumn;
|
||||
};
|
||||
|
||||
static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
|
||||
{
|
||||
struct CompareData* pcd = (struct CompareData*)lParamSort;
|
||||
|
||||
TCHAR buf1[MAX_CPL_INFO];
|
||||
TCHAR buf2[MAX_CPL_INFO];
|
||||
|
||||
ListView_GetItemText(pcd->hListWnd, lParam1, pcd->nSortColumn, buf1, sizeof(buf1)/sizeof(TCHAR));
|
||||
ListView_GetItemText(pcd->hListWnd, lParam2, pcd->nSortColumn, buf2, sizeof(buf2)/sizeof(TCHAR));
|
||||
return _tcscmp(buf1, buf2);
|
||||
}
|
||||
|
||||
/*
|
||||
static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
|
||||
{
|
||||
TCHAR buf1[1000];
|
||||
TCHAR buf2[1000];
|
||||
|
||||
ListView_GetItemText((HWND)lParamSort, lParam1, 0, buf1, sizeof(buf1)/sizeof(TCHAR));
|
||||
ListView_GetItemText((HWND)lParamSort, lParam2, 0, buf2, sizeof(buf2)/sizeof(TCHAR));
|
||||
return _tcscmp(buf1, buf2);
|
||||
}
|
||||
|
||||
static void ListViewPopUpMenu(HWND hWnd, POINT pt)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL ListView_SortItemsEx(
|
||||
HWND hwnd,
|
||||
PFNLVCOMPARE pfnCompare,
|
||||
LPARAM lParamSort
|
||||
);
|
||||
|
||||
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
//#define LVM_FIRST 0x1000 // ListView messages
|
||||
#define LVM_SORTITEMSEX (0x1000 + 81)
|
||||
#define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \
|
||||
(BOOL)SendMessage((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare))
|
||||
#endif
|
||||
|
||||
BOOL SortListView(HWND hWnd, int nSortColumn)
|
||||
{
|
||||
struct CompareData cd = { hWnd, nSortColumn };
|
||||
return ListView_SortItemsEx(hWnd, CompareFunc, &cd);
|
||||
}
|
||||
|
||||
BOOL ListViewNotifyProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
NMITEMACTIVATE* nmitem = (LPNMITEMACTIVATE)lParam;
|
||||
|
||||
if (nmitem->hdr.idFrom == LIST_WINDOW) {
|
||||
switch (((LPNMHDR)lParam)->code) {
|
||||
case LVN_GETDISPINFO:
|
||||
OnGetDispInfo(hWnd, (NMLVDISPINFO*)lParam);
|
||||
break;
|
||||
case LVN_DELETEITEM:
|
||||
OnDeleteItem((NMLISTVIEW*)lParam);
|
||||
//pnmv = (LPNMLISTVIEW) lParam
|
||||
break;
|
||||
case LVN_ITEMCHANGED:
|
||||
OnItemChanged((NMLISTVIEW*)lParam);
|
||||
break;
|
||||
case NM_DBLCLK:
|
||||
OnDblClick(hWnd, nmitem);
|
||||
break;
|
||||
//case NM_RCLICK:
|
||||
//OnRightClick(hWnd, nmitem);
|
||||
//break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID DestroyListView(HWND hwndLV)
|
||||
{
|
||||
if (pListHead)
|
||||
while ((pListHead = Control_UnloadApplet(pListHead)));
|
||||
}
|
||||
|
||||
BOOL RefreshListView(HWND hwndLV, LPTSTR szPath)
|
||||
{
|
||||
if (hwndLV != NULL) {
|
||||
ListView_DeleteAllItems(hwndLV);
|
||||
}
|
||||
return InitListViewItems(hwndLV, szPath);
|
||||
}
|
||||
|
||||
HWND CreateListView(HWND hwndParent, int id)
|
||||
{
|
||||
RECT rcClient;
|
||||
HWND hwndLV;
|
||||
|
||||
// Get the dimensions of the parent window's client area, and create the list view control.
|
||||
GetClientRect(hwndParent, &rcClient);
|
||||
hwndLV = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, _T("List View"),
|
||||
WS_VISIBLE | WS_CHILD,
|
||||
0, 0, rcClient.right, rcClient.bottom,
|
||||
hwndParent, (HMENU)id, hInst, NULL);
|
||||
ListView_SetExtendedListViewStyle(hwndLV, LVS_EX_FULLROWSELECT);
|
||||
CreateListColumns(hwndLV);
|
||||
|
||||
// Initialize the image list, and add items to the control.
|
||||
if (!InitListViewImageLists(hwndLV) || !InitListViewItems(hwndLV, NULL/*szPath*/)) {
|
||||
DestroyWindow(hwndLV);
|
||||
return FALSE;
|
||||
}
|
||||
return hwndLV;
|
||||
}
|
||||
|
48
reactos/lib/shell32/control/listview.h
Normal file
48
reactos/lib/shell32/control/listview.h
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel ListCtrl implementation
|
||||
*
|
||||
* listview.h
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __LISTVIEW_H__
|
||||
#define __LISTVIEW_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
|
||||
HWND CreateListView(HWND hwndParent, int id);
|
||||
BOOL RefreshListView(HWND hwndTV, LPTSTR szPath);
|
||||
//void OnGetDispInfo(NMLVDISPINFO* plvdi);
|
||||
BOOL ListViewNotifyProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
VOID DestroyListView(HWND hwndLV);
|
||||
BOOL SortListView(HWND hWnd, int nSortColumn);
|
||||
void Control_LaunchApplet(HWND hwndLV, CPlEntry* pCPlEntry);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __LISTVIEW_H__
|
157
reactos/lib/shell32/control/settings.c
Normal file
157
reactos/lib/shell32/control/settings.c
Normal file
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel
|
||||
*
|
||||
* settings.c
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
#include <cpl.h>
|
||||
#include <commctrl.h>
|
||||
#include <tchar.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
//#include <memory.h>
|
||||
//#include <process.h>
|
||||
|
||||
#include "control.h"
|
||||
//#include "framewnd.h"
|
||||
//#include "shell32.h"
|
||||
#include "trace.h"
|
||||
|
||||
//#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
//#include <windows.h>
|
||||
//#include <tchar.h>
|
||||
//#include <assert.h>
|
||||
//#define ASSERT assert
|
||||
|
||||
//#include "control.h"
|
||||
#include "settings.h"
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Global and Local Variables:
|
||||
//
|
||||
|
||||
extern DWORD nListStyle;
|
||||
extern DWORD nSortOrder;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Local module support methods
|
||||
//
|
||||
|
||||
BOOL CheckResult(LONG error)
|
||||
{
|
||||
if (error != ERROR_SUCCESS) {
|
||||
PTSTR msg;
|
||||
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
0, error, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (PTSTR)&msg, 0, NULL))
|
||||
MessageBox(NULL, msg, szTitle, MB_ICONERROR | MB_OK);
|
||||
else
|
||||
MessageBox(NULL, _T("Error"), szTitle, MB_ICONERROR | MB_OK);
|
||||
LocalFree(msg);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL CreateRegistryPath(LPTSTR szRegPath, int nMaxLen)
|
||||
{
|
||||
LPTSTR pRegPath = szRegPath;
|
||||
|
||||
// Initialise registry path string from application PATH and KEY resources
|
||||
int nLength = LoadString(hInst, IDS_APP_REG_PATH, szRegPath, nMaxLen);
|
||||
nLength += LoadString(hInst, IDS_APP_REG_KEY, szRegPath + nLength, nMaxLen - nLength);
|
||||
// ASSERT(nLength < (nMaxLen - 1));
|
||||
szRegPath[nLength] = _T('\\');
|
||||
|
||||
// walk the registry path string creating the tree if required
|
||||
while ((pRegPath = _tcschr(pRegPath, _T('\\')))) {
|
||||
LONG result;
|
||||
HKEY hKey = NULL;
|
||||
*pRegPath = _T('\0');
|
||||
// Open (or create) the key
|
||||
result = RegCreateKeyEx(HKEY_CURRENT_USER, szRegPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
|
||||
if (!CheckResult(result)) return FALSE;
|
||||
RegCloseKey(hKey);
|
||||
*pRegPath = _T('\\');
|
||||
pRegPath = pRegPath + 1;
|
||||
}
|
||||
szRegPath[nLength] = _T('\0');
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LoadSettings(RECT* prc)
|
||||
{
|
||||
BOOL retval = TRUE;
|
||||
TCHAR szRegPath[MAX_LOADSTRING];
|
||||
HMENU hMenuView = GetSubMenu(hMenuFrame, ID_VIEW_MENU);
|
||||
|
||||
HKEY hKey;
|
||||
DWORD dwSize;
|
||||
LONG result;
|
||||
|
||||
if (!CreateRegistryPath(szRegPath, MAX_LOADSTRING)) return FALSE;
|
||||
|
||||
// Open the key
|
||||
result = RegOpenKeyEx(HKEY_CURRENT_USER, szRegPath, 0, KEY_READ, &hKey);
|
||||
if (!CheckResult(result)) return FALSE;
|
||||
|
||||
// Read the settings
|
||||
dwSize = sizeof(nListStyle);
|
||||
result = RegQueryValueEx(hKey, _T("ListStyle"), NULL, NULL, (LPBYTE)&nListStyle, &dwSize);
|
||||
dwSize = sizeof(nSortOrder);
|
||||
result = RegQueryValueEx(hKey, _T("SortOrder"), NULL, NULL, (LPBYTE)&nSortOrder, &dwSize);
|
||||
dwSize = sizeof(RECT);
|
||||
result = RegQueryValueEx(hKey, _T("WindowPos"), NULL, NULL, (LPBYTE)prc, &dwSize);
|
||||
if (result != ERROR_SUCCESS) {
|
||||
retval = FALSE;
|
||||
}
|
||||
|
||||
// Close the key
|
||||
RegCloseKey(hKey);
|
||||
return retval;
|
||||
}
|
||||
|
||||
void SaveSettings(RECT* prc)
|
||||
{
|
||||
TCHAR szRegPath[MAX_LOADSTRING];
|
||||
HKEY hKey = NULL;
|
||||
LONG result;
|
||||
|
||||
if (!CreateRegistryPath(szRegPath, MAX_LOADSTRING)) return;
|
||||
|
||||
// Open the key
|
||||
result = RegOpenKeyEx(HKEY_CURRENT_USER, szRegPath, 0, KEY_WRITE, &hKey);
|
||||
if (!CheckResult(result)) return;
|
||||
|
||||
// Save the settings
|
||||
result = RegSetValueEx(hKey, _T("ListStyle"), 0, REG_DWORD, (LPBYTE)&nListStyle, sizeof(nListStyle));
|
||||
if (!CheckResult(result)) goto abort;
|
||||
result = RegSetValueEx(hKey, _T("SortOrder"), 0, REG_DWORD, (LPBYTE)&nSortOrder, sizeof(nSortOrder));
|
||||
if (!CheckResult(result)) goto abort;
|
||||
result = RegSetValueEx(hKey, _T("WindowPos"), 0, REG_BINARY, (LPBYTE)prc, sizeof(RECT));
|
||||
if (!CheckResult(result)) goto abort;
|
||||
|
||||
abort:
|
||||
// Close the key
|
||||
RegCloseKey(hKey);
|
||||
}
|
44
reactos/lib/shell32/control/settings.h
Normal file
44
reactos/lib/shell32/control/settings.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* ReactOS shell32 - Control Panel
|
||||
*
|
||||
* settings.h
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __SETTINGS_H__
|
||||
#define __SETTINGS_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
|
||||
BOOL CheckResult(LONG error);
|
||||
BOOL LoadSettings(RECT*);
|
||||
void SaveSettings(RECT*);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // __SETTINGS_H__
|
82
reactos/lib/shell32/control/trace.c
Normal file
82
reactos/lib/shell32/control/trace.c
Normal file
|
@ -0,0 +1,82 @@
|
|||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Diagnostic Trace
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include "windows.h"
|
||||
#include "trace.h"
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
||||
#ifdef WIN32
|
||||
//#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
//#include <windows.h>
|
||||
//#include <assert.h>
|
||||
//WINBASEAPI VOID WINAPI DebugBreak(VOID);
|
||||
//WINBASEAPI VOID WINAPI OutputDebugStringA(LPCSTR lpOutputString);
|
||||
//WINBASEAPI VOID WINAPI OutputDebugStringW(LPCWSTR lpOutputString);
|
||||
//void __stdcall DebugBreak(void);
|
||||
//void __stdcall OutputDebugStringA(char* lpOutputString);
|
||||
//void __stdcall OutputDebugStringW(wchar_t* lpOutputString);
|
||||
#ifdef UNICODE
|
||||
#define OutputDebugString OutputDebugStringW
|
||||
#else
|
||||
#define OutputDebugString OutputDebugStringA
|
||||
#endif // !UNICODE
|
||||
|
||||
#else
|
||||
#include "hardware.h"
|
||||
#endif // WIN32
|
||||
|
||||
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
|
||||
void _DebugBreak(void)
|
||||
{
|
||||
DebugBreak();
|
||||
}
|
||||
|
||||
void Trace(TCHAR* lpszFormat, ...)
|
||||
{
|
||||
va_list args;
|
||||
int nBuf;
|
||||
TCHAR szBuffer[512];
|
||||
|
||||
va_start(args, lpszFormat);
|
||||
// nBuf = vsprintf(szBuffer, lpszFormat, args);
|
||||
// nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);
|
||||
#ifdef _UNICODE
|
||||
nBuf = _vsnwprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), lpszFormat, args);
|
||||
#else
|
||||
nBuf = _vsnprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), lpszFormat, args);
|
||||
#endif
|
||||
OutputDebugString(szBuffer);
|
||||
// was there an error? was the expanded string too long?
|
||||
// ASSERT(nBuf >= 0);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void Assert(void* assert, TCHAR* file, int line, void* msg)
|
||||
{
|
||||
if (msg == NULL) {
|
||||
printf("ASSERT -- %s occured on line %u of file %s.\n",
|
||||
assert, line, file);
|
||||
} else {
|
||||
printf("ASSERT -- %s occured on line %u of file %s: Message = %s.\n",
|
||||
assert, line, file, msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
//inline void Trace(TCHAR* lpszFormat, ...) { };
|
||||
//inline void Assert(void* assert, TCHAR* file, int line, void* msg) { };
|
||||
void Trace(TCHAR* lpszFormat, ...) { };
|
||||
void Assert(void* assert, TCHAR* file, int line, void* msg) { };
|
||||
|
||||
#endif //_DEBUG
|
||||
/////////////////////////////////////////////////////////////////////////////
|
72
reactos/lib/shell32/control/trace.h
Normal file
72
reactos/lib/shell32/control/trace.h
Normal file
|
@ -0,0 +1,72 @@
|
|||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
#ifndef __TRACE_H__
|
||||
#define __TRACE_H__
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
||||
//=============================================================================
|
||||
// BreakPoint() macro.
|
||||
//=============================================================================
|
||||
|
||||
#ifdef _X86_
|
||||
#define BreakPoint() _asm { int 3h }
|
||||
#else
|
||||
#define BreakPoint() _DebugBreak()
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
// MACRO: ASSERT()
|
||||
//=============================================================================
|
||||
|
||||
#ifndef ASSERT
|
||||
#define ASSERT(exp) \
|
||||
{ \
|
||||
if ( !(exp) ) \
|
||||
{ \
|
||||
Assert(#exp, __FILE__, __LINE__, NULL); \
|
||||
BreakPoint(); \
|
||||
} \
|
||||
} \
|
||||
|
||||
#define ASSERTMSG(exp, msg) \
|
||||
{ \
|
||||
if ( !(exp) ) \
|
||||
{ \
|
||||
Assert(#exp, __FILE__, __LINE__, msg); \
|
||||
BreakPoint(); \
|
||||
} \
|
||||
}
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
// MACRO: TRACE()
|
||||
//=============================================================================
|
||||
|
||||
void Assert(void* assert, TCHAR* file, int line, void* msg);
|
||||
void Trace(TCHAR* lpszFormat, ...);
|
||||
void Trace1(int code, TCHAR* lpszFormat, ...);
|
||||
|
||||
#define TRACE Trace
|
||||
#define TRACE0 Trace
|
||||
|
||||
#else // _DEBUG
|
||||
|
||||
#ifndef ASSERT
|
||||
#define ASSERT(exp)
|
||||
#define ASSERTMSG(exp, msg)
|
||||
#endif
|
||||
|
||||
//#define TRACE0 TRACE
|
||||
//#define TRACE1 TRACE
|
||||
|
||||
void Assert(void* assert, TCHAR* file, int line, void* msg);
|
||||
void Trace(TCHAR* lpszFormat, ...);
|
||||
|
||||
#define TRACE 0 ? (void)0 : Trace
|
||||
|
||||
|
||||
#endif // !_DEBUG
|
||||
|
||||
#endif // __TRACE_H__
|
||||
/////////////////////////////////////////////////////////////////////////////
|
|
@ -1,33 +1,55 @@
|
|||
# $Id: makefile,v 1.5 2001/08/21 20:13:07 chorns Exp $
|
||||
# $Id: makefile,v 1.6 2002/09/24 15:06:09 robd Exp $
|
||||
|
||||
PATH_TO_TOP = ../..
|
||||
|
||||
TARGET_DEFONLY = yes
|
||||
SHELL32_ALIAS = roshel32
|
||||
COMCTL32_ALIAS = rosctl32
|
||||
#SHELL32_ALIAS = shell32
|
||||
#COMCTL32_ALIAS = comctl32
|
||||
|
||||
#TARGET_NAME = $(SHELL32_ALIAS)
|
||||
TARGET_NAME = roshel32
|
||||
|
||||
TARGET_DEFNAME = shell32
|
||||
|
||||
TARGET_TYPE = dynlink
|
||||
|
||||
TARGET_NAME = shell32
|
||||
#TARGET_SDKLIBS = ntdll.a kernel32.a user32.a gdi32.a advapi32.a $(COMCTL32_ALIAS).a msvcrt.a
|
||||
TARGET_SDKLIBS = ntdll.a kernel32.a user32.a gdi32.a advapi32.a msvcrt.a
|
||||
|
||||
TARGET_GCCLIBS = comctl32 comdlg32 version
|
||||
|
||||
TARGET_CFLAGS = -D_WIN32_IE=0x0400 -DUNICODE -D_UNICODE -O2 -Wall -Wstrict-prototypes -fno-builtin -DDBG
|
||||
|
||||
TARGET_CPPFLAGS = -D_WIN32_IE=0x0400 -DUNICODE -D_UNICODE -O2 -Wall -Wstrict-prototypes -fno-builtin -DDBG
|
||||
|
||||
#TARGET_LFLAGS = -nostdlib
|
||||
|
||||
TARGET_BASE = 0x77260000
|
||||
|
||||
TARGET_SDKLIBS = ntdll.a kernel32.a
|
||||
MISC_OBJECTS = \
|
||||
misc/dllmain.o \
|
||||
misc/_stubs.o \
|
||||
misc/stubs.o
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
CONTROL_OBJECTS = \
|
||||
control/framewnd.o \
|
||||
control/listview.o \
|
||||
control/control.o \
|
||||
control/settings.o \
|
||||
control/trace.o
|
||||
|
||||
TARGET_CLEAN = misc/*.o
|
||||
TARGET_OBJECTS = \
|
||||
$(MISC_OBJECTS) \
|
||||
$(CONTROL_OBJECTS)
|
||||
|
||||
TARGET_CLEAN = $(TARGET_OBJECTS) $(TARGET_NAME).coff
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
MISC_OBJECTS = \
|
||||
misc/dllmain.o \
|
||||
misc/stubs.o
|
||||
MK_CFLAGS = -D_WIN32_IE=0x0400 -D_UNICODE -DUNICODE -I./
|
||||
MK_CPPFLAGS = -D_WIN32_IE=0x0400 -D_UNICODE -DUNICODE -I./
|
||||
MK_RCFLAGS = -D_WIN32_IE=0x0400 -D_UNICODE -DUNICODE
|
||||
|
||||
OBJECTS = \
|
||||
$(MISC_OBJECTS)
|
||||
|
||||
$(TARGET_NAME).o: $(OBJECTS)
|
||||
$(LD) -r $(OBJECTS) -o $(TARGET_NAME).o
|
||||
|
||||
# EOF
|
||||
|
|
89
reactos/lib/shell32/misc/_stubs.cpp
Normal file
89
reactos/lib/shell32/misc/_stubs.cpp
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* ReactOS shell32 -
|
||||
*
|
||||
* _stubs.cpp
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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: stubs.cpp,
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: lib/shell32/misc/stubs.c
|
||||
* PURPOSE: C++ Stubbed exports
|
||||
* PROGRAMMER: Robert Dickenson (robd@reactos.org)
|
||||
*/
|
||||
|
||||
//#include <ddk/ntddk.h>
|
||||
#ifdef _MSC_VER
|
||||
#include <Objbase.h>
|
||||
#else
|
||||
#include <windows.h>
|
||||
#endif
|
||||
//#define NDEBUG
|
||||
//#include <debug.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "shell32.h"
|
||||
|
||||
|
||||
#define STUB \
|
||||
do \
|
||||
{ \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
// DbgPrint ("%s(%d):%s not implemented\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
|
||||
|
||||
#ifndef __GNUC__
|
||||
|
||||
//long __stdcall
|
||||
STDAPI
|
||||
DllGetClassObject(const CLSID & rclsid, const IID & riid, void ** ppv)
|
||||
{
|
||||
STUB;
|
||||
/*
|
||||
This function supports the standard return values:
|
||||
E_INVALIDARG
|
||||
E_OUTOFMEMORY
|
||||
E_UNEXPECTED
|
||||
as well as the following:
|
||||
S_OK - The object was retrieved successfully
|
||||
CLASS_E_CLASSNOTAVAILABLE - The DLL does not support the class (object definition)
|
||||
*/
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
//VOID STDCALL
|
||||
long __stdcall
|
||||
DllGetClassObject(DWORD Unknown1, DWORD Unknown2, DWORD Unknown3)
|
||||
{
|
||||
STUB;
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
|
@ -1,4 +1,25 @@
|
|||
/* $Id: dllmain.c,v 1.1 2001/07/06 02:47:17 rex Exp $
|
||||
/*
|
||||
* ReactOS shell32 - main library entry point
|
||||
*
|
||||
* dllmain.c
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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: dllmain.c,v 1.2 2002/09/24 15:06:10 robd Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
|
@ -7,11 +28,22 @@
|
|||
* PROGRAMMER: Rex Jolliff (rex@lvcablemodem.com)
|
||||
*/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
//#include <ddk/ntddk.h>
|
||||
#include <windows.h>
|
||||
#include <cpl.h>
|
||||
#include "..\control\control.h"
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
//#define NDEBUG
|
||||
//#include <debug.h>
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable:4273) // : inconsistent dll linkage. dllexport assumed.
|
||||
#define STDCALL CALLBACK
|
||||
#define WINBOOL BOOL
|
||||
|
||||
#else
|
||||
#endif
|
||||
#define DPRINT(a)
|
||||
#define DPRINT1(a)
|
||||
|
||||
|
||||
INT STDCALL
|
||||
|
@ -24,6 +56,7 @@ DllMain(PVOID hinstDll,
|
|||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
hInst = hinstDll;
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
|
|
726
reactos/lib/shell32/misc/shlwapi.h
Normal file
726
reactos/lib/shell32/misc/shlwapi.h
Normal file
|
@ -0,0 +1,726 @@
|
|||
/*
|
||||
* SHLWAPI.DLL functions
|
||||
*
|
||||
* Copyright (C) 2000 Juergen Schmied
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#ifndef __WINE_SHLWAPI_H
|
||||
#define __WINE_SHLWAPI_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* defined(__cplusplus) */
|
||||
|
||||
#ifndef NO_SHLWAPI_REG
|
||||
|
||||
/* Registry functions */
|
||||
|
||||
DWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR);
|
||||
DWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR);
|
||||
#define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey)
|
||||
|
||||
DWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR);
|
||||
DWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR);
|
||||
#define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey)
|
||||
|
||||
DWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR);
|
||||
DWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR);
|
||||
#define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue)
|
||||
|
||||
DWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD);
|
||||
DWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD);
|
||||
#define SHGetValue WINELIB_NAME_AW(SHGetValue)
|
||||
|
||||
DWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD);
|
||||
DWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD);
|
||||
#define SHSetValue WINELIB_NAME_AW(SHSetValue)
|
||||
|
||||
DWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
|
||||
DWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
|
||||
#define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx)
|
||||
|
||||
LONG WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD);
|
||||
LONG WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD);
|
||||
#define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx)
|
||||
|
||||
LONG WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
|
||||
LONG WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
|
||||
#define SHEnumValue WINELIB_NAME_AW(SHEnumValue)
|
||||
|
||||
LONG WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
||||
LONG WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
||||
#define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey)
|
||||
|
||||
DWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD);
|
||||
DWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD);
|
||||
#define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath)
|
||||
|
||||
DWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD);
|
||||
DWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);
|
||||
#define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath)
|
||||
|
||||
DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD);
|
||||
DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD);
|
||||
#define SHCopyKey WINELIB_NAME_AW(SHCopyKey)
|
||||
|
||||
/* Undocumented registry functions */
|
||||
|
||||
HKEY WINAPI SHRegDuplicateHKey(HKEY hKey);
|
||||
|
||||
/* FIXME: SHDeleteOrphanKey */
|
||||
|
||||
|
||||
/* User registry functions */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SHREGDEL_DEFAULT = 0,
|
||||
SHREGDEL_HKCU = 0x1,
|
||||
SHREGDEL_HKLM = 0x10,
|
||||
SHREGDEL_BOTH = SHREGDEL_HKLM | SHREGDEL_HKCU
|
||||
} SHREGDEL_FLAGS;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SHREGENUM_DEFAULT = 0,
|
||||
SHREGENUM_HKCU = 0x1,
|
||||
SHREGENUM_HKLM = 0x10,
|
||||
SHREGENUM_BOTH = SHREGENUM_HKLM | SHREGENUM_HKCU
|
||||
} SHREGENUM_FLAGS;
|
||||
|
||||
#define SHREGSET_HKCU 0x1 /* Apply to HKCU if empty */
|
||||
#define SHREGSET_FORCE_HKCU 0x2 /* Always apply to HKCU */
|
||||
#define SHREGSET_HKLM 0x4 /* Apply to HKLM if empty */
|
||||
#define SHREGSET_FORCE_HKLM 0x8 /* Always apply to HKLM */
|
||||
#define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)
|
||||
|
||||
typedef HANDLE HUSKEY;
|
||||
typedef HUSKEY *PHUSKEY;
|
||||
|
||||
LONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
|
||||
LONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
|
||||
#define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey)
|
||||
|
||||
LONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
|
||||
LONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
|
||||
#define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey)
|
||||
|
||||
LONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD,
|
||||
BOOL,LPVOID,DWORD);
|
||||
LONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
|
||||
BOOL,LPVOID,DWORD);
|
||||
#define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue)
|
||||
|
||||
LONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
|
||||
LONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
|
||||
#define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue)
|
||||
|
||||
LONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
|
||||
LONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
|
||||
#define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue)
|
||||
|
||||
LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
|
||||
LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
|
||||
#define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey)
|
||||
|
||||
LONG WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS);
|
||||
LONG WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS);
|
||||
#define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey)
|
||||
|
||||
LONG WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD,
|
||||
LPVOID,LPDWORD,SHREGENUM_FLAGS);
|
||||
LONG WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,
|
||||
LPVOID,LPDWORD,SHREGENUM_FLAGS);
|
||||
#define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue)
|
||||
|
||||
LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
|
||||
LPDWORD,SHREGENUM_FLAGS);
|
||||
LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
|
||||
LPDWORD,SHREGENUM_FLAGS);
|
||||
#define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey)
|
||||
|
||||
LONG WINAPI SHRegCloseUSKey(HUSKEY);
|
||||
|
||||
LONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD,
|
||||
BOOL,LPVOID,DWORD);
|
||||
LONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
|
||||
BOOL,LPVOID,DWORD);
|
||||
#define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue)
|
||||
|
||||
LONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
|
||||
LONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
|
||||
#define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue)
|
||||
|
||||
BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL);
|
||||
BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL);
|
||||
#define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue)
|
||||
|
||||
#endif /* NO_SHLWAPI_REG */
|
||||
|
||||
|
||||
/* Path functions */
|
||||
#ifndef NO_SHLWAPI_PATH
|
||||
|
||||
/* GetPathCharType return flags */
|
||||
#define GCT_INVALID 0x0
|
||||
#define GCT_LFNCHAR 0x1
|
||||
#define GCT_SHORTCHAR 0x2
|
||||
#define GCT_WILD 0x4
|
||||
#define GCT_SEPARATOR 0x8
|
||||
|
||||
LPSTR WINAPI PathAddBackslashA(LPSTR);
|
||||
LPWSTR WINAPI PathAddBackslashW(LPWSTR);
|
||||
#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
|
||||
|
||||
BOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR);
|
||||
BOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR);
|
||||
#define PathAddExtension WINELIB_NAME_AW(PathAddExtension)
|
||||
|
||||
BOOL WINAPI PathAppendA(LPSTR,LPCSTR);
|
||||
BOOL WINAPI PathAppendW(LPWSTR,LPCWSTR);
|
||||
#define PathAppend WINELIB_NAME_AW(PathAppend)
|
||||
|
||||
LPSTR WINAPI PathBuildRootA(LPSTR,int);
|
||||
LPWSTR WINAPI PathBuildRootW(LPWSTR,int);
|
||||
#define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot)
|
||||
|
||||
BOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR);
|
||||
BOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR);
|
||||
#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)
|
||||
|
||||
LPSTR WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR);
|
||||
LPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR);
|
||||
#define PathCombine WINELIB_NAME_AW(PathCombine)
|
||||
|
||||
BOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT);
|
||||
BOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT);
|
||||
#define PathCompactPath WINELIB_NAME_AW(PathCompactPath)
|
||||
|
||||
BOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD);
|
||||
BOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD);
|
||||
#define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx)
|
||||
|
||||
int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR);
|
||||
int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR);
|
||||
#define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix)
|
||||
|
||||
BOOL WINAPI PathFileExistsA(LPCSTR);
|
||||
BOOL WINAPI PathFileExistsW(LPCWSTR);
|
||||
#define PathFileExists WINELIB_NAME_AW(PathFileExists)
|
||||
|
||||
LPSTR WINAPI PathFindExtensionA(LPCSTR);
|
||||
LPWSTR WINAPI PathFindExtensionW(LPCWSTR);
|
||||
#define PathFindExtension WINELIB_NAME_AW(PathFindExtension)
|
||||
|
||||
LPSTR WINAPI PathFindFileNameA(LPCSTR);
|
||||
LPWSTR WINAPI PathFindFileNameW(LPCWSTR);
|
||||
#define PathFindFileName WINELIB_NAME_AW(PathFindFileName)
|
||||
|
||||
LPSTR WINAPI PathFindNextComponentA(LPCSTR);
|
||||
LPWSTR WINAPI PathFindNextComponentW(LPCWSTR);
|
||||
#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)
|
||||
|
||||
BOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*);
|
||||
BOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*);
|
||||
#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
|
||||
|
||||
LPSTR WINAPI PathGetArgsA(LPCSTR);
|
||||
LPWSTR WINAPI PathGetArgsW(LPCWSTR);
|
||||
#define PathGetArgs WINELIB_NAME_AW(PathGetArgs)
|
||||
|
||||
UINT WINAPI PathGetCharTypeA(UCHAR);
|
||||
UINT WINAPI PathGetCharTypeW(WCHAR);
|
||||
#define PathGetCharType WINELIB_NAME_AW(PathGetCharType)
|
||||
|
||||
int WINAPI PathGetDriveNumberA(LPCSTR);
|
||||
int WINAPI PathGetDriveNumberW(LPCWSTR);
|
||||
#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)
|
||||
|
||||
BOOL WINAPI PathIsDirectoryA(LPCSTR);
|
||||
BOOL WINAPI PathIsDirectoryW(LPCWSTR);
|
||||
#define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory)
|
||||
|
||||
BOOL WINAPI PathIsDirectoryEmptyA(LPCSTR);
|
||||
BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR);
|
||||
#define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty)
|
||||
|
||||
BOOL WINAPI PathIsFileSpecA(LPCSTR);
|
||||
BOOL WINAPI PathIsFileSpecW(LPCWSTR);
|
||||
#define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec);
|
||||
|
||||
BOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR);
|
||||
BOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR);
|
||||
#define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix)
|
||||
|
||||
BOOL WINAPI PathIsRelativeA(LPCSTR);
|
||||
BOOL WINAPI PathIsRelativeW(LPCWSTR);
|
||||
#define PathIsRelative WINELIB_NAME_AW(PathIsRelative)
|
||||
|
||||
BOOL WINAPI PathIsRootA(LPCSTR);
|
||||
BOOL WINAPI PathIsRootW(LPCWSTR);
|
||||
#define PathIsRoot WINELIB_NAME_AW(PathIsRoot)
|
||||
|
||||
BOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR);
|
||||
BOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR);
|
||||
#define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot)
|
||||
|
||||
BOOL WINAPI PathIsUNCA(LPCSTR);
|
||||
BOOL WINAPI PathIsUNCW(LPCWSTR);
|
||||
#define PathIsUNC WINELIB_NAME_AW(PathIsUNC)
|
||||
|
||||
BOOL WINAPI PathIsUNCServerA(LPCSTR);
|
||||
BOOL WINAPI PathIsUNCServerW(LPCWSTR);
|
||||
#define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer)
|
||||
|
||||
BOOL WINAPI PathIsUNCServerShareA(LPCSTR);
|
||||
BOOL WINAPI PathIsUNCServerShareW(LPCWSTR);
|
||||
#define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare)
|
||||
|
||||
BOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR);
|
||||
BOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR);
|
||||
#define PathIsContentType WINELIB_NAME_AW(PathIsContentType)
|
||||
|
||||
BOOL WINAPI PathIsURLA(LPCSTR);
|
||||
BOOL WINAPI PathIsURLW(LPCWSTR);
|
||||
#define PathIsURL WINELIB_NAME_AW(PathIsURL)
|
||||
|
||||
BOOL WINAPI PathMakePrettyA(LPSTR);
|
||||
BOOL WINAPI PathMakePrettyW(LPWSTR);
|
||||
#define PathMakePretty WINELIB_NAME_AW(PathMakePretty)
|
||||
|
||||
BOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR);
|
||||
BOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR);
|
||||
#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
|
||||
|
||||
int WINAPI PathParseIconLocationA(LPSTR);
|
||||
int WINAPI PathParseIconLocationW(LPWSTR);
|
||||
#define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation)
|
||||
|
||||
VOID WINAPI PathQuoteSpacesA(LPSTR);
|
||||
VOID WINAPI PathQuoteSpacesW(LPWSTR);
|
||||
#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
|
||||
|
||||
BOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD);
|
||||
BOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD);
|
||||
#define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo)
|
||||
|
||||
VOID WINAPI PathRemoveArgsA(LPSTR);
|
||||
VOID WINAPI PathRemoveArgsW(LPWSTR);
|
||||
#define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs)
|
||||
|
||||
LPSTR WINAPI PathRemoveBackslashA(LPSTR);
|
||||
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR);
|
||||
#define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)
|
||||
|
||||
VOID WINAPI PathRemoveBlanksA(LPSTR);
|
||||
VOID WINAPI PathRemoveBlanksW(LPWSTR);
|
||||
#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
|
||||
|
||||
VOID WINAPI PathRemoveExtensionA(LPSTR);
|
||||
VOID WINAPI PathRemoveExtensionW(LPWSTR);
|
||||
#define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension)
|
||||
|
||||
BOOL WINAPI PathRemoveFileSpecA(LPSTR);
|
||||
BOOL WINAPI PathRemoveFileSpecW(LPWSTR);
|
||||
#define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec)
|
||||
|
||||
BOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR);
|
||||
BOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR);
|
||||
#define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension)
|
||||
|
||||
BOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT);
|
||||
BOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT);
|
||||
#define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify)
|
||||
|
||||
VOID WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR);
|
||||
VOID WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR);
|
||||
#define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath)
|
||||
|
||||
LPSTR WINAPI PathSkipRootA(LPCSTR);
|
||||
LPWSTR WINAPI PathSkipRootW(LPCWSTR);
|
||||
#define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot)
|
||||
|
||||
VOID WINAPI PathStripPathA(LPSTR);
|
||||
VOID WINAPI PathStripPathW(LPWSTR);
|
||||
#define PathStripPath WINELIB_NAME_AW(PathStripPath)
|
||||
|
||||
BOOL WINAPI PathStripToRootA(LPSTR);
|
||||
BOOL WINAPI PathStripToRootW(LPWSTR);
|
||||
#define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot)
|
||||
|
||||
VOID WINAPI PathUnquoteSpacesA(LPSTR);
|
||||
VOID WINAPI PathUnquoteSpacesW(LPWSTR);
|
||||
#define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces)
|
||||
|
||||
BOOL WINAPI PathMakeSystemFolderA(LPCSTR);
|
||||
BOOL WINAPI PathMakeSystemFolderW(LPCWSTR);
|
||||
#define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder)
|
||||
|
||||
BOOL WINAPI PathUnmakeSystemFolderA(LPCSTR);
|
||||
BOOL WINAPI PathUnmakeSystemFolderW(LPCWSTR);
|
||||
#define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder)
|
||||
|
||||
BOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD);
|
||||
BOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD);
|
||||
#define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder)
|
||||
|
||||
BOOL WINAPI PathIsNetworkPathA(LPCSTR);
|
||||
BOOL WINAPI PathIsNetworkPathW(LPCWSTR);
|
||||
#define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath)
|
||||
|
||||
BOOL WINAPI PathIsLFNFileSpecA(LPCSTR);
|
||||
BOOL WINAPI PathIsLFNFileSpecW(LPCWSTR);
|
||||
#define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec)
|
||||
|
||||
int WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR *,int);
|
||||
int WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR *,int);
|
||||
#define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray)
|
||||
|
||||
VOID WINAPI PathUndecorateA(LPSTR);
|
||||
VOID WINAPI PathUndecorateW(LPWSTR);
|
||||
#define PathUndecorate WINELIB_NAME_AW(PathUndecorate)
|
||||
|
||||
BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT);
|
||||
BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT);
|
||||
#define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings)
|
||||
|
||||
/* Url functions */
|
||||
|
||||
/* These are used by UrlGetPart routine */
|
||||
typedef enum {
|
||||
URL_PART_NONE = 0,
|
||||
URL_PART_SCHEME = 1,
|
||||
URL_PART_HOSTNAME,
|
||||
URL_PART_USERNAME,
|
||||
URL_PART_PASSWORD,
|
||||
URL_PART_PORT,
|
||||
URL_PART_QUERY
|
||||
} URL_PART;
|
||||
|
||||
#define URL_PARTFLAG_KEEPSCHEME 0x00000001
|
||||
|
||||
/* These are used by the UrlIs... routines */
|
||||
typedef enum {
|
||||
URLIS_URL,
|
||||
URLIS_OPAQUE,
|
||||
URLIS_NOHISTORY,
|
||||
URLIS_FILEURL,
|
||||
URLIS_APPLIABLE,
|
||||
URLIS_DIRECTORY,
|
||||
URLIS_HASQUERY
|
||||
} URLIS;
|
||||
|
||||
/* This is used by the UrlApplyScheme... routines */
|
||||
#define URL_APPLY_FORCEAPPLY 0x00000008
|
||||
#define URL_APPLY_GUESSFILE 0x00000004
|
||||
#define URL_APPLY_GUESSSCHEME 0x00000002
|
||||
#define URL_APPLY_DEFAULT 0x00000001
|
||||
|
||||
/* The following are used by UrlEscape..., UrlUnEscape...,
|
||||
* UrlCanonicalize..., and UrlCombine... routines
|
||||
*/
|
||||
#define URL_WININET_COMPATIBILITY 0x80000000
|
||||
#define URL_PLUGGABLE_PROTOCOL 0x40000000
|
||||
#define URL_ESCAPE_UNSAFE 0x20000000
|
||||
#define URL_UNESCAPE 0x10000000
|
||||
|
||||
#define URL_DONT_SIMPLIFY 0x08000000
|
||||
#define URL_NO_META URL_DONT_SIMPLIFY
|
||||
#define URL_ESCAPE_SPACES_ONLY 0x04000000
|
||||
#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000
|
||||
#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
|
||||
#define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO
|
||||
|
||||
#define URL_INTERNAL_PATH 0x00800000 /* Will escape #'s in paths */
|
||||
#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000
|
||||
#define URL_CONVERT_IF_DOSPATH 0x00200000
|
||||
#define URL_UNESCAPE_INPLACE 0x00100000
|
||||
|
||||
#define URL_FILE_USE_PATHURL 0x00010000
|
||||
|
||||
#define URL_ESCAPE_SEGMENT_ONLY 0x00002000
|
||||
#define URL_ESCAPE_PERCENT 0x00001000
|
||||
|
||||
HRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD);
|
||||
HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
|
||||
#define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme)
|
||||
|
||||
HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD);
|
||||
HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
|
||||
#define UrlCanonicalize WINELIB_NAME_AW(UrlCanoncalize)
|
||||
|
||||
HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD);
|
||||
HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD);
|
||||
#define UrlCombine WINELIB_NAME_AW(UrlCombine)
|
||||
|
||||
INT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL);
|
||||
INT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL);
|
||||
#define UrlCompare WINELIB_NAME_AW(UrlCompare)
|
||||
|
||||
HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD);
|
||||
HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
|
||||
#define UrlEscape WINELIB_NAME_AW(UrlEscape)
|
||||
|
||||
#define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \
|
||||
URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)
|
||||
#define UrlEscapeSpacesW(x,y,z) UrlCanonicalizeW(x, y, z, \
|
||||
URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)
|
||||
#define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces)
|
||||
|
||||
LPCSTR WINAPI UrlGetLocationA(LPCSTR);
|
||||
LPCWSTR WINAPI UrlGetLocationW(LPCWSTR);
|
||||
#define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation)
|
||||
|
||||
HRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD);
|
||||
HRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD);
|
||||
#define UrlGetPart WINELIB_NAME_AW(UrlGetPart)
|
||||
|
||||
BOOL WINAPI HashData(const unsigned char *,INT,unsigned char *lpDest,INT);
|
||||
|
||||
HRESULT WINAPI UrlHashA(LPCSTR,unsigned char *,INT);
|
||||
HRESULT WINAPI UrlHashW(LPCWSTR,unsigned char *,INT);
|
||||
#define UrlHash WINELIB_NAME_AW(UrlHash)
|
||||
|
||||
BOOL WINAPI UrlIsA(LPCSTR,URLIS);
|
||||
BOOL WINAPI UrlIsW(LPCWSTR,URLIS);
|
||||
#define UrlIs WINELIB_NAME_AW(UrlIs)
|
||||
|
||||
BOOL WINAPI UrlIsNoHistoryA(LPCSTR);
|
||||
BOOL WINAPI UrlIsNoHistoryW(LPCWSTR);
|
||||
#define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory)
|
||||
|
||||
BOOL WINAPI UrlIsOpaqueA(LPCSTR);
|
||||
BOOL WINAPI UrlIsOpaqueW(LPCWSTR);
|
||||
#define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque)
|
||||
|
||||
#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL)
|
||||
#define UrlIsFileUrlW(y) UrlIsW(x, URLIS_FILEURL)
|
||||
#define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl)
|
||||
|
||||
HRESULT WINAPI UrlUnescapeA(LPCSTR,LPSTR,LPDWORD,DWORD);
|
||||
HRESULT WINAPI UrlUnescapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
|
||||
#define UrlUnescape WINELIB_AW_NAME(UrlUnescape)
|
||||
|
||||
#define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \
|
||||
y | URL_UNESCAPE_INPLACE)
|
||||
#define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \
|
||||
y | URL_UNESCAPE_INPLACE)
|
||||
#define UrlUnescapeInPlace WINELIB_AW_NAME(UrlUnescapeInPlace)
|
||||
|
||||
HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD);
|
||||
HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
|
||||
#define UrlCreateFromPath WINELIB_AW_NAME(UrlCreateFromPath)
|
||||
|
||||
#endif /* NO_SHLWAPI_PATH */
|
||||
|
||||
|
||||
/* String functions */
|
||||
#ifndef NO_SHLWAPI_STRFCNS
|
||||
|
||||
/* StrToIntEx flags */
|
||||
#define STIF_DEFAULT 0x0L
|
||||
#define STIF_SUPPORT_HEX 0x1L
|
||||
|
||||
BOOL WINAPI ChrCmpIA (WORD w1, WORD w2);
|
||||
BOOL WINAPI ChrCmpIW (WCHAR w1, WCHAR w2);
|
||||
#define ChrCmpI WINELIB_NAME_AW(ChrCmpI)
|
||||
|
||||
INT WINAPI StrCSpnA(LPCSTR,LPCSTR);
|
||||
INT WINAPI StrCSpnW(LPCWSTR,LPCWSTR);
|
||||
#define StrCSpn WINELIB_NAME_AW(StrCSpn)
|
||||
|
||||
INT WINAPI StrCSpnIA(LPCSTR,LPCSTR);
|
||||
INT WINAPI StrCSpnIW(LPCWSTR,LPCWSTR);
|
||||
#define StrCSpnI WINELIB_NAME_AW(StrCSpnI)
|
||||
|
||||
#define StrCatA lstrcatA
|
||||
LPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR);
|
||||
#define StrCat WINELIB_NAME_AW(StrCat)
|
||||
|
||||
LPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,INT);
|
||||
LPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,INT);
|
||||
#define StrCatBuff WINELIB_NAME_AW(StrCatBuff)
|
||||
|
||||
LPSTR WINAPI StrChrA(LPCSTR,WORD);
|
||||
LPWSTR WINAPI StrChrW(LPCWSTR,WCHAR);
|
||||
#define StrChr WINELIB_NAME_AW(StrChr)
|
||||
|
||||
LPSTR WINAPI StrChrIA(LPCSTR,CHAR);
|
||||
LPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR);
|
||||
#define StrChrI WINELIB_NAME_AW(StrChrI)
|
||||
|
||||
#define StrCmpA lstrcmpA
|
||||
int WINAPI StrCmpW(LPCWSTR,LPCWSTR);
|
||||
#define StrCmp WINELIB_NAME_AW(StrCmp)
|
||||
|
||||
#define StrCmpIA lstrcmpiA
|
||||
int WINAPI StrCmpIW(LPCWSTR,LPCWSTR);
|
||||
#define StrCmpI WINELIB_NAME_AW(StrCmpI)
|
||||
|
||||
#define StrCpyA lstrcpyA
|
||||
LPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR);
|
||||
#define StrCpy WINELIB_NAME_AW(StrCpy)
|
||||
|
||||
//#define StrCpyNA lstrcpynA
|
||||
LPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int);
|
||||
#define StrCpyN WINELIB_NAME_AW(StrCpyN)
|
||||
#define StrNCpy WINELIB_NAME_AW(StrCpyN)
|
||||
|
||||
INT WINAPI StrCmpNA(LPCSTR,LPCSTR,INT);
|
||||
INT WINAPI StrCmpNW(LPCWSTR,LPCWSTR,INT);
|
||||
#define StrCmpN WINELIB_NAME_AW(StrCmpN)
|
||||
#define StrNCmp WINELIB_NAME_AW(StrCmpN)
|
||||
|
||||
INT WINAPI StrCmpNIA(LPCSTR,LPCSTR,INT);
|
||||
INT WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,INT);
|
||||
#define StrCmpNI WINELIB_NAME_AW(StrCmpNI)
|
||||
#define StrNCmpI WINELIB_NAME_AW(StrCmpNI)
|
||||
|
||||
LPSTR WINAPI StrDupA(LPCSTR);
|
||||
LPWSTR WINAPI StrDupW(LPCWSTR);
|
||||
#define StrDup WINELIB_NAME_AW(StrDup)
|
||||
|
||||
LPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT);
|
||||
LPWSTR WINAPI StrFormatByteSizeW (DWORD,LPWSTR,UINT);
|
||||
#define StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
|
||||
|
||||
int WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int);
|
||||
int WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int);
|
||||
#define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval)
|
||||
|
||||
BOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int);
|
||||
BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int);
|
||||
#define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual)
|
||||
|
||||
#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c)
|
||||
#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c)
|
||||
|
||||
#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c)
|
||||
#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c)
|
||||
|
||||
LPSTR WINAPI StrNCatA(LPSTR,LPCSTR,int);
|
||||
LPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int);
|
||||
#define StrNCat WINELIB_NAME_AW(StrNCat)
|
||||
#define StrCatN WINELIB_NAME_AW(StrNCat)
|
||||
|
||||
LPSTR WINAPI StrPBrkA(LPCSTR,LPCSTR);
|
||||
LPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR);
|
||||
#define StrPBrk WINELIB_NAME_AW(StrPBrk)
|
||||
|
||||
LPSTR WINAPI StrRChrA(LPCSTR,LPCSTR,WORD);
|
||||
LPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WORD);
|
||||
#define StrRChr WINELIB_NAME_AW(StrRChr)
|
||||
|
||||
LPSTR WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD);
|
||||
LPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WORD);
|
||||
#define StrRChrI WINELIB_NAME_AW(StrRChrI)
|
||||
|
||||
LPSTR WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR);
|
||||
LPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR);
|
||||
#define StrRStrI WINELIB_NAME_AW(StrRStrI)
|
||||
|
||||
int WINAPI StrSpnA(LPCSTR,LPCSTR);
|
||||
int WINAPI StrSpnW(LPCWSTR,LPCWSTR);
|
||||
#define StrSpn WINELIB_NAME_AW(StrSpn)
|
||||
|
||||
LPSTR WINAPI StrStrA(LPCSTR,LPCSTR);
|
||||
LPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR);
|
||||
#define StrStr WINELIB_NAME_AW(StrStr)
|
||||
|
||||
LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR);
|
||||
LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR);
|
||||
#define StrStrI WINELIB_NAME_AW(StrStrI)
|
||||
|
||||
int WINAPI StrToIntA(LPCSTR);
|
||||
int WINAPI StrToIntW(LPCWSTR);
|
||||
#define StrToInt WINELIB_NAME_AW(StrToInt)
|
||||
#define StrToLong WINELIB_NAME_AW(StrToInt)
|
||||
|
||||
BOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*);
|
||||
BOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*);
|
||||
#define StrToIntEx WINELIB_NAME_AW(StrToIntEx)
|
||||
|
||||
BOOL WINAPI StrTrimA(LPSTR,LPCSTR);
|
||||
BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR);
|
||||
#define StrTrim WINELIB_NAME_AW(StrTrim)
|
||||
|
||||
INT WINAPI wvnsprintfA(LPSTR lpOut, INT cchLimitIn, LPCSTR lpFmt, va_list arglist);
|
||||
INT WINAPI wvnsprintfW(LPWSTR lpOut, INT cchLimitIn, LPCWSTR lpFmt, va_list arglist);
|
||||
#define wvnsprintf WINELIB_NAME_AW(wvnsprintf)
|
||||
|
||||
INT WINAPIV wnsprintfA(LPSTR lpOut, INT cchLimitIn, LPCSTR lpFmt, ...);
|
||||
INT WINAPIV wnsprintfW(LPWSTR lpOut, INT cchLimitIn, LPCWSTR lpFmt, ...);
|
||||
#define wnsprintf WINELIB_NAME_AW(wnsprintf)
|
||||
|
||||
/* Undocumented */
|
||||
struct _STRRET;
|
||||
struct _ITEMIDLIST;
|
||||
HRESULT WINAPI StrRetToBufA(struct _STRRET *src, const struct _ITEMIDLIST *pidl, LPSTR dest, DWORD len);
|
||||
HRESULT WINAPI StrRetToBufW(struct _STRRET *src, const struct _ITEMIDLIST *pidl, LPWSTR dest, DWORD len);
|
||||
#define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf)
|
||||
|
||||
#endif /* NO_SHLWAPI_STRFCNS */
|
||||
|
||||
|
||||
/* GDI functions */
|
||||
#ifndef NO_SHLWAPI_GDI
|
||||
|
||||
HPALETTE WINAPI SHCreateShellPalette(HDC);
|
||||
|
||||
COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD);
|
||||
|
||||
COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL);
|
||||
|
||||
VOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD);
|
||||
|
||||
#endif /* NO_SHLWAPI_GDI */
|
||||
|
||||
|
||||
/* Stream functions */
|
||||
#if !defined(NO_SHLWAPI_STREAM) && defined(IStream_IMETHODS)
|
||||
|
||||
IStream * WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD);
|
||||
IStream * WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD);
|
||||
#define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream)
|
||||
|
||||
IStream * WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD);
|
||||
IStream * WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD);
|
||||
#define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2)
|
||||
|
||||
#endif /* NO_SHLWAPI_STREAM */
|
||||
|
||||
|
||||
/* Version Information */
|
||||
|
||||
typedef struct _DllVersionInfo {
|
||||
DWORD cbSize;
|
||||
DWORD dwMajorVersion;
|
||||
DWORD dwMinorVersion;
|
||||
DWORD dwBuildNumber;
|
||||
DWORD dwPlatformID;
|
||||
} DLLVERSIONINFO;
|
||||
|
||||
#define DLLVER_PLATFORM_WINDOWS 0x01 /* Win9x */
|
||||
#define DLLVER_PLATFORM_NT 0x02 /* WinNT */
|
||||
|
||||
typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif /* defined(__cplusplus) */
|
||||
|
||||
#endif /* __WINE_SHLWAPI_H */
|
File diff suppressed because it is too large
Load diff
BIN
reactos/lib/shell32/res/control.ico
Normal file
BIN
reactos/lib/shell32/res/control.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
reactos/lib/shell32/res/small.ico
Normal file
BIN
reactos/lib/shell32/res/small.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 318 B |
54
reactos/lib/shell32/resource.h
Normal file
54
reactos/lib/shell32/resource.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by roshel32.rc
|
||||
//
|
||||
#define ID_FILE_MENU 0
|
||||
#define ID_VIEW_MENU 1
|
||||
#define ID_HELP_MENU 2
|
||||
#define IDC_MYICON 2
|
||||
#define IDS_LIST_COLUMN_FIRST 91
|
||||
#define IDS_LIST_COLUMN_NAME 91
|
||||
#define IDS_LIST_COLUMN_COMMENT 92
|
||||
#define IDS_LIST_COLUMN_LAST 92
|
||||
#define IDD_CONTROL_DIALOG 102
|
||||
#define IDD_ABOUTBOX 103
|
||||
#define IDS_APP_TITLE 103
|
||||
#define IDI_CONTROL 107
|
||||
#define IDI_SMALL 108
|
||||
#define IDC_CONTROL 109
|
||||
#define IDS_APP_REG_KEY 110
|
||||
#define IDS_APP_REG_PATH 111
|
||||
|
||||
#define IDR_CONTROL_MENU 130
|
||||
#define ID_FILE_OPEN 32770
|
||||
#define ID_FILE_EXIT 32771
|
||||
#define ID_VIEW_TOOLBAR 32772
|
||||
#define ID_VIEW_STATUSBAR 32773
|
||||
#define ID_VIEW_LARGE_ICONS 32774
|
||||
#define ID_VIEW_SMALL_ICONS 32775
|
||||
#define ID_VIEW_LIST 32776
|
||||
#define ID_VIEW_DETAILS 32777
|
||||
#define ID_VIEW_ARRANGE_ICONS 32778
|
||||
#define ID_VIEW_ARRANGE_BY_NAME 32779
|
||||
#define ID_VIEW_ARRANGE_BY_COMMENT 32780
|
||||
#define ID_VIEW_ARRANGE_AUTO 32781
|
||||
#define ID_VIEW_LINE_UP_ICONS 32782
|
||||
#define ID_VIEW_REFRESH 32783
|
||||
#define ID_HELP_ABOUT 32784
|
||||
#define IDR_CONTROL_CONTEXT 32785
|
||||
#define IDR_CONTROL_CONTEXT_APPLET 32786
|
||||
#define ID_FILE_CREATE_SHORTCUT 32787
|
||||
#define ID_FILE_PASTE 32788
|
||||
#define ID_FILE_PASTE_SHORTCUT 32789
|
||||
#define IDC_STATIC -1
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 129
|
||||
#define _APS_NEXT_COMMAND_VALUE 32780
|
||||
#define _APS_NEXT_CONTROL_VALUE 1000
|
||||
#define _APS_NEXT_SYMED_VALUE 110
|
||||
#endif
|
||||
#endif
|
290
reactos/lib/shell32/roshel32.rc
Normal file
290
reactos/lib/shell32/roshel32.rc
Normal file
|
@ -0,0 +1,290 @@
|
|||
//Microsoft Developer Studio generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#define APSTUDIO_HIDDEN_SYMBOLS
|
||||
#include "windows.h"
|
||||
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||
#include "resource.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 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
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_CONTROL ICON DISCARDABLE "res/control.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Menu
|
||||
//
|
||||
|
||||
IDR_CONTROL_MENU MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "&File"
|
||||
BEGIN
|
||||
MENUITEM "&Open", ID_FILE_OPEN
|
||||
MENUITEM "&Create Shortcut", ID_FILE_CREATE_SHORTCUT, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "E&xit", ID_FILE_EXIT
|
||||
END
|
||||
POPUP "&View"
|
||||
BEGIN
|
||||
MENUITEM "&Tool Bar", ID_VIEW_TOOLBAR, GRAYED
|
||||
MENUITEM "Status &Bar", ID_VIEW_STATUSBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Lar&ge Icons", ID_VIEW_LARGE_ICONS
|
||||
MENUITEM "S&mall Icons", ID_VIEW_SMALL_ICONS
|
||||
MENUITEM "&List", ID_VIEW_LIST
|
||||
MENUITEM "&Details", ID_VIEW_DETAILS
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "Arrange &Icons"
|
||||
BEGIN
|
||||
MENUITEM "by &Name", ID_VIEW_ARRANGE_BY_NAME
|
||||
MENUITEM "by &Comment", ID_VIEW_ARRANGE_BY_COMMENT
|
||||
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Auto-Arrange", ID_VIEW_ARRANGE_AUTO
|
||||
END
|
||||
MENUITEM "Line &Up Icons", ID_VIEW_LINE_UP_ICONS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refresh\tF5", ID_VIEW_REFRESH
|
||||
END
|
||||
POPUP "&Help"
|
||||
BEGIN
|
||||
MENUITEM "&About ...", ID_HELP_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
IDR_CONTROL_CONTEXT MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "DUMMY"
|
||||
BEGIN
|
||||
POPUP "&View"
|
||||
BEGIN
|
||||
MENUITEM "Lar&ge Icons", ID_VIEW_LARGE_ICONS
|
||||
MENUITEM "S&mall Icons", ID_VIEW_SMALL_ICONS
|
||||
MENUITEM "&List", ID_VIEW_LIST
|
||||
MENUITEM "&Details", ID_VIEW_DETAILS
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "Arrange &Icons"
|
||||
BEGIN
|
||||
MENUITEM "by &Name", ID_VIEW_ARRANGE_BY_NAME
|
||||
MENUITEM "by &Comment", ID_VIEW_ARRANGE_BY_COMMENT
|
||||
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Auto-Arrange", ID_VIEW_ARRANGE_AUTO
|
||||
END
|
||||
MENUITEM "Line &Up Icons", ID_VIEW_LINE_UP_ICONS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refresh", ID_VIEW_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Paste", ID_FILE_PASTE, GRAYED
|
||||
MENUITEM "Paste &Shortcut", ID_FILE_PASTE_SHORTCUT
|
||||
, GRAYED
|
||||
END
|
||||
END
|
||||
|
||||
IDR_CONTROL_CONTEXT_APPLET MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "DUMMY"
|
||||
BEGIN
|
||||
MENUITEM "&Open", ID_FILE_OPEN
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Create Shortcut", ID_FILE_CREATE_SHORTCUT
|
||||
, GRAYED
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 230, 75
|
||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "About Control Panel"
|
||||
FONT 8, "System"
|
||||
BEGIN
|
||||
ICON IDI_CONTROL,IDC_MYICON,14,9,16,16
|
||||
LTEXT "Control Panel Version 1.0",IDC_STATIC,49,10,119,8,
|
||||
SS_NOPREFIX
|
||||
LTEXT "Copyright (C) 2002",IDC_STATIC,49,20,119,8
|
||||
DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
|
||||
END
|
||||
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||
"#include ""windows.h""\r\n"
|
||||
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||
"#include ""resource.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
#ifndef _MAC
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
(1) VERSIONINFO
|
||||
FILEVERSION 0,0,19,154
|
||||
PRODUCTVERSION 0,0,19,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "Comments", "Absolutely no warranties whatsoever - Use at your own risk\0"
|
||||
VALUE "CompanyName", "ReactOS Development Team\0"
|
||||
VALUE "FileDescription", "ReactOS Shell32 Dynamic Link Library\0"
|
||||
VALUE "FileVersion", "1, 0, 0, 1\0"
|
||||
VALUE "InternalName", "shell32\0"
|
||||
VALUE "LegalCopyright", "Copyright © 2002 Robert Dickenson\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "OriginalFilename", "shell32.dll\0"
|
||||
VALUE "PrivateBuild", "\0"
|
||||
VALUE "ProductName", "ReactOS Operating System\0"
|
||||
VALUE "ProductVersion", "0.0.19\0"
|
||||
VALUE "SpecialBuild", "Non-versioned Development Beta Release\0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0xc09, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // !_MAC
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_LIST_COLUMN_NAME "Name"
|
||||
IDS_LIST_COLUMN_COMMENT "Comment"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
ID_FILE_MENU "Contains commands for working with the selected items"
|
||||
ID_VIEW_MENU "Contains commands for manipulating the view"
|
||||
ID_HELP_MENU "Contains commands for displaying help"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
ID_VIEW_TOOLBAR "Shows or hides the tool bar"
|
||||
ID_VIEW_STATUSBAR "Shows or hides the status bar"
|
||||
ID_VIEW_LARGE_ICONS "Displays items using large icons"
|
||||
ID_VIEW_SMALL_ICONS "Displays items using small icons"
|
||||
ID_VIEW_LIST "Displays items in a list"
|
||||
ID_VIEW_DETAILS "Displays information about each item in the list"
|
||||
ID_VIEW_ARRANGE_ICONS "Contains commands for arranging items in the window"
|
||||
ID_VIEW_ARRANGE_BY_NAME "Sorts items alphabetically by name"
|
||||
ID_VIEW_ARRANGE_BY_COMMENT "Sorts items by the thier comment property"
|
||||
ID_VIEW_ARRANGE_AUTO "Arranges the items automatically"
|
||||
ID_VIEW_LINE_UP_ICONS "Arranges icons in a grid layout"
|
||||
ID_VIEW_REFRESH "Refreshes the contents of the current page"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_APP_TITLE "ReactOS Control Panel"
|
||||
IDC_CONTROL "CONTROL"
|
||||
IDS_APP_REG_KEY "\\Control Panel"
|
||||
IDS_APP_REG_PATH "Software\\ReactWare"
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (Australia) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENA)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif // English (Australia) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
|
@ -1,232 +1,240 @@
|
|||
LIBRARY shell32
|
||||
; $Id: shell32.def
|
||||
;
|
||||
; shell32.def
|
||||
;
|
||||
; ReactOS Operating System
|
||||
;
|
||||
;
|
||||
;LIBRARY shell32
|
||||
LIBRARY roshel32.dll
|
||||
EXPORTS
|
||||
SHChangeNotifyRegister@24 ; @ 2
|
||||
SHChangeNotifyDeregister@4 ; @ 4
|
||||
SHChangeNotifyDeregister ; @ 4
|
||||
SHChangeNotifyUpdateEntryList@16 ; @ 5
|
||||
PifMgr_OpenProperties@16 ; @ 9
|
||||
PifMgr_GetProperties@20 ; @ 10
|
||||
PifMgr_SetProperties@20 ; @ 11
|
||||
PifMgr_CloseProperties@8 ; @ 13
|
||||
ILGetDisplayName@8 ; @ 15
|
||||
ILFindLastID@4 ; @ 16
|
||||
ILRemoveLastID@4 ; @ 17
|
||||
ILClone@4 ; @ 18
|
||||
ILCloneFirst@4 ; @ 19
|
||||
ILGlobalClone@4 ; @ 20
|
||||
ILIsEqual@8 ; @ 21
|
||||
PifMgr_CloseProperties ; @ 13
|
||||
ILGetDisplayName ; @ 15
|
||||
ILFindLastID ; @ 16
|
||||
ILRemoveLastID ; @ 17
|
||||
ILClone ; @ 18
|
||||
ILCloneFirst ; @ 19
|
||||
ILGlobalClone ; @ 20
|
||||
ILIsEqual ; @ 21
|
||||
ILIsParent@12 ; @ 23
|
||||
ILFindChild@8 ; @ 24
|
||||
ILCombine@8 ; @ 25
|
||||
ILLoadFromStream@8 ; @ 26
|
||||
ILSaveToStream@8 ; @ 27
|
||||
ILFindChild ; @ 24
|
||||
ILCombine ; @ 25
|
||||
ILLoadFromStream ; @ 26
|
||||
ILSaveToStream ; @ 27
|
||||
SHILCreateFromPath@12 ; @ 28
|
||||
PathIsRoot@4 ; @ 29
|
||||
PathBuildRoot@8 ; @ 30
|
||||
PathFindExtension@4 ; @ 31
|
||||
PathAddBackslash@4 ; @ 32
|
||||
PathRemoveBlanks@4 ; @ 33
|
||||
PathFindFileName@4 ; @ 34
|
||||
PathRemoveFileSpec@4 ; @ 35
|
||||
PathAppend@8 ; @ 36
|
||||
PathCombine@12 ; @ 37
|
||||
PathStripPath@4 ; @ 38
|
||||
PathIsUNC@4 ; @ 39
|
||||
PathIsRelative@4 ; @ 40
|
||||
PathIsExe@4 ; @ 43
|
||||
PathFileExists@4 ; @ 45
|
||||
PathMatchSpec@8 ; @ 46
|
||||
PathMakeUniqueName@20 ; @ 47
|
||||
PathSetDlgItemPath@12 ; @ 48
|
||||
PathQualify@4 ; @ 49
|
||||
PathStripToRoot@4 ; @ 50
|
||||
PathResolve@12 ; @ 51
|
||||
PathGetArgs@4 ; @ 52
|
||||
DoEnvironmentSubst@8 ; @ 53
|
||||
DragAcceptFiles@8 ; @ 54
|
||||
PathQuoteSpaces@4 ; @ 55
|
||||
PathUnquoteSpaces@4 ; @ 56
|
||||
PathGetDriveNumber@4 ; @ 57
|
||||
PathIsRootA ; @ 29
|
||||
PathBuildRootA ; @ 30
|
||||
PathFindExtensionA ; @ 31
|
||||
PathAddBackslashA ; @ 32
|
||||
PathRemoveBlanksA ; @ 33
|
||||
PathFindFileNameA ; @ 34
|
||||
PathRemoveFileSpecA ; @ 35
|
||||
PathAppendA ; @ 36
|
||||
PathCombineA@12 ; @ 37
|
||||
PathStripPathA ; @ 38
|
||||
PathIsUNCA ; @ 39
|
||||
PathIsRelativeA ; @ 40
|
||||
PathIsExeA ; @ 43
|
||||
PathFileExistsA ; @ 45
|
||||
PathMatchSpecA ; @ 46
|
||||
PathMakeUniqueNameA@20 ; @ 47
|
||||
PathSetDlgItemPathA@12 ; @ 48
|
||||
PathQualifyA ; @ 49
|
||||
PathStripToRootA ; @ 50
|
||||
PathResolveA@12 ; @ 51
|
||||
PathGetArgsA ; @ 52
|
||||
DoEnvironmentSubst ; @ 53
|
||||
DragAcceptFiles ; @ 54
|
||||
PathQuoteSpacesA ; @ 55
|
||||
PathUnquoteSpacesA ; @ 56
|
||||
PathGetDriveNumberA ; @ 57
|
||||
ParseField@16 ; @ 58
|
||||
RestartDialog@12 ; @ 59
|
||||
ExitWindowsDialog@4 ; @ 60
|
||||
ExitWindowsDialog ; @ 60
|
||||
RunFileDlg@24 ; @ 61
|
||||
PickIconDlg@16 ; @ 62
|
||||
GetFileNameFromBrowse@28 ; @ 63
|
||||
DriveType@4 ; @ 64
|
||||
InvalidateDriveType@0 ; @ 65
|
||||
IsNetDrive@4 ; @ 66
|
||||
DriveType ; @ 64
|
||||
InvalidateDriveType ; @ 65
|
||||
IsNetDrive ; @ 66
|
||||
Shell_MergeMenus@24 ; @ 67
|
||||
SHGetSetSettings@12 ; @ 68
|
||||
SHGetNetResource@0 ; @ 69
|
||||
SHGetNetResource ; @ 69
|
||||
SHCreateDefClassObject@20 ; @ 70
|
||||
Shell_GetImageList@8 ; @ 71
|
||||
Shell_GetImageList ; @ 71
|
||||
Shell_GetCachedImageIndex@12 ; @ 72
|
||||
SHShellFolderView_Message@12 ; @ 73
|
||||
SHCreateStdEnumFmtEtc@0 ; @ 74
|
||||
SHCreateStdEnumFmtEtc ; @ 74
|
||||
PathYetAnotherMakeUniqueName@16 ; @ 75
|
||||
DragQueryInfo@0 ; @ 76
|
||||
DragQueryInfo ; @ 76
|
||||
SHMapPIDLToSystemImageListIndex@12 ; @ 77
|
||||
OleStrToStrN@16 ; @ 78
|
||||
StrToOleStrN@16 ; @ 79
|
||||
DragFinish@4 ; @ 80
|
||||
DragQueryFile@16 ; @ 81
|
||||
DragFinish ; @ 80
|
||||
;DragQueryFile@16 ; @ 81
|
||||
DragQueryFileA@16 ; @ 82
|
||||
CIDLData_CreateFromIDArray@0 ; @ 83
|
||||
SHIsBadInterfacePtr@0 ; @ 84
|
||||
CIDLData_CreateFromIDArray ; @ 83
|
||||
SHIsBadInterfacePtr ; @ 84
|
||||
; OpenRegStream=shlwapi.SHOpenRegStreamA ; @ 85
|
||||
SHRegisterDragDrop@8 ; @ 86
|
||||
SHRevokeDragDrop@4 ; @ 87
|
||||
SHRegisterDragDrop ; @ 86
|
||||
SHRevokeDragDrop ; @ 87
|
||||
SHDoDragDrop@20 ; @ 88
|
||||
SHCloneSpecialIDList@12 ; @ 89
|
||||
SHFindFiles@0 ; @ 90
|
||||
SHFindComputer@0 ; @ 91
|
||||
PathGetShortPath@4 ; @ 92
|
||||
Win32CreateDirectory@0 ; @ 93
|
||||
Win32RemoveDirectory@0 ; @ 94
|
||||
SHLogILFromFSIL@4 ; @ 95
|
||||
SHFindFiles ; @ 90
|
||||
SHFindComputer ; @ 91
|
||||
PathGetShortPath ; @ 92
|
||||
Win32CreateDirectory ; @ 93
|
||||
Win32RemoveDirectory ; @ 94
|
||||
SHLogILFromFSIL ; @ 95
|
||||
StrRetToStrN@16 ; @ 96
|
||||
SHWaitForFileToOpen@12 ; @ 97
|
||||
SHGetRealIDL@12 ; @ 98
|
||||
SetAppStartingCursor@8 ; @ 99
|
||||
SHRestricted@4 ; @ 100
|
||||
SetAppStartingCursor ; @ 99
|
||||
SHRestricted ; @ 100
|
||||
SHCoCreateInstance@20 ; @ 102
|
||||
SignalFileOpen@4 ; @ 103
|
||||
FileMenu_DeleteAllItems@4 ; @ 104
|
||||
FileMenu_DrawItem@8 ; @ 105
|
||||
FileMenu_FindSubMenuByPidl@8 ; @ 106
|
||||
SignalFileOpen ; @ 103
|
||||
FileMenu_DeleteAllItems ; @ 104
|
||||
FileMenu_DrawItem ; @ 105
|
||||
FileMenu_FindSubMenuByPidl ; @ 106
|
||||
FileMenu_GetLastSelectedItemPidls@12 ; @ 107
|
||||
FileMenu_HandleMenuChar@8 ; @ 108
|
||||
FileMenu_InitMenuPopup@4 ; @ 109
|
||||
FileMenu_HandleMenuChar ; @ 108
|
||||
FileMenu_InitMenuPopup ; @ 109
|
||||
FileMenu_InsertUsingPidl@24 ; @ 110
|
||||
FileMenu_Invalidate@4 ; @ 111
|
||||
FileMenu_MeasureItem@8 ; @ 112
|
||||
FileMenu_Invalidate ; @ 111
|
||||
FileMenu_MeasureItem ; @ 112
|
||||
FileMenu_ReplaceUsingPidl@20 ; @ 113
|
||||
FileMenu_Create@20 ; @ 114
|
||||
FileMenu_AppendItem@24 ; @ 115
|
||||
FileMenu_TrackPopupMenuEx@24 ; @ 116
|
||||
FileMenu_DeleteItemByCmd@8 ; @ 117
|
||||
FileMenu_Destroy@4 ; @ 118
|
||||
IsLFNDrive@4 ; @ 119
|
||||
FileMenu_AbortInitMenu@0 ; @ 120
|
||||
SHFlushClipboard@0 ; @ 121
|
||||
RunDLL_CallEntry16@20 ; @ 122
|
||||
SHFreeUnusedLibraries@0 ; @ 123
|
||||
FileMenu_DeleteItemByCmd ; @ 117
|
||||
FileMenu_Destroy ; @ 118
|
||||
IsLFNDrive ; @ 119
|
||||
FileMenu_AbortInitMenu ; @ 120
|
||||
SHFlushClipboard ; @ 121
|
||||
;RunDLL_CallEntry16@20 ; @ 122
|
||||
SHFreeUnusedLibraries ; @ 123
|
||||
FileMenu_AppendFilesForPidl@12 ; @ 124
|
||||
FileMenu_AddFilesForPidl@28 ; @ 125
|
||||
SHOutOfMemoryMessageBox@12 ; @ 126
|
||||
SHWinHelp@16 ; @ 127
|
||||
DllGetClassObject@12 ; @ 128
|
||||
DAD_AutoScroll@0 ; @ 129
|
||||
DAD_DragEnter@0 ; @ 130
|
||||
DAD_DragEnterEx@0 ; @ 131
|
||||
DAD_DragLeave@0 ; @ 132
|
||||
DAD_AutoScroll ; @ 129
|
||||
DAD_DragEnter ; @ 130
|
||||
DAD_DragEnterEx ; @ 131
|
||||
DAD_DragLeave ; @ 132
|
||||
DragQueryFileW@16 ; @ 133
|
||||
DAD_DragMove@0 ; @ 134
|
||||
DragQueryPoint@8 ; @ 135
|
||||
DAD_SetDragImage@8 ; @ 136
|
||||
DAD_ShowDragImage@4 ; @ 137
|
||||
Desktop_UpdateBriefcaseOnEvent@0 ; @ 139
|
||||
FileMenu_DeleteItemByIndex@8 ; @ 140
|
||||
FileMenu_DeleteItemByFirstID@8 ; @ 141
|
||||
FileMenu_DeleteSeparator@4 ; @ 142
|
||||
DAD_DragMove ; @ 134
|
||||
DragQueryPoint ; @ 135
|
||||
DAD_SetDragImage ; @ 136
|
||||
DAD_ShowDragImage ; @ 137
|
||||
Desktop_UpdateBriefcaseOnEvent ; @ 139
|
||||
FileMenu_DeleteItemByIndex ; @ 140
|
||||
FileMenu_DeleteItemByFirstID ; @ 141
|
||||
FileMenu_DeleteSeparator ; @ 142
|
||||
FileMenu_EnableItemByCmd@12 ; @ 143
|
||||
FileMenu_GetItemExtent@8 ; @ 144
|
||||
PathFindOnPath@8 ; @ 145
|
||||
RLBuildListOfPaths@0 ; @ 146
|
||||
SHCLSIDFromString@8 ; @ 147
|
||||
FileMenu_GetItemExtent ; @ 144
|
||||
PathFindOnPathA ; @ 145
|
||||
RLBuildListOfPaths ; @ 146
|
||||
SHCLSIDFromString ; @ 147
|
||||
SHFind_InitMenuPopup@16 ; @ 149
|
||||
SHLoadOLE@4 ; @ 151
|
||||
ILGetSize@4 ; @ 152
|
||||
ILGetNext@4 ; @ 153
|
||||
SHLoadOLE ; @ 151
|
||||
ILGetSize ; @ 152
|
||||
ILGetNext ; @ 153
|
||||
ILAppend@12 ; @ 154
|
||||
ILFree@4 ; @ 155
|
||||
ILGlobalFree@4 ; @ 156
|
||||
ILCreateFromPath@4 ; @ 157
|
||||
PathGetExtension@4 ; @ 158
|
||||
PathIsDirectory@4 ; @ 159
|
||||
SHNetConnectionDialog@0 ; @ 160
|
||||
SHRunControlPanel@8 ; @ 161
|
||||
SHSimpleIDListFromPath@4 ; @ 162
|
||||
StrToOleStr@8 ; @ 163
|
||||
Win32DeleteFile@4 ; @ 164
|
||||
SHCreateDirectory@8 ; @ 165
|
||||
CallCPLEntry16@0 ; @ 166
|
||||
ILFree ; @ 155
|
||||
ILGlobalFree ; @ 156
|
||||
ILCreateFromPath ; @ 157
|
||||
PathGetExtensionA ; @ 158
|
||||
PathIsDirectoryA ; @ 159
|
||||
SHNetConnectionDialog ; @ 160
|
||||
SHRunControlPanel ; @ 161
|
||||
SHSimpleIDListFromPath ; @ 162
|
||||
StrToOleStr ; @ 163
|
||||
Win32DeleteFile ; @ 164
|
||||
SHCreateDirectory ; @ 165
|
||||
CallCPLEntry16@24 ; @ 166
|
||||
SHAddFromPropSheetExtArray@12 ; @ 167
|
||||
SHCreatePropSheetExtArray@12 ; @ 168
|
||||
SHDestroyPropSheetExtArray@4 ; @ 169
|
||||
SHDestroyPropSheetExtArray ; @ 169
|
||||
SHReplaceFromPropSheetExtArray@16 ; @ 170
|
||||
PathCleanupSpec@8 ; @ 171
|
||||
SHCreateLinks@0 ; @ 172
|
||||
PathCleanupSpecA ; @ 171
|
||||
SHCreateLinks ; @ 172
|
||||
SHValidateUNC@12 ; @ 173
|
||||
SHCreateShellFolderViewEx@8 ; @ 174
|
||||
SHCreateShellFolderViewEx ; @ 174
|
||||
SHGetSpecialFolderPath@16 ; @ 175
|
||||
SHSetInstanceExplorer@4 ; @ 176
|
||||
DAD_SetDragImageFromListView@0 ; @ 177
|
||||
SHObjectProperties@0 ; @ 178
|
||||
SHGetNewLinkInfoA@0 ; @ 179
|
||||
SHGetNewLinkInfoW@0 ; @ 180
|
||||
RegisterShellHook@8 ; @ 181
|
||||
SHSetInstanceExplorer ; @ 176
|
||||
DAD_SetDragImageFromListView ; @ 177
|
||||
SHObjectProperties ; @ 178
|
||||
SHGetNewLinkInfoA ; @ 179
|
||||
SHGetNewLinkInfoW ; @ 180
|
||||
RegisterShellHook ; @ 181
|
||||
ShellMessageBoxW ; @ 182
|
||||
ShellMessageBoxA ; @ 183
|
||||
ArrangeWindows@20 ; @ 184
|
||||
SHHandleDiskFull@0 ; @ 185
|
||||
SHFree@4 ; @ 195
|
||||
SHAlloc@4 ; @ 196
|
||||
SHGlobalDefect@0 ; @ 197
|
||||
SHAbortInvokeCommand@0 ; @ 198
|
||||
SHGetFileIcon@0 ; @ 199
|
||||
SHLocalAlloc@0 ; @ 200
|
||||
SHLocalFree@0 ; @ 201
|
||||
SHLocalReAlloc@0 ; @ 202
|
||||
AddCommasW@0 ; @ 203
|
||||
ShortSizeFormatW@0 ; @ 204
|
||||
Printer_LoadIconsW@0 ; @ 205
|
||||
Link_AddExtraDataSection@0 ; @ 206
|
||||
Link_ReadExtraDataSection@0 ; @ 207
|
||||
Link_RemoveExtraDataSection@0 ; @ 208
|
||||
Int64ToString@0 ; @ 209
|
||||
LargeIntegerToString@0 ; @ 210
|
||||
Printers_GetPidl@0 ; @ 211
|
||||
Printer_AddPrinterPropPages@0 ; @ 212
|
||||
Printers_RegisterWindowW@0 ; @ 213
|
||||
Printers_UnregisterWindow@0 ; @ 214
|
||||
SHHandleDiskFull ; @ 185
|
||||
SHFree ; @ 195
|
||||
SHAlloc ; @ 196
|
||||
SHGlobalDefect ; @ 197
|
||||
SHAbortInvokeCommand ; @ 198
|
||||
SHGetFileIcon ; @ 199
|
||||
SHLocalAlloc ; @ 200
|
||||
SHLocalFree ; @ 201
|
||||
SHLocalReAlloc ; @ 202
|
||||
AddCommasW ; @ 203
|
||||
ShortSizeFormatW ; @ 204
|
||||
Printer_LoadIconsW ; @ 205
|
||||
Link_AddExtraDataSection ; @ 206
|
||||
Link_ReadExtraDataSection ; @ 207
|
||||
Link_RemoveExtraDataSection ; @ 208
|
||||
Int64ToString ; @ 209
|
||||
LargeIntegerToString ; @ 210
|
||||
Printers_GetPidl ; @ 211
|
||||
Printer_AddPrinterPropPages ; @ 212
|
||||
Printers_RegisterWindowW ; @ 213
|
||||
Printers_UnregisterWindow ; @ 214
|
||||
SHStartNetConnectionDialog@12 ; @ 215
|
||||
shell32_243@8 ; @ 243
|
||||
SHInitRestricted@8 ; @ 244
|
||||
shell32_243 ; @ 243
|
||||
SHInitRestricted ; @ 244
|
||||
SHGetDataFromIDListA@20 ; @ 247
|
||||
SHGetDataFromIDListW@20 ; @ 248
|
||||
PathParseIconLocation@4 ; @ 249
|
||||
PathRemoveExtension@4 ; @ 250
|
||||
PathRemoveArgs@4 ; @ 251
|
||||
SheChangeDirA@0 ; @ 271
|
||||
SheChangeDirExA@0 ; @ 272
|
||||
SheChangeDirExW@0 ; @ 273
|
||||
SheChangeDirW@4 ; @ 274
|
||||
SheConvertPathW@0 ; @ 275
|
||||
SheFullPathA@0 ; @ 276
|
||||
SheFullPathW@0 ; @ 277
|
||||
SheGetCurDrive@0 ; @ 278
|
||||
SheGetDirA@8 ; @ 279
|
||||
PathParseIconLocationA ; @ 249
|
||||
PathRemoveExtensionA ; @ 250
|
||||
PathRemoveArgsA ; @ 251
|
||||
SheChangeDirA ; @ 271
|
||||
SheChangeDirExA ; @ 272
|
||||
SheChangeDirExW ; @ 273
|
||||
SheChangeDirW ; @ 274
|
||||
SheConvertPathW ; @ 275
|
||||
SheFullPathA ; @ 276
|
||||
SheFullPathW ; @ 277
|
||||
SheGetCurDrive ; @ 278
|
||||
SheGetDirA ; @ 279
|
||||
SheGetDirExW@12 ; @ 280
|
||||
SheGetDirW@8 ; @ 281
|
||||
SheGetPathOffsetW@0 ; @ 282
|
||||
SheRemoveQuotesA@0 ; @ 283
|
||||
SheRemoveQuotesW@0 ; @ 284
|
||||
SheSetCurDrive@0 ; @ 285
|
||||
SheShortenPathA@0 ; @ 286
|
||||
SheShortenPathW@0 ; @ 287
|
||||
ShellAboutA@16 ; @ 288
|
||||
ShellAboutW@16 ; @ 289
|
||||
ShellExecuteA=ShellExecuteA@24 ; @ 290
|
||||
ShellExecuteEx@4 ; @ 291
|
||||
ShellExecuteExA=ShellExecuteExA@4 ; @ 292
|
||||
ShellExecuteExW@4 ; @ 293
|
||||
SheGetDirW ; @ 281
|
||||
SheGetPathOffsetW ; @ 282
|
||||
SheRemoveQuotesA ; @ 283
|
||||
SheRemoveQuotesW ; @ 284
|
||||
SheSetCurDrive ; @ 285
|
||||
SheShortenPathA ; @ 286
|
||||
SheShortenPathW ; @ 287
|
||||
ShellAboutA ; @ 288
|
||||
ShellAboutW ; @ 289
|
||||
;ShellExecuteA=ShellExecuteA@24 ; @ 290
|
||||
;ShellExecuteEx ; @ 291
|
||||
ShellExecuteExA=ShellExecuteExA ; @ 292
|
||||
ShellExecuteExW ; @ 293
|
||||
ShellExecuteW@24 ; @ 294
|
||||
Shell_NotifyIcon@8 ; @ 296
|
||||
Shell_NotifyIconA@8 ; @ 297
|
||||
Shell_NotifyIconW@8 ; @ 298
|
||||
Shl1632_ThunkData32@0 ; @ 299
|
||||
Shl3216_ThunkData32@0 ; @ 300
|
||||
;Shell_NotifyIcon ; @ 296
|
||||
Shell_NotifyIconA ; @ 297
|
||||
Shell_NotifyIconW ; @ 298
|
||||
Shl1632_ThunkData32 ; @ 299
|
||||
Shl3216_ThunkData32 ; @ 300
|
||||
; StrChrA=shlwapi.StrChrA ; @ 301
|
||||
; StrChrIA=shlwapi.StrChrIA ; @ 302
|
||||
; StrChrIW=shlwapi.StrChrIW ; @ 303
|
||||
|
@ -247,56 +255,56 @@ StrNCpyA@12 ; @ 315
|
|||
; StrRChrIA=shlwapi.StrRChrIA ; @ 318
|
||||
; StrRChrIW=shlwapi.StrRChrIW ; @ 319
|
||||
; StrRChrW=shlwapi.StrRChrW ; @ 320
|
||||
StrRStrA@0 ; @ 321
|
||||
StrRStrA ; @ 321
|
||||
; StrRStrIA=shlwapi.StrRStrIA ; @ 322
|
||||
; StrRStrIW=shlwapi.StrRStrIW ; @ 323
|
||||
StrRStrW@0 ; @ 324
|
||||
StrRStrW ; @ 324
|
||||
; StrStrA=shlwapi.StrStrA ; @ 325
|
||||
; StrStrIA=shlwapi.StrStrIA ; @ 326
|
||||
; StrStrIW=shlwapi.StrStrIW ; @ 327
|
||||
; StrStrW=shlwapi.StrStrW ; @ 328
|
||||
SHRegCloseKey@4 ; @ 505
|
||||
SHRegCloseKey ; @ 505
|
||||
SHRegOpenKeyA@12 ; @ 506
|
||||
SHRegOpenKeyW@12 ; @ 507
|
||||
SHRegQueryValueA@16 ; @ 508
|
||||
SHRegQueryValueExA@24 ; @ 509
|
||||
SHRegQueryValueW@16 ; @ 510
|
||||
SHRegQueryValueExW@24 ; @ 511
|
||||
SHRegDeleteKeyW@8 ; @ 512
|
||||
SHRegDeleteKeyW ; @ 512
|
||||
SHAllocShared@12 ; @ 520
|
||||
SHLockShared@8 ; @ 521
|
||||
SHUnlockShared@4 ; @ 522
|
||||
SHFreeShared@8 ; @ 523
|
||||
RealDriveType@8 ; @ 524
|
||||
RealDriveTypeFlags@8 ; @ 525
|
||||
SHLockShared ; @ 521
|
||||
SHUnlockShared ; @ 522
|
||||
SHFreeShared ; @ 523
|
||||
RealDriveType ; @ 524
|
||||
RealDriveTypeFlags ; @ 525
|
||||
NTSHChangeNotifyRegister@24 ; @ 640
|
||||
NTSHChangeNotifyDeregister@4 ; @ 641
|
||||
NTSHChangeNotifyDeregister ; @ 641
|
||||
SHChangeNotifyReceive@16 ; @ 643
|
||||
SHChangeNotification_Lock@16 ; @ 644
|
||||
SHChangeNotification_Unlock@4 ; @ 645
|
||||
SHChangeRegistrationReceive@8 ; @ 646
|
||||
ReceiveAddToRecentDocs@8 ; @ 647
|
||||
SHWaitOp_Operate@8 ; @ 648
|
||||
PathIsSameRoot@8 ; @ 650
|
||||
ReadCabinetState@8 ; @ 651
|
||||
WriteCabinetState@4 ; @ 652
|
||||
SHChangeNotification_Unlock ; @ 645
|
||||
SHChangeRegistrationReceive ; @ 646
|
||||
ReceiveAddToRecentDocs ; @ 647
|
||||
SHWaitOp_Operate ; @ 648
|
||||
PathIsSameRootA ; @ 650
|
||||
ReadCabinetState ; @ 651
|
||||
WriteCabinetState ; @ 652
|
||||
PathProcessCommand@16 ; @ 653
|
||||
shell32_654@8 ; @ 654
|
||||
FileIconInit@4 ; @ 660
|
||||
IsUserAdmin@0 ; @ 680
|
||||
shell32_714@4 ; @ 714
|
||||
FOOBAR1217@0 ; @ 1217
|
||||
shell32_654 ; @ 654
|
||||
FileIconInit ; @ 660
|
||||
IsUserAdmin ; @ 680
|
||||
shell32_714 ; @ 714
|
||||
FOOBAR1217 ; @ 1217
|
||||
CheckEscapesA@0
|
||||
CheckEscapesW@0
|
||||
CommandLineToArgvW@8
|
||||
Control_FillCache_RunDLL@16
|
||||
Control_FillCache_RunDLLA@0
|
||||
Control_FillCache_RunDLLW@0
|
||||
Control_RunDLL@16
|
||||
Control_RunDLLA@16
|
||||
Control_RunDLLW@16
|
||||
;Control_FillCache_RunDLL@16
|
||||
Control_FillCache_RunDLLA@16
|
||||
Control_FillCache_RunDLLW@16
|
||||
;Control_RunDLL@16
|
||||
Control_RunDLLA
|
||||
Control_RunDLLW
|
||||
DllInstall@8
|
||||
DoEnvironmentSubstA@8
|
||||
;DoEnvironmentSubstA@8
|
||||
DoEnvironmentSubstW@8
|
||||
DragQueryFileAorW@0
|
||||
DuplicateIcon@8
|
||||
|
@ -305,7 +313,7 @@ ExtractAssociatedIconExA@0
|
|||
ExtractAssociatedIconExW@0
|
||||
ExtractAssociatedIconW@12
|
||||
ExtractIconA=ExtractIconA@12
|
||||
ExtractIconEx@20
|
||||
;ExtractIconEx@20
|
||||
ExtractIconExA@20
|
||||
ExtractIconExW@20
|
||||
ExtractIconW@12
|
||||
|
@ -338,18 +346,18 @@ SHChangeNotify@16
|
|||
ShellHookProc@0
|
||||
SHEmptyRecycleBinA@12
|
||||
SHEmptyRecycleBinW@12
|
||||
SHFileOperation@4
|
||||
;SHFileOperation@4
|
||||
SHFileOperationA@4
|
||||
SHFileOperationW@4
|
||||
SHFormatDrive@16
|
||||
SHFreeNameMappings@4
|
||||
SHGetDesktopFolder@4
|
||||
SHGetFileInfo@20
|
||||
;SHGetFileInfo@20
|
||||
SHGetFileInfoA@20
|
||||
SHGetFileInfoW@20
|
||||
SHGetInstanceExplorer@4
|
||||
SHGetMalloc=SHGetMalloc@4
|
||||
SHGetNewLinkInfo@20
|
||||
;SHGetNewLinkInfo@20
|
||||
SHGetPathFromIDList=SHGetPathFromIDList@8
|
||||
SHGetPathFromIDListA=SHGetPathFromIDListA@8
|
||||
SHGetPathFromIDListW=SHGetPathFromIDListW@8
|
||||
|
|
381
reactos/lib/shell32/shell32.edf
Normal file
381
reactos/lib/shell32/shell32.edf
Normal file
|
@ -0,0 +1,381 @@
|
|||
; $Id: shell32.edf
|
||||
;
|
||||
; shell32.edf
|
||||
;
|
||||
; ReactOS Operating System
|
||||
;
|
||||
;
|
||||
;LIBRARY shell32
|
||||
LIBRARY roshel32.dll
|
||||
EXPORTS
|
||||
SHChangeNotifyRegister@24 ; @ 2
|
||||
SHChangeNotifyDeregister@4 ; @ 4
|
||||
SHChangeNotifyUpdateEntryList@16 ; @ 5
|
||||
PifMgr_OpenProperties@16 ; @ 9
|
||||
PifMgr_GetProperties@20 ; @ 10
|
||||
PifMgr_SetProperties@20 ; @ 11
|
||||
PifMgr_CloseProperties@8 ; @ 13
|
||||
ILGetDisplayName@8 ; @ 15
|
||||
ILFindLastID@4 ; @ 16
|
||||
ILRemoveLastID@4 ; @ 17
|
||||
ILClone@4 ; @ 18
|
||||
ILCloneFirst@4 ; @ 19
|
||||
ILGlobalClone@4 ; @ 20
|
||||
ILIsEqual@8 ; @ 21
|
||||
ILIsParent@12 ; @ 23
|
||||
ILFindChild@8 ; @ 24
|
||||
ILCombine@8 ; @ 25
|
||||
ILLoadFromStream@8 ; @ 26
|
||||
ILSaveToStream@8 ; @ 27
|
||||
SHILCreateFromPath@12 ; @ 28
|
||||
PathIsRootA=PathIsRootA@4 ; @ 29
|
||||
PathBuildRootA=PathBuildRootA@8 ; @ 30
|
||||
PathFindExtensionA=PathFindExtensionA@4 ; @ 31
|
||||
PathAddBackslashA=PathAddBackslashA@4 ; @ 32
|
||||
PathRemoveBlanksA=PathRemoveBlanksA@4 ; @ 33
|
||||
PathFindFileNameA=PathFindFileNameA@4 ; @ 34
|
||||
PathRemoveFileSpecA=PathRemoveFileSpecA@4 ; @ 35
|
||||
PathAppendA=PathAppendA@8 ; @ 36
|
||||
PathCombineA=PathCombineA@12 ; @ 37
|
||||
PathStripPathA=PathStripPathA@4 ; @ 38
|
||||
PathIsUNCA=PathIsUNCA@4 ; @ 39
|
||||
PathIsRelativeA=PathIsRelativeA@4 ; @ 40
|
||||
PathIsExeA=PathIsExeA@4 ; @ 43
|
||||
PathFileExistsA=PathFileExistsA@4 ; @ 45
|
||||
PathMatchSpecA=PathMatchSpecA@8 ; @ 46
|
||||
PathMakeUniqueNameA=PathMakeUniqueNameA@20 ; @ 47
|
||||
PathSetDlgItemPathA=PathSetDlgItemPathA@12 ; @ 48
|
||||
PathQualifyA=PathQualifyA@4 ; @ 49
|
||||
PathStripToRootA=PathStripToRootA@4 ; @ 50
|
||||
PathResolveA=PathResolveA@12 ; @ 51
|
||||
PathGetArgsA=PathGetArgsA@4 ; @ 52
|
||||
DoEnvironmentSubst@8 ; @ 53
|
||||
DragAcceptFiles@8 ; @ 54
|
||||
PathQuoteSpacesA=PathQuoteSpacesA@4 ; @ 55
|
||||
PathUnquoteSpacesA=PathUnquoteSpacesA@4 ; @ 56
|
||||
PathGetDriveNumberA=PathGetDriveNumberA@4 ; @ 57
|
||||
ParseField@16 ; @ 58
|
||||
RestartDialog@12 ; @ 59
|
||||
ExitWindowsDialog@4 ; @ 60
|
||||
RunFileDlg@24 ; @ 61
|
||||
PickIconDlg@16 ; @ 62
|
||||
GetFileNameFromBrowse@28 ; @ 63
|
||||
DriveType@4 ; @ 64
|
||||
InvalidateDriveType@0 ; @ 65
|
||||
IsNetDrive@4 ; @ 66
|
||||
Shell_MergeMenus@24 ; @ 67
|
||||
SHGetSetSettings@12 ; @ 68
|
||||
SHGetNetResource@0 ; @ 69
|
||||
SHCreateDefClassObject@20 ; @ 70
|
||||
Shell_GetImageList@8 ; @ 71
|
||||
Shell_GetCachedImageIndex@12 ; @ 72
|
||||
SHShellFolderView_Message@12 ; @ 73
|
||||
SHCreateStdEnumFmtEtc@0 ; @ 74
|
||||
PathYetAnotherMakeUniqueName@16 ; @ 75
|
||||
DragQueryInfo@0 ; @ 76
|
||||
SHMapPIDLToSystemImageListIndex@12 ; @ 77
|
||||
OleStrToStrN@16 ; @ 78
|
||||
StrToOleStrN@16 ; @ 79
|
||||
DragFinish@4 ; @ 80
|
||||
;DragQueryFile@16 ; @ 81
|
||||
DragQueryFileA@16 ; @ 82
|
||||
CIDLData_CreateFromIDArray@0 ; @ 83
|
||||
SHIsBadInterfacePtr@0 ; @ 84
|
||||
; OpenRegStream=shlwapi.SHOpenRegStreamA ; @ 85
|
||||
SHRegisterDragDrop@8 ; @ 86
|
||||
SHRevokeDragDrop@4 ; @ 87
|
||||
SHDoDragDrop@20 ; @ 88
|
||||
SHCloneSpecialIDList@12 ; @ 89
|
||||
SHFindFiles@0 ; @ 90
|
||||
SHFindComputer@0 ; @ 91
|
||||
PathGetShortPath@4 ; @ 92
|
||||
Win32CreateDirectory@0 ; @ 93
|
||||
Win32RemoveDirectory@0 ; @ 94
|
||||
SHLogILFromFSIL@4 ; @ 95
|
||||
StrRetToStrN@16 ; @ 96
|
||||
SHWaitForFileToOpen@12 ; @ 97
|
||||
SHGetRealIDL@12 ; @ 98
|
||||
SetAppStartingCursor@8 ; @ 99
|
||||
SHRestricted@4 ; @ 100
|
||||
SHCoCreateInstance@20 ; @ 102
|
||||
SignalFileOpen@4 ; @ 103
|
||||
FileMenu_DeleteAllItems@4 ; @ 104
|
||||
FileMenu_DrawItem@8 ; @ 105
|
||||
FileMenu_FindSubMenuByPidl@8 ; @ 106
|
||||
FileMenu_GetLastSelectedItemPidls@12 ; @ 107
|
||||
FileMenu_HandleMenuChar@8 ; @ 108
|
||||
FileMenu_InitMenuPopup@4 ; @ 109
|
||||
FileMenu_InsertUsingPidl@24 ; @ 110
|
||||
FileMenu_Invalidate@4 ; @ 111
|
||||
FileMenu_MeasureItem@8 ; @ 112
|
||||
FileMenu_ReplaceUsingPidl@20 ; @ 113
|
||||
FileMenu_Create@20 ; @ 114
|
||||
FileMenu_AppendItem@24 ; @ 115
|
||||
FileMenu_TrackPopupMenuEx@24 ; @ 116
|
||||
FileMenu_DeleteItemByCmd@8 ; @ 117
|
||||
FileMenu_Destroy@4 ; @ 118
|
||||
IsLFNDrive@4 ; @ 119
|
||||
FileMenu_AbortInitMenu@0 ; @ 120
|
||||
SHFlushClipboard@0 ; @ 121
|
||||
;RunDLL_CallEntry16@20 ; @ 122
|
||||
SHFreeUnusedLibraries@0 ; @ 123
|
||||
FileMenu_AppendFilesForPidl@12 ; @ 124
|
||||
FileMenu_AddFilesForPidl@28 ; @ 125
|
||||
SHOutOfMemoryMessageBox@12 ; @ 126
|
||||
SHWinHelp@16 ; @ 127
|
||||
DllGetClassObject@12 ; @ 128
|
||||
DAD_AutoScroll@0 ; @ 129
|
||||
DAD_DragEnter@0 ; @ 130
|
||||
DAD_DragEnterEx@0 ; @ 131
|
||||
DAD_DragLeave@0 ; @ 132
|
||||
DragQueryFileW@16 ; @ 133
|
||||
DAD_DragMove@0 ; @ 134
|
||||
DragQueryPoint@8 ; @ 135
|
||||
DAD_SetDragImage@8 ; @ 136
|
||||
DAD_ShowDragImage@4 ; @ 137
|
||||
Desktop_UpdateBriefcaseOnEvent@0 ; @ 139
|
||||
FileMenu_DeleteItemByIndex@8 ; @ 140
|
||||
FileMenu_DeleteItemByFirstID@8 ; @ 141
|
||||
FileMenu_DeleteSeparator@4 ; @ 142
|
||||
FileMenu_EnableItemByCmd@12 ; @ 143
|
||||
FileMenu_GetItemExtent@8 ; @ 144
|
||||
PathFindOnPathA=PathFindOnPathA@8 ; @ 145
|
||||
RLBuildListOfPaths@0 ; @ 146
|
||||
SHCLSIDFromString@8 ; @ 147
|
||||
SHFind_InitMenuPopup@16 ; @ 149
|
||||
SHLoadOLE@4 ; @ 151
|
||||
ILGetSize@4 ; @ 152
|
||||
ILGetNext@4 ; @ 153
|
||||
ILAppend@12 ; @ 154
|
||||
ILFree@4 ; @ 155
|
||||
ILGlobalFree@4 ; @ 156
|
||||
ILCreateFromPath@4 ; @ 157
|
||||
PathGetExtensionA=PathGetExtensionA@4 ; @ 158
|
||||
PathIsDirectoryA=PathIsDirectoryA@4 ; @ 159
|
||||
SHNetConnectionDialog@0 ; @ 160
|
||||
SHRunControlPanel@8 ; @ 161
|
||||
SHSimpleIDListFromPath@4 ; @ 162
|
||||
StrToOleStr@8 ; @ 163
|
||||
Win32DeleteFile@4 ; @ 164
|
||||
SHCreateDirectory@8 ; @ 165
|
||||
CallCPLEntry16=CallCPLEntry16@24 ; @ 166
|
||||
SHAddFromPropSheetExtArray@12 ; @ 167
|
||||
SHCreatePropSheetExtArray@12 ; @ 168
|
||||
SHDestroyPropSheetExtArray@4 ; @ 169
|
||||
SHReplaceFromPropSheetExtArray@16 ; @ 170
|
||||
PathCleanupSpecA=PathCleanupSpecA@8 ; @ 171
|
||||
SHCreateLinks@0 ; @ 172
|
||||
SHValidateUNC@12 ; @ 173
|
||||
SHCreateShellFolderViewEx@8 ; @ 174
|
||||
SHGetSpecialFolderPath@16 ; @ 175
|
||||
SHSetInstanceExplorer@4 ; @ 176
|
||||
DAD_SetDragImageFromListView@0 ; @ 177
|
||||
SHObjectProperties@0 ; @ 178
|
||||
SHGetNewLinkInfoA@0 ; @ 179
|
||||
SHGetNewLinkInfoW@0 ; @ 180
|
||||
RegisterShellHook@8 ; @ 181
|
||||
ShellMessageBoxW ; @ 182
|
||||
ShellMessageBoxA ; @ 183
|
||||
ArrangeWindows@20 ; @ 184
|
||||
SHHandleDiskFull@0 ; @ 185
|
||||
SHFree@4 ; @ 195
|
||||
SHAlloc@4 ; @ 196
|
||||
SHGlobalDefect@0 ; @ 197
|
||||
SHAbortInvokeCommand@0 ; @ 198
|
||||
SHGetFileIcon@0 ; @ 199
|
||||
SHLocalAlloc@0 ; @ 200
|
||||
SHLocalFree@0 ; @ 201
|
||||
SHLocalReAlloc@0 ; @ 202
|
||||
AddCommasW@0 ; @ 203
|
||||
ShortSizeFormatW@0 ; @ 204
|
||||
Printer_LoadIconsW@0 ; @ 205
|
||||
Link_AddExtraDataSection@0 ; @ 206
|
||||
Link_ReadExtraDataSection@0 ; @ 207
|
||||
Link_RemoveExtraDataSection@0 ; @ 208
|
||||
Int64ToString@0 ; @ 209
|
||||
LargeIntegerToString@0 ; @ 210
|
||||
Printers_GetPidl@0 ; @ 211
|
||||
Printer_AddPrinterPropPages@0 ; @ 212
|
||||
Printers_RegisterWindowW@0 ; @ 213
|
||||
Printers_UnregisterWindow@0 ; @ 214
|
||||
SHStartNetConnectionDialog@12 ; @ 215
|
||||
shell32_243@8 ; @ 243
|
||||
SHInitRestricted@8 ; @ 244
|
||||
SHGetDataFromIDListA@20 ; @ 247
|
||||
SHGetDataFromIDListW@20 ; @ 248
|
||||
PathParseIconLocationA=PathParseIconLocationA@4 ; @ 249
|
||||
PathRemoveExtensionA=PathRemoveExtensionA@4 ; @ 250
|
||||
PathRemoveArgsA=PathRemoveArgsA@4 ; @ 251
|
||||
SheChangeDirA@0 ; @ 271
|
||||
SheChangeDirExA@0 ; @ 272
|
||||
SheChangeDirExW@0 ; @ 273
|
||||
SheChangeDirW@4 ; @ 274
|
||||
SheConvertPathW@0 ; @ 275
|
||||
SheFullPathA@0 ; @ 276
|
||||
SheFullPathW@0 ; @ 277
|
||||
SheGetCurDrive@0 ; @ 278
|
||||
SheGetDirA@8 ; @ 279
|
||||
SheGetDirExW@12 ; @ 280
|
||||
SheGetDirW@8 ; @ 281
|
||||
SheGetPathOffsetW@0 ; @ 282
|
||||
SheRemoveQuotesA@0 ; @ 283
|
||||
SheRemoveQuotesW@0 ; @ 284
|
||||
SheSetCurDrive@0 ; @ 285
|
||||
SheShortenPathA@0 ; @ 286
|
||||
SheShortenPathW@0 ; @ 287
|
||||
ShellAboutA=ShellAboutA@16 ; @ 288
|
||||
ShellAboutW=ShellAboutW@16 ; @ 289
|
||||
;ShellExecuteA=ShellExecuteA@24 ; @ 290
|
||||
;ShellExecuteEx@4 ; @ 291
|
||||
ShellExecuteExA=ShellExecuteExA@4 ; @ 292
|
||||
ShellExecuteExW@4 ; @ 293
|
||||
ShellExecuteW@24 ; @ 294
|
||||
;Shell_NotifyIcon@8 ; @ 296
|
||||
Shell_NotifyIconA@8 ; @ 297
|
||||
Shell_NotifyIconW@8 ; @ 298
|
||||
Shl1632_ThunkData32@0 ; @ 299
|
||||
Shl3216_ThunkData32@0 ; @ 300
|
||||
; StrChrA=shlwapi.StrChrA ; @ 301
|
||||
; StrChrIA=shlwapi.StrChrIA ; @ 302
|
||||
; StrChrIW=shlwapi.StrChrIW ; @ 303
|
||||
; StrChrW=shlwapi.StrChrW ; @ 304
|
||||
; StrCmpNA=shlwapi.StrCmpNA ; @ 305
|
||||
; StrCmpNIA=shlwapi.StrCmpNIA ; @ 306
|
||||
; StrCmpNIW=shlwapi.StrCmpNIW ; @ 307
|
||||
; StrCmpNW=shlwapi.StrCmpNW ; @ 308
|
||||
StrCpyNA=StrCpyNA@12 ; @ 309
|
||||
; StrCpyNW=shlwapi.StrCpyNW ; @ 310
|
||||
; StrNCmpA=shlwapi.StrCmpNA ; @ 311
|
||||
; StrNCmpIA=shlwapi.StrCmpNIA ; @ 312
|
||||
; StrNCmpIW=shlwapi.StrCmpNIW ; @ 313
|
||||
; StrNCmpW=shlwapi.StrCmpNW ; @ 314
|
||||
StrNCpyA@12 ; @ 315
|
||||
; StrNCpyW=shlwapi.StrNCpyW ; @ 316
|
||||
; StrRChrA=shlwapi.StrRChrA ; @ 317
|
||||
; StrRChrIA=shlwapi.StrRChrIA ; @ 318
|
||||
; StrRChrIW=shlwapi.StrRChrIW ; @ 319
|
||||
; StrRChrW=shlwapi.StrRChrW ; @ 320
|
||||
StrRStrA@0 ; @ 321
|
||||
; StrRStrIA=shlwapi.StrRStrIA ; @ 322
|
||||
; StrRStrIW=shlwapi.StrRStrIW ; @ 323
|
||||
StrRStrW@0 ; @ 324
|
||||
; StrStrA=shlwapi.StrStrA ; @ 325
|
||||
; StrStrIA=shlwapi.StrStrIA ; @ 326
|
||||
; StrStrIW=shlwapi.StrStrIW ; @ 327
|
||||
; StrStrW=shlwapi.StrStrW ; @ 328
|
||||
SHRegCloseKey@4 ; @ 505
|
||||
SHRegOpenKeyA@12 ; @ 506
|
||||
SHRegOpenKeyW@12 ; @ 507
|
||||
SHRegQueryValueA@16 ; @ 508
|
||||
SHRegQueryValueExA@24 ; @ 509
|
||||
SHRegQueryValueW@16 ; @ 510
|
||||
SHRegQueryValueExW@24 ; @ 511
|
||||
SHRegDeleteKeyW@8 ; @ 512
|
||||
SHAllocShared@12 ; @ 520
|
||||
SHLockShared@8 ; @ 521
|
||||
SHUnlockShared@4 ; @ 522
|
||||
SHFreeShared@8 ; @ 523
|
||||
RealDriveType@8 ; @ 524
|
||||
RealDriveTypeFlags@8 ; @ 525
|
||||
NTSHChangeNotifyRegister@24 ; @ 640
|
||||
NTSHChangeNotifyDeregister@4 ; @ 641
|
||||
SHChangeNotifyReceive@16 ; @ 643
|
||||
SHChangeNotification_Lock@16 ; @ 644
|
||||
SHChangeNotification_Unlock@4 ; @ 645
|
||||
SHChangeRegistrationReceive@8 ; @ 646
|
||||
ReceiveAddToRecentDocs@8 ; @ 647
|
||||
SHWaitOp_Operate@8 ; @ 648
|
||||
PathIsSameRootA=PathIsSameRootA@8 ; @ 650
|
||||
ReadCabinetState@8 ; @ 651
|
||||
WriteCabinetState@4 ; @ 652
|
||||
PathProcessCommand@16 ; @ 653
|
||||
shell32_654@8 ; @ 654
|
||||
FileIconInit@4 ; @ 660
|
||||
IsUserAdmin@0 ; @ 680
|
||||
shell32_714@4 ; @ 714
|
||||
FOOBAR1217@0 ; @ 1217
|
||||
CheckEscapesA@0
|
||||
CheckEscapesW@0
|
||||
CommandLineToArgvW@8
|
||||
;Control_FillCache_RunDLL=Control_FillCache_RunDLL@16
|
||||
Control_FillCache_RunDLLA=Control_FillCache_RunDLLA@16
|
||||
Control_FillCache_RunDLLW=Control_FillCache_RunDLLW@16
|
||||
;Control_RunDLL=Control_RunDLL@16
|
||||
Control_RunDLLA=Control_RunDLLA@16
|
||||
Control_RunDLLW=Control_RunDLLW@16
|
||||
DllInstall=DllInstall@8
|
||||
;DoEnvironmentSubstA=DoEnvironmentSubstA@8
|
||||
DoEnvironmentSubstW=DoEnvironmentSubstW@8
|
||||
DragQueryFileAorW@0
|
||||
DuplicateIcon@8
|
||||
ExtractAssociatedIconA@12
|
||||
ExtractAssociatedIconExA@0
|
||||
ExtractAssociatedIconExW@0
|
||||
ExtractAssociatedIconW@12
|
||||
ExtractIconA=ExtractIconA@12
|
||||
;ExtractIconEx@20
|
||||
ExtractIconExA@20
|
||||
ExtractIconExW@20
|
||||
ExtractIconW@12
|
||||
ExtractIconResInfoA@0
|
||||
ExtractIconResInfoW@0
|
||||
ExtractVersionResource16W@0
|
||||
FindExeDlgProc@0
|
||||
FindExecutableA@12
|
||||
FindExecutableW@12
|
||||
FreeIconList@4
|
||||
InternalExtractIconListA@0
|
||||
InternalExtractIconListW@0
|
||||
OpenAs_RunDLL@0
|
||||
OpenAs_RunDLLA@0
|
||||
OpenAs_RunDLLW@0
|
||||
PrintersGetCommand_RunDLL@0
|
||||
PrintersGetCommand_RunDLLA@0
|
||||
PrintersGetCommand_RunDLLW@0
|
||||
RealShellExecuteA@0
|
||||
RealShellExecuteExA@0
|
||||
RealShellExecuteExW@0
|
||||
RealShellExecuteW@0
|
||||
RegenerateUserEnvironment@0
|
||||
SHAddToRecentDocs@8
|
||||
SHAppBarMessage@8
|
||||
SHBrowseForFolder@4
|
||||
SHBrowseForFolderA@4
|
||||
SHBrowseForFolderW@4
|
||||
SHChangeNotify@16
|
||||
ShellHookProc@0
|
||||
SHEmptyRecycleBinA@12
|
||||
SHEmptyRecycleBinW@12
|
||||
;SHFileOperation@4
|
||||
SHFileOperationA@4
|
||||
SHFileOperationW@4
|
||||
SHFormatDrive@16
|
||||
SHFreeNameMappings@4
|
||||
SHGetDesktopFolder@4
|
||||
;SHGetFileInfo@20
|
||||
SHGetFileInfoA@20
|
||||
SHGetFileInfoW@20
|
||||
SHGetInstanceExplorer@4
|
||||
SHGetMalloc=SHGetMalloc@4
|
||||
;SHGetNewLinkInfo@20
|
||||
SHGetPathFromIDList=SHGetPathFromIDList@8
|
||||
SHGetPathFromIDListA=SHGetPathFromIDListA@8
|
||||
SHGetPathFromIDListW=SHGetPathFromIDListW@8
|
||||
SHGetSettings@8
|
||||
SHGetSpecialFolderLocation=SHGetSpecialFolderLocation@12
|
||||
SHHelpShortcuts_RunDLL@16
|
||||
SHHelpShortcuts_RunDLLA@16
|
||||
SHHelpShortcuts_RunDLLW@16
|
||||
SHLoadInProc@4
|
||||
SHQueryRecycleBinA@8
|
||||
SHQueryRecycleBinW@8
|
||||
SHUpdateRecycleBinIcon@0
|
||||
WOWShellExecute@28
|
||||
DllCanUnloadNow@0
|
||||
DllGetVersion@4
|
||||
SHGetFreeDiskSpace@0
|
||||
SHGetSpecialFolderPathA@16
|
||||
SHGetFolderPathA@20
|
||||
SHGetFolderPathW@20
|
||||
SHGetFolderLocation@20
|
||||
|
104
reactos/lib/shell32/shell32.h
Normal file
104
reactos/lib/shell32/shell32.h
Normal file
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* ReactOS shell32 -
|
||||
*
|
||||
* shell32.h
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __SHELL32_H__
|
||||
#define __SHELL32_H__
|
||||
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define inline
|
||||
#pragma warning (disable:4273) // : inconsistent dll linkage. dllexport assumed.
|
||||
#pragma warning (disable:4018) // : signed/unsigned mismatch
|
||||
#pragma warning (disable:4141) // : 'dllexport' : used more than once
|
||||
|
||||
#undef WINAPI
|
||||
#define WINAPI __declspec(dllexport)
|
||||
#define STDCALL __stdcall
|
||||
#define WINBOOL BOOL
|
||||
|
||||
#else
|
||||
|
||||
//#define WINAPI STDCALL
|
||||
|
||||
typedef struct _SHQUERYRBINFO {
|
||||
DWORD cbSize;
|
||||
__int64 i64Size;
|
||||
__int64 i64NumItems;
|
||||
} SHQUERYRBINFO, *LPSHQUERYRBINFO;
|
||||
|
||||
#define DWORD_PTR DWORD*
|
||||
|
||||
/*
|
||||
#define STDAPI long __stdcall
|
||||
|
||||
typedef struct _SHELLEXECUTEINFO{
|
||||
DWORD cbSize;
|
||||
ULONG fMask;
|
||||
HWND hwnd;
|
||||
LPCTSTR lpVerb;
|
||||
LPCTSTR lpFile;
|
||||
LPCTSTR lpParameters;
|
||||
LPCTSTR lpDirectory;
|
||||
int nShow;
|
||||
HINSTANCE hInstApp;
|
||||
|
||||
// Optional members
|
||||
LPVOID lpIDList;
|
||||
LPCSTR lpClass;
|
||||
HKEY hkeyClass;
|
||||
DWORD dwHotKey;
|
||||
union {
|
||||
HANDLE hIcon;
|
||||
HANDLE hMonitor;
|
||||
};
|
||||
HANDLE hProcess;
|
||||
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
|
||||
|
||||
typedef struct _NOTIFYICONDATA {
|
||||
DWORD cbSize;
|
||||
HWND hWnd;
|
||||
UINT uID;
|
||||
UINT uFlags;
|
||||
UINT uCallbackMessage;
|
||||
HICON hIcon;
|
||||
TCHAR szTip[64];
|
||||
DWORD dwState; //Version 5.0
|
||||
DWORD dwStateMask; //Version 5.0
|
||||
TCHAR szInfo[256]; //Version 5.0
|
||||
union {
|
||||
UINT uTimeout; //Version 5.0
|
||||
UINT uVersion; //Version 5.0
|
||||
} DUMMYUNIONNAME;
|
||||
TCHAR szInfoTitle[64]; //Version 5.0
|
||||
DWORD dwInfoFlags; //Version 5.0
|
||||
} NOTIFYICONDATA, *PNOTIFYICONDATA;
|
||||
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __SHELL32_H__ */
|
Loading…
Reference in a new issue