WindowsXP-SP1/shell/ext/nsc/main.c
2020-09-30 16:53:49 +02:00

129 lines
3.1 KiB
C

#include <windows.h>
#include <windowsx.h>
#include <shlobj.h>
#include "resource.h"
#include "debug.h"
#include "nsc.h"
typedef struct {
HWND hDlg;
HWND hwndNSC;
} DLGDATA;
BOOL CALLBACK DlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
DLGDATA * pdd = (DLGDATA *)GetWindowLong(hDlg, DWL_USER);
switch (uMessage) {
case WM_INITDIALOG:
SetWindowLong(hDlg, DWL_USER, lParam);
pdd = (DLGDATA *)lParam;
pdd->hDlg = hDlg;
pdd->hwndNSC = GetDlgItem(hDlg, IDC_USER1);
SetWindowLong(pdd->hwndNSC, GWL_STYLE, NSS_DROPTARGET | GetWindowLong(pdd->hwndNSC, GWL_STYLE));
{
NSC_SETROOT sr = {NSSR_CREATEPIDL, NULL, (LPCITEMIDLIST)CSIDL_FAVORITES, 5, NULL};
// NSC_SETROOT sr = {NSSR_CREATEPIDL, NULL, (LPCITEMIDLIST)CSIDL_FAVORITES, 10, NULL};
// SetWindowLong(pdd->hwndNSC, GWL_STYLE, GetWindowLong(pdd->hwndNSC, GWL_STYLE));
SetWindowLong(pdd->hwndNSC, GWL_STYLE, NSS_SHOWNONFOLDERS | GetWindowLong(pdd->hwndNSC, GWL_STYLE));
NameSpace_SetRoot(pdd->hwndNSC, &sr);
}
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
case IDOK:
case IDCANCEL:
EndDialog(hDlg, GET_WM_COMMAND_ID(wParam, lParam));
}
break;
case WM_NOTIFY:
switch (((NMHDR *)lParam)->code) {
// case PSN_SETACTIVE:
// case PSN_APPLY:
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR pszCmdLine, int nCmdShow)
{
DLGDATA dd;
NameSpace_RegisterClass(hInst);
OleInitialize(NULL);
DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc, (LPARAM)&dd);
OleUninitialize();
return 0;
}
// stolen from the CRT, used to shirink our code
int _stdcall WinMainCRTStartup(void)
{
int i;
STARTUPINFO si;
LPSTR pszCmdLine = GetCommandLine();
if ( *pszCmdLine == '\"' ) {
/*
* Scan, and skip over, subsequent characters until
* another double-quote or a null is encountered.
*/
while ( *++pszCmdLine && (*pszCmdLine
!= '\"') );
/*
* If we stopped on a double-quote (usual case), skip
* over it.
*/
if ( *pszCmdLine == '\"' )
pszCmdLine++;
}
else {
while (*pszCmdLine > ' ')
pszCmdLine++;
}
/*
* Skip past any white space preceeding the second token.
*/
while (*pszCmdLine && (*pszCmdLine <= ' ')) {
pszCmdLine++;
}
si.dwFlags = 0;
GetStartupInfoA(&si);
i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine,
si.dwFlags & STARTF_USESHOWWINDOW ? si.wShowWindow : SW_SHOWDEFAULT);
// Since we now have a way for an extension to tell us when it is finished,
// we will terminate all processes when the main thread goes away.
ExitProcess(i);
return i; // We only come here when we are not the shell...
}