You forgot to do the right HKEY <--> HKEY16 conversions with HKEY_16() and HKEY_32(), examples how to do it should be in the code.
bye michael On Sat, Oct 12, 2002 at 05:20:31PM -0000, György 'Nog' Jeney wrote: > Is it possible to move all of the resources in the shell32 directory to a > sub directory inside shell32 like resources (just like gdi)? Its quite > confusing the way it is now. > > Changelog: > * dlls/shell32/shell32_main.h > * dlls/shell32/shell.c > * dlls/shell32/shellreg.c > * dlls/shell32/Makefile.in > * dlls/shell32/shlexec.c > Seperate out 16-bit funvtions into seperate file. > > nog. > > Index: dlls/shell32/shell.c > =================================================================== > RCS file: /home/wine/wine/dlls/shell32/shell.c,v > retrieving revision 1.46 > diff -u -r1.46 shell.c > --- dlls/shell32/shell.c 10 Oct 2002 21:22:11 -0000 1.46 > +++ dlls/shell32/shell.c 12 Oct 2002 17:07:39 -0000 > @@ -2,6 +2,7 @@ > * Shell Library Functions > * > * Copyright 1998 Marcus Meissner > + * Copyright 2000 Juergen Schmied > * Copyright 2002 Eric Pouech > * > * This library is free software; you can redistribute it and/or > @@ -526,4 +527,115 @@ > break; > } > return ret; > +} > + > + > +/* 0 and 1 are valid rootkeys in win16 shell.dll and are used by > + * some programs. Do not remove those cases. -MM > + */ > +static inline void fix_win16_hkey( HKEY *hkey ) > +{ > + if (*hkey == 0 || *hkey == (HKEY)1) *hkey = HKEY_CLASSES_ROOT; > +} > + > +/****************************************************************************** > + * RegOpenKey [SHELL.1] > + */ > +DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, PHKEY retkey ) > +{ > + fix_win16_hkey( &hkey ); > + return RegOpenKeyA( hkey, name, retkey ); > +} > + > +/****************************************************************************** > + * RegCreateKey [SHELL.2] > + */ > +DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, PHKEY retkey ) > +{ > + fix_win16_hkey( &hkey ); > + return RegCreateKeyA( hkey, name, retkey ); > +} > + > +/****************************************************************************** > + * RegCloseKey [SHELL.3] > + */ > +DWORD WINAPI RegCloseKey16( HKEY hkey ) > +{ > + fix_win16_hkey( &hkey ); > + return RegCloseKey( hkey ); > +} > + > +/****************************************************************************** > + * RegDeleteKey [SHELL.4] > + */ > +DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name ) > +{ > + fix_win16_hkey( &hkey ); > + return RegDeleteKeyA( hkey, name ); > +} > + > +/****************************************************************************** > + * RegSetValue [SHELL.5] > + */ > +DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD >count ) > +{ > + fix_win16_hkey( &hkey ); > + return RegSetValueA( hkey, name, type, data, count ); > +} > + > +/****************************************************************************** > + * RegQueryValue [SHELL.6] > + * > + * NOTES > + * Is this HACK still applicable? > + * > + * HACK > + * The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just > + * mask out the high 16 bit. This (not so much incidently) hopefully fixes > + * Aldus FH4) > + */ > +DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count > +) > +{ > + fix_win16_hkey( &hkey ); > + if (count) *count &= 0xffff; > + return RegQueryValueA( hkey, name, data, count ); > +} > + > +/****************************************************************************** > + * RegEnumKey [SHELL.7] > + */ > +DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len ) > +{ > + fix_win16_hkey( &hkey ); > + return RegEnumKeyA( hkey, index, name, name_len ); > +} > + > + > +/************************************************************************* > + * ShellExecute [SHELL.20] > + */ > +HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation, > + LPCSTR lpFile, LPCSTR lpParameters, > + LPCSTR lpDirectory, INT16 iShowCmd ) > +{ > + SHELLEXECUTEINFOA sei; > + HANDLE hProcess = 0; > + > + sei.cbSize = sizeof(sei); > + sei.fMask = 0; > + sei.hwnd = HWND_32(hWnd); > + sei.lpVerb = lpOperation; > + sei.lpFile = lpFile; > + sei.lpParameters = lpParameters; > + sei.lpDirectory = lpDirectory; > + sei.nShow = iShowCmd; > + sei.lpIDList = 0; > + sei.lpClass = 0; > + sei.hkeyClass = 0; > + sei.dwHotKey = 0; > + sei.hProcess = hProcess; > + > + ShellExecuteExA32 (&sei, FALSE); > + return (HINSTANCE16)sei.hInstApp; > } > Index: dlls/shell32/Makefile.in > =================================================================== > RCS file: /home/wine/wine/dlls/shell32/Makefile.in,v > retrieving revision 1.53 > diff -u -r1.53 Makefile.in > --- dlls/shell32/Makefile.in 27 Aug 2002 01:34:34 -0000 1.53 > +++ dlls/shell32/Makefile.in 12 Oct 2002 17:07:42 -0000 > @@ -27,7 +27,6 @@ > iconcache.c \ > memorystream.c \ > pidl.c \ > - shell.c \ > shell32_main.c \ > shelllink.c \ > shellole.c \ > @@ -50,6 +49,7 @@ > > RC_SRCS= shres.rc > RC_SRCS16 = version16.rc > +C_SRCS16 = shell.c > > SUBDIRS = tests > > Index: dlls/shell32/shell32_main.h > =================================================================== > RCS file: /home/wine/wine/dlls/shell32/shell32_main.h,v > retrieving revision 1.53 > diff -u -r1.53 shell32_main.h > --- dlls/shell32/shell32_main.h 10 Oct 2002 21:22:11 -0000 1.53 > +++ dlls/shell32/shell32_main.h 12 Oct 2002 17:07:48 -0000 > @@ -202,4 +202,7 @@ > #define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16)) > #define HWND_32(h16) ((HWND)(ULONG_PTR)(h16)) > > +/* needed by 16-bit shell code in shell.c */ > +BOOL WINAPI ShellExecuteExA32 (LPSHELLEXECUTEINFOA sei, BOOL is32); > + > #endif > Index: dlls/shell32/shellreg.c > =================================================================== > RCS file: /home/wine/wine/dlls/shell32/shellreg.c,v > retrieving revision 1.14 > diff -u -r1.14 shellreg.c > --- dlls/shell32/shellreg.c 3 Oct 2002 19:46:27 -0000 1.14 > +++ dlls/shell32/shellreg.c 12 Oct 2002 17:07:52 -0000 > @@ -147,86 +147,3 @@ > TRACE("0x%04x\n",hkey); > return RegCloseKey( hkey ); > } > - > - > -/* 16-bit functions */ > - > -/* 0 and 1 are valid rootkeys in win16 shell.dll and are used by > - * some programs. Do not remove those cases. -MM > - */ > -static inline void fix_win16_hkey( HKEY *hkey ) > -{ > - if (*hkey == 0 || *hkey == (HKEY)1) *hkey = HKEY_CLASSES_ROOT; > -} > - > -/****************************************************************************** > - * RegOpenKey [SHELL.1] > - */ > -DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, PHKEY retkey ) > -{ > - fix_win16_hkey( &hkey ); > - return RegOpenKeyA( hkey, name, retkey ); > -} > - > -/****************************************************************************** > - * RegCreateKey [SHELL.2] > - */ > -DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, PHKEY retkey ) > -{ > - fix_win16_hkey( &hkey ); > - return RegCreateKeyA( hkey, name, retkey ); > -} > - > -/****************************************************************************** > - * RegCloseKey [SHELL.3] > - */ > -DWORD WINAPI RegCloseKey16( HKEY hkey ) > -{ > - fix_win16_hkey( &hkey ); > - return RegCloseKey( hkey ); > -} > - > -/****************************************************************************** > - * RegDeleteKey [SHELL.4] > - */ > -DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name ) > -{ > - fix_win16_hkey( &hkey ); > - return RegDeleteKeyA( hkey, name ); > -} > - > -/****************************************************************************** > - * RegSetValue [SHELL.5] > - */ > -DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD >count ) > -{ > - fix_win16_hkey( &hkey ); > - return RegSetValueA( hkey, name, type, data, count ); > -} > - > -/****************************************************************************** > - * RegQueryValue [SHELL.6] > - * > - * NOTES > - * Is this HACK still applicable? > - * > - * HACK > - * The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just > - * mask out the high 16 bit. This (not so much incidently) hopefully fixes > - * Aldus FH4) > - */ > -DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count ) > -{ > - fix_win16_hkey( &hkey ); > - if (count) *count &= 0xffff; > - return RegQueryValueA( hkey, name, data, count ); > -} > - > -/****************************************************************************** > - * RegEnumKey [SHELL.7] > - */ > -DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len ) > -{ > - fix_win16_hkey( &hkey ); > - return RegEnumKeyA( hkey, index, name, name_len ); > -} > Index: dlls/shell32/shlexec.c > =================================================================== > RCS file: /home/wine/wine/dlls/shell32/shlexec.c,v > retrieving revision 1.8 > diff -u -r1.8 shlexec.c > --- dlls/shell32/shlexec.c 16 Sep 2002 19:27:51 -0000 1.8 > +++ dlls/shell32/shlexec.c 12 Oct 2002 17:07:59 -0000 > @@ -673,35 +673,6 @@ > return TRUE; > } > > - > -/************************************************************************* > - * ShellExecute [SHELL.20] > - */ > -HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation, > - LPCSTR lpFile, LPCSTR lpParameters, > - LPCSTR lpDirectory, INT16 iShowCmd ) > -{ > - SHELLEXECUTEINFOA sei; > - HANDLE hProcess = 0; > - > - sei.cbSize = sizeof(sei); > - sei.fMask = 0; > - sei.hwnd = HWND_32(hWnd); > - sei.lpVerb = lpOperation; > - sei.lpFile = lpFile; > - sei.lpParameters = lpParameters; > - sei.lpDirectory = lpDirectory; > - sei.nShow = iShowCmd; > - sei.lpIDList = 0; > - sei.lpClass = 0; > - sei.hkeyClass = 0; > - sei.dwHotKey = 0; > - sei.hProcess = hProcess; > - > - ShellExecuteExA32 (&sei, FALSE); > - return (HINSTANCE16)sei.hInstApp; > -} > - > /************************************************************************* > * ShellExecuteA [SHELL32.290] > */ > -- Michael Stefaniuc Tel.: +49-711-96437-199 System Administration Fax.: +49-711-96437-111 Red Hat GmbH Email: [EMAIL PROTECTED] Hauptstaetterstr. 58 http://www.redhat.de/ D-70178 Stuttgart
msg12777/pgp00000.pgp
Description: PGP signature