mirror of
https://github.com/Open-Shell/Open-Shell-Menu.git
synced 2026-04-12 18:07:24 +10:00
Initial commit
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
// Classic Shell (c) 2009-2016, Ivo Beltchev
|
||||
// Confidential information of Ivo Beltchev. Not for disclosure or distribution without prior written consent from the author
|
||||
|
||||
#ifndef _WIN64
|
||||
|
||||
#include "resource.h"
|
||||
#include <atlbase.h>
|
||||
#include <atltypes.h>
|
||||
#include <atlstr.h>
|
||||
#include <atlwin.h>
|
||||
#include "..\ClassicStartMenu\ClassicStartMenuDLL\LogManager.h"
|
||||
#include "StringUtils.h"
|
||||
#include <shlobj.h>
|
||||
|
||||
static int g_MenuCheckboxes[][2]=
|
||||
{
|
||||
{IDC_CHECKOPEN, LOG_OPEN},
|
||||
{IDC_CHECKITEMS, LOG_ITEMS},
|
||||
{IDC_CHECKEXECUTE, LOG_EXECUTE},
|
||||
{IDC_CHECKMFU, LOG_MFU},
|
||||
{IDC_CHECKNEW, LOG_NEW},
|
||||
{IDC_CHECKAPPS, LOG_APPS},
|
||||
{IDC_CHECKSEARCH, LOG_SEARCH},
|
||||
{IDC_CHECKSEARCH_SQL, LOG_SEARCH_SQL},
|
||||
{IDC_CHECKMOUSE, LOG_MOUSE},
|
||||
{IDC_CHECKCACHE, LOG_CACHE},
|
||||
};
|
||||
|
||||
static int g_FileLinks[]=
|
||||
{
|
||||
IDC_SYSLINKSTART,
|
||||
IDC_SYSLINKCACHE,
|
||||
IDC_SYSLINKSTARTUP,
|
||||
IDC_SYSLINKEXPLORER,
|
||||
IDC_SYSLINKIE,
|
||||
};
|
||||
|
||||
class CLoggingDialog: public CDialogImpl<CLoggingDialog>
|
||||
{
|
||||
public:
|
||||
CLoggingDialog( void ) {}
|
||||
|
||||
BEGIN_MSG_MAP( CLoggingDialog )
|
||||
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog )
|
||||
COMMAND_HANDLER( IDOK, BN_CLICKED, OnOK )
|
||||
COMMAND_HANDLER( IDCANCEL, BN_CLICKED, OnCancel )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKSTART, NM_CLICK, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKSTART, NM_RETURN, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKCACHE, NM_CLICK, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKCACHE, NM_RETURN, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKSTARTUP, NM_CLICK, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKSTARTUP, NM_RETURN, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKEXPLORER, NM_CLICK, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKEXPLORER, NM_RETURN, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKIE, NM_CLICK, OnLink )
|
||||
NOTIFY_HANDLER( IDC_SYSLINKIE, NM_RETURN, OnLink )
|
||||
REFLECT_NOTIFICATIONS()
|
||||
END_MSG_MAP()
|
||||
|
||||
enum { IDD=IDD_LOGSETTINGS };
|
||||
|
||||
protected:
|
||||
LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
|
||||
LRESULT OnOK( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
||||
LRESULT OnCancel( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
||||
LRESULT OnLink( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
|
||||
|
||||
private:
|
||||
DWORD GetSetting( const wchar_t *regPath, const wchar_t *name );
|
||||
void SetSetting( const wchar_t *regPath, const wchar_t *name, DWORD value );
|
||||
CString GetPathForLink( int link );
|
||||
};
|
||||
|
||||
DWORD CLoggingDialog::GetSetting( const wchar_t *regPath, const wchar_t *name )
|
||||
{
|
||||
CRegKey regKey;
|
||||
if (regKey.Open(HKEY_CURRENT_USER,regPath,KEY_READ|KEY_WOW64_64KEY)==ERROR_SUCCESS)
|
||||
{
|
||||
DWORD value;
|
||||
if (regKey.QueryDWORDValue(name,value)==ERROR_SUCCESS)
|
||||
return value;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CLoggingDialog::SetSetting( const wchar_t *regPath, const wchar_t *name, DWORD value )
|
||||
{
|
||||
CRegKey regKey;
|
||||
if (regKey.Create(HKEY_CURRENT_USER,regPath)==ERROR_SUCCESS)
|
||||
regKey.SetDWORDValue(name,value);
|
||||
}
|
||||
|
||||
CString CLoggingDialog::GetPathForLink( int link )
|
||||
{
|
||||
const wchar_t *path=NULL;
|
||||
if (link==IDC_SYSLINKSTART)
|
||||
path=L"%LOCALAPPDATA%\\ClassicShell\\StartMenuLog.txt";
|
||||
else if (link==IDC_SYSLINKCACHE)
|
||||
path=L"%LOCALAPPDATA%\\ClassicShell\\DataCache.txt";
|
||||
else if (link==IDC_SYSLINKSTARTUP)
|
||||
path=L"%LOCALAPPDATA%\\ClassicShell\\StartupLog.txt";
|
||||
else if (link==IDC_SYSLINKEXPLORER)
|
||||
path=L"%LOCALAPPDATA%\\ClassicShell\\ExplorerLog.txt";
|
||||
else if (link==IDC_SYSLINKIE)
|
||||
path=L"%LOCALAPPDATA%\\ClassicShell\\ClassicIELog.txt";
|
||||
else
|
||||
return CString();
|
||||
|
||||
wchar_t fname[_MAX_PATH];
|
||||
Strcpy(fname,_countof(fname),path);
|
||||
DoEnvironmentSubst(fname,_countof(fname));
|
||||
return fname;
|
||||
}
|
||||
|
||||
LRESULT CLoggingDialog::OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled )
|
||||
{
|
||||
DWORD log=GetSetting(L"Software\\IvoSoft\\ClassicStartMenu\\Settings",L"LogCategories");
|
||||
for (int i=0;i<_countof(g_MenuCheckboxes);i++)
|
||||
{
|
||||
if (log&g_MenuCheckboxes[i][1])
|
||||
CheckDlgButton(g_MenuCheckboxes[i][0],BST_CHECKED);
|
||||
}
|
||||
|
||||
log=GetSetting(L"Software\\IvoSoft\\ClassicStartMenu\\Settings",L"LogStartup");
|
||||
if (log)
|
||||
CheckDlgButton(IDC_CHECKSTARTUP,BST_CHECKED);
|
||||
|
||||
log=GetSetting(L"Software\\IvoSoft\\ClassicExplorer\\Settings",L"LogLevel");
|
||||
if (log)
|
||||
CheckDlgButton(IDC_CHECKEXPLORER,BST_CHECKED);
|
||||
|
||||
log=GetSetting(L"Software\\IvoSoft\\ClassicIE\\Settings",L"LogLevel");
|
||||
if (log)
|
||||
CheckDlgButton(IDC_CHECKIE,BST_CHECKED);
|
||||
|
||||
CWindow tooltip;
|
||||
tooltip.Create(TOOLTIPS_CLASS,m_hWnd,NULL,NULL,WS_POPUP|TTS_NOPREFIX);
|
||||
for (int i=0;i<_countof(g_FileLinks);i++)
|
||||
{
|
||||
TOOLINFO tool={sizeof(tool),TTF_SUBCLASS|TTF_IDISHWND,m_hWnd,(UINT_PTR)GetDlgItem(g_FileLinks[i]).m_hWnd};
|
||||
CString str=GetPathForLink(g_FileLinks[i]);
|
||||
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
||||
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LRESULT CLoggingDialog::OnOK( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
||||
{
|
||||
int res=0;
|
||||
DWORD log=0;
|
||||
for (int i=0;i<_countof(g_MenuCheckboxes);i++)
|
||||
{
|
||||
if (IsDlgButtonChecked(g_MenuCheckboxes[i][0])==BST_CHECKED)
|
||||
log|=g_MenuCheckboxes[i][1];
|
||||
}
|
||||
if (log!=GetSetting(L"Software\\IvoSoft\\ClassicStartMenu\\Settings",L"LogCategories"))
|
||||
{
|
||||
SetSetting(L"Software\\IvoSoft\\ClassicStartMenu\\Settings",L"LogCategories",log);
|
||||
res=1;
|
||||
}
|
||||
|
||||
log=IsDlgButtonChecked(IDC_CHECKSTARTUP)==BST_CHECKED?1:0;
|
||||
if (log!=GetSetting(L"Software\\IvoSoft\\ClassicStartMenu\\Settings",L"LogStartup"))
|
||||
{
|
||||
SetSetting(L"Software\\IvoSoft\\ClassicStartMenu\\Settings",L"LogStartup",log);
|
||||
res=1;
|
||||
}
|
||||
|
||||
log=IsDlgButtonChecked(IDC_CHECKEXPLORER)==BST_CHECKED?1:0;
|
||||
if (log!=GetSetting(L"Software\\IvoSoft\\ClassicExplorer\\Settings",L"LogLevel"))
|
||||
{
|
||||
SetSetting(L"Software\\IvoSoft\\ClassicExplorer\\Settings",L"LogLevel",log);
|
||||
res=1;
|
||||
}
|
||||
|
||||
log=IsDlgButtonChecked(IDC_CHECKIE)==BST_CHECKED?1:0;
|
||||
if (log!=GetSetting(L"Software\\IvoSoft\\ClassicIE\\Settings",L"LogLevel"))
|
||||
{
|
||||
SetSetting(L"Software\\IvoSoft\\ClassicIE\\Settings",L"LogLevel",log);
|
||||
res=1;
|
||||
}
|
||||
|
||||
EndDialog(res);
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CLoggingDialog::OnCancel( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
||||
{
|
||||
EndDialog(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CLoggingDialog::OnLink( int idCtrl, LPNMHDR pnmh, BOOL& bHandled )
|
||||
{
|
||||
CString path=GetPathForLink(idCtrl);
|
||||
if (!path.IsEmpty())
|
||||
{
|
||||
PIDLIST_ABSOLUTE pidl;
|
||||
if (SUCCEEDED(SHParseDisplayName(path,NULL,&pidl,0,NULL)))
|
||||
{
|
||||
HRESULT hr=SHOpenFolderAndSelectItems(pidl,0,NULL,0);
|
||||
ILFree(pidl);
|
||||
}
|
||||
else
|
||||
{
|
||||
wchar_t dir[_MAX_PATH];
|
||||
Strcpy(dir,_countof(dir),path);
|
||||
PathRemoveFileSpec(dir);
|
||||
ShellExecute(NULL,L"open",dir,NULL,dir,SW_SHOWNORMAL);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EditLoggingOptions( void )
|
||||
{
|
||||
if (CLoggingDialog().DoModal(NULL))
|
||||
{
|
||||
MessageBox(NULL,L"The changes to the logging options will take effect after you restart.",L"Logging options",MB_OK|MB_ICONINFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user