Преглед на файлове

Added option to save the current clipboard to Ditto. Usefull if you turn off clipboard monitoring and only save the clips you want.

git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@770 595ec19a-5cb4-439b-94a8-42fb3063c22c
sabrogden преди 10 години
родител
ревизия
96f7a0b888
променени са 14 файла, в които са добавени 139 реда и са изтрити 47 реда
  1. 1 0
      ActionEnums.h
  2. 2 0
      CP_Main.cpp
  3. 1 0
      CP_Main.h
  4. 47 42
      CP_Main.rc
  5. 1 1
      Clip.cpp
  6. 1 1
      Clip.h
  7. 41 0
      MainFrm.cpp
  8. 2 0
      MainFrm.h
  9. 2 0
      Misc.h
  10. 4 0
      OptionsKeyBoard.cpp
  11. 2 0
      OptionsKeyBoard.h
  12. 26 0
      QPasteWnd.cpp
  13. 3 0
      QPasteWnd.h
  14. 6 3
      Resource.h

+ 1 - 0
ActionEnums.h

@@ -43,6 +43,7 @@ public:
 		EXPORT_TO_QR_CODE,
 		EXPORT_TO_GOOGLE_TRANSLATE,
 		EXPORT_TO_BITMAP_FILE,
+		SAVE_CURRENT_CLIPBOARD,
 
 	};
 };

+ 2 - 0
CP_Main.cpp

@@ -375,6 +375,8 @@ void CCP_MainApp::AfterMainCreate()
 
 	m_pTextOnlyPaste = new CHotKey("TextOnlyPaste", 0, true);
 
+	m_pSaveClipboard = new CHotKey("SaveClipboard", 0, false);
+
 	LoadGlobalClips();
 
 	g_HotKeys.RegisterAll();

+ 1 - 0
CP_Main.h

@@ -75,6 +75,7 @@ public:
 	CHotKey		*m_pPasteBuffer3;
 	CHotKey		*m_pCutBuffer3;
 	CHotKey		*m_pTextOnlyPaste;
+	CHotKey		*m_pSaveClipboard;
 
 	ExternalWindowTracker m_activeWnd;
 	

+ 47 - 42
CP_Main.rc

@@ -184,6 +184,7 @@ BEGIN
         MENUITEM "Help",                        ID_FIRST_HELP
         MENUITEM SEPARATOR
         MENUITEM "Connect To Clipboard",        ID_FIRST_TOGGLECONNECTCV
+        MENUITEM "Save Current Clipboard",      ID_FIRST_SAVECURRENTCLIPBOARD
         MENUITEM SEPARATOR
         MENUITEM "Exit",                        ID_FIRST_EXIT
     END
@@ -323,6 +324,7 @@ BEGIN
         MENUITEM "Help",                        32842,MFT_STRING,MFS_ENABLED
         MENUITEM MFT_SEPARATOR
         MENUITEM "Connect To Clipboard",        32775,MFT_STRING,MFS_ENABLED
+        MENUITEM "Save Current Clipboard",      ID_MENU_SAVECURRENTCLIPBOARD,MFT_STRING,MFS_ENABLED
         MENUITEM MFT_SEPARATOR
         MENUITEM "Exit Program",                32806,MFT_STRING,MFS_ENABLED
     END
@@ -472,54 +474,57 @@ BEGIN
     PUSHBUTTON      "...",IDC_BUTTON_DIFF_BROWSE,332,162,17,14
 END
 
-IDD_OPTIONS_KEYSTROKES DIALOGEX 0, 0, 350, 206
+IDD_OPTIONS_KEYSTROKES DIALOGEX 0, 0, 350, 219
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Keyboard Shortcuts"
 FONT 8, "MS Shell Dlg", 0, 0, 0x1
 BEGIN
-    CONTROL         "HotKey1",IDC_HOTKEY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,91,13,80,14
-    CONTROL         "Win",IDC_CHECK_WIN_DITTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,13,33,14
-    LTEXT           "Send custom strokes Per Application",IDC_STATIC_CUSTOM_KEYS,210,16,133,8
-    CONTROL         "",IDC_HOTKEY_TEXT_ONLY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,91,33,80,14
-    CONTROL         "Win",IDC_CHECK_WIN_TEXT_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,33,33,14
-    CONTROL         "HotKey1",IDC_HOTKEY1,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,92,80,14
-    CONTROL         "Win",IDC_CHECK_WIN1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,92,33,14
-    CONTROL         "HotKey1",IDC_HOTKEY2,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,107,80,14
-    CONTROL         "Win",IDC_CHECK_WIN2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,107,33,14
-    CONTROL         "HotKey1",IDC_HOTKEY3,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,122,80,14
-    CONTROL         "Win",IDC_CHECK_WIN3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,122,33,14
-    CONTROL         "HotKey1",IDC_HOTKEY4,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,137,80,14
-    CONTROL         "Win",IDC_CHECK_WIN4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,137,33,14
-    CONTROL         "HotKey1",IDC_HOTKEY5,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,152,80,14
-    CONTROL         "Win",IDC_CHECK_WIN5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,152,33,14
-    CONTROL         "HotKey1",IDC_HOTKEY6,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,92,80,14
-    CONTROL         "Win",IDC_CHECK_WIN6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,92,27,14
-    CONTROL         "HotKey1",IDC_HOTKEY7,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,107,80,14
-    CONTROL         "Win",IDC_CHECK_WIN7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,107,26,14
-    CONTROL         "HotKey1",IDC_HOTKEY8,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,122,80,14
-    CONTROL         "Win",IDC_CHECK_WIN8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,122,26,14
-    CONTROL         "HotKey1",IDC_HOTKEY9,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,137,80,14
-    CONTROL         "Win",IDC_CHECK_WIN9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,137,27,14
-    CONTROL         "HotKey1",IDC_HOTKEY10,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,152,80,14
-    CONTROL         "Win",IDC_CHECK_WIN10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,152,27,14
+    CONTROL         "HotKey1",IDC_HOTKEY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,97,13,80,14
+    CONTROL         "Win",IDC_CHECK_WIN_DITTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,13,33,14
+    LTEXT           "Send custom strokes Per Application",IDC_STATIC_CUSTOM_KEYS,216,16,127,8
+    CONTROL         "",IDC_HOTKEY_TEXT_ONLY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,97,30,80,14
+    CONTROL         "Win",IDC_CHECK_WIN_TEXT_ONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,30,33,14
+    CONTROL         "HotKey1",IDC_HOTKEY1,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,104,80,14
+    CONTROL         "Win",IDC_CHECK_WIN1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,104,33,14
+    CONTROL         "HotKey1",IDC_HOTKEY2,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,119,80,14
+    CONTROL         "Win",IDC_CHECK_WIN2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,119,33,14
+    CONTROL         "HotKey1",IDC_HOTKEY3,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,134,80,14
+    CONTROL         "Win",IDC_CHECK_WIN3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,134,33,14
+    CONTROL         "HotKey1",IDC_HOTKEY4,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,149,80,14
+    CONTROL         "Win",IDC_CHECK_WIN4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,149,33,14
+    CONTROL         "HotKey1",IDC_HOTKEY5,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,66,164,80,14
+    CONTROL         "Win",IDC_CHECK_WIN5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,164,33,14
+    CONTROL         "HotKey1",IDC_HOTKEY6,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,104,80,14
+    CONTROL         "Win",IDC_CHECK_WIN6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,104,27,14
+    CONTROL         "HotKey1",IDC_HOTKEY7,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,119,80,14
+    CONTROL         "Win",IDC_CHECK_WIN7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,119,26,14
+    CONTROL         "HotKey1",IDC_HOTKEY8,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,134,80,14
+    CONTROL         "Win",IDC_CHECK_WIN8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,134,26,14
+    CONTROL         "HotKey1",IDC_HOTKEY9,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,149,80,14
+    CONTROL         "Win",IDC_CHECK_WIN9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,149,27,14
+    CONTROL         "HotKey1",IDC_HOTKEY10,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,229,164,80,14
+    CONTROL         "Win",IDC_CHECK_WIN10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,309,164,27,14
     CONTROL         "Send Paste (Otherwise it will just load the item on the clipboard)",IDC_CHECK_SEND_PASTE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,66,324,13
-    GROUPBOX        "Global Hot Keys for Last Ten Items Copied",IDC_STATIC_GROUP,7,55,336,116
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,78,324,13
+    GROUPBOX        "Global Hot Keys for Last Ten Items Copied",IDC_STATIC_GROUP,7,67,336,116
     LTEXT           "Activate Ditto",IDC_STATIC_ACTIVATE,19,13,71,14,SS_CENTERIMAGE
-    RTEXT           "Position 1",IDC_STATIC_1,16,92,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 2",IDC_STATIC_2,16,107,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 3",IDC_STATIC_3,16,122,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 4",IDC_STATIC_4,16,137,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 5",IDC_STATIC_5,16,152,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 6",IDC_STATIC_6,181,92,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 7",IDC_STATIC_7,181,107,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 8",IDC_STATIC_8,181,122,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 9",IDC_STATIC_9,181,137,42,14,SS_CENTERIMAGE
-    RTEXT           "Position 10",IDC_STATIC_10,181,152,42,14,SS_CENTERIMAGE
-    LTEXT           "Check the ""Win"" Button to include the windows keyboard key in your hot key.",IDC_STATIC_WIN,7,176,336,18
-    LTEXT           "Text Only Paste",IDC_STATIC_ACTIVATE2,19,33,71,14,SS_CENTERIMAGE
+    RTEXT           "Position 1",IDC_STATIC_1,16,104,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 2",IDC_STATIC_2,16,119,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 3",IDC_STATIC_3,16,134,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 4",IDC_STATIC_4,16,149,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 5",IDC_STATIC_5,16,164,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 6",IDC_STATIC_6,181,104,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 7",IDC_STATIC_7,181,119,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 8",IDC_STATIC_8,181,134,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 9",IDC_STATIC_9,181,149,42,14,SS_CENTERIMAGE
+    RTEXT           "Position 10",IDC_STATIC_10,181,164,42,14,SS_CENTERIMAGE
+    LTEXT           "Check the ""Win"" Button to include the windows keyboard key in your hot key.",IDC_STATIC_WIN,7,188,336,18
+    LTEXT           "Text Only Paste",IDC_STATIC_ACTIVATE2,19,30,71,14,SS_CENTERIMAGE
     CONTROL         "Move clips to the top of the list on paste",IDC_CHECK_MOVE_CLIPS_ON_PASTE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,78,324,13
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,90,324,13
+    CONTROL         "",IDC_HOTKEY_SAVE_CLIPBOARD,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,98,48,80,14
+    CONTROL         "Win",IDC_CHECK_WIN_SAVE_CLIPBOARD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,48,33,14
+    LTEXT           "Save Current Clipboard",IDC_STATIC_COLLECT_CLIPBOARD,20,48,77,14,SS_CENTERIMAGE
 END
 
 IDD_OPTIONS_GENERAL DIALOGEX 0, 0, 351, 281
@@ -916,7 +921,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 343
         TOPMARGIN, 7
-        BOTTOMMARGIN, 198
+        BOTTOMMARGIN, 211
     END
 
     IDD_OPTIONS_GENERAL, DIALOG

+ 1 - 1
Clip.cpp

@@ -274,7 +274,7 @@ bool CClip::AddFormat(CLIPFORMAT cfType, void* pData, UINT nLen)
 }
 
 // Fills this CClip with the contents of the clipboard.
-bool CClip::LoadFromClipboard(CClipTypes* pClipTypes)
+bool CClip::LoadFromClipboard(CClipTypes* pClipTypes, bool checkClipboardIgnore)
 {
 	COleDataObjectEx oleData;
 	CClipTypes defaultTypes;

+ 1 - 1
Clip.h

@@ -122,7 +122,7 @@ public:
 	void Clear();
 	void EmptyFormats();
 	bool AddFormat(CLIPFORMAT cfType, void* pData, UINT nLen);
-	bool LoadFromClipboard(CClipTypes* pClipTypes);
+	bool LoadFromClipboard(CClipTypes* pClipTypes, bool checkClipboardIgnore = true);
 	bool SetDescFromText(HGLOBAL hgData, bool unicode);
 	bool SetDescFromType();
 	bool AddToDB(bool bCheckForDuplicates = true);

+ 41 - 0
MainFrm.cpp

@@ -62,6 +62,8 @@ IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
 	ON_MESSAGE(WM_SHOW_OPTIONS, OnShowOptions)
 	ON_COMMAND(ID_FIRST_DELETECLIPDATA, &CMainFrame::OnFirstDeleteclipdata)
 	ON_MESSAGE(WM_DELETE_CLIPS_CLOSED, OnDeleteClipDataClosed)
+	ON_COMMAND(ID_FIRST_SAVECURRENTCLIPBOARD, &CMainFrame::OnFirstSavecurrentclipboard)
+	ON_MESSAGE(WM_SAVE_CLIPBOARD, &CMainFrame::OnSaveClipboardMessage)
 	END_MESSAGE_MAP()
 
 	static UINT indicators[] = 
@@ -351,6 +353,10 @@ LRESULT CMainFrame::OnHotKey(WPARAM wParam, LPARAM lParam)
 	{
 		DoTextOnlyPaste();
 	}
+	else if(theApp.m_pSaveClipboard && wParam == theApp.m_pSaveClipboard->m_Atom)
+	{
+		OnFirstSavecurrentclipboard();
+	}
 	else
 	{
 		for(int i = 0; i < g_HotKeys.GetCount(); i++)
@@ -1071,3 +1077,38 @@ void CMainFrame::OnFirstDeleteclipdata()
 		}
 	}
 }
+
+LRESULT CMainFrame::OnSaveClipboardMessage(WPARAM wParam, LPARAM lParam)
+{
+	OnFirstSavecurrentclipboard();
+	return TRUE;
+}
+
+void CMainFrame::OnFirstSavecurrentclipboard()
+{
+	Log(_T("Start Saving the current clipboard to the database"));
+	CClip* pClip = new CClip;
+	if(pClip)
+	{
+		CClipTypes* pTypes = theApp.LoadTypesFromDB();
+		if(pTypes)
+		{
+			if(pClip->LoadFromClipboard(pTypes, false))
+			{
+				Log(_T("Loaded clips from the clipboard, sending message to save to the db"));
+				::PostMessage(m_hWnd, WM_CLIPBOARD_COPIED, (WPARAM)pClip, 0);
+			}
+			else
+			{
+				Log(_T("Failed to load clips from the clipboard, not saving to db"));
+				delete pClip;
+				pClip = NULL;
+			}
+		}
+		else
+		{
+			Log(_T("Failed to load supported types from the db, not saving to the db"));
+		}
+	}
+	Log(_T("Start Saving the current clipboard to the database"));
+}

+ 2 - 0
MainFrm.h

@@ -109,6 +109,7 @@ protected:
 	afx_msg LRESULT OnDeleteClipDataClosed(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnOptionsClosed(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnShowOptions(WPARAM wParam, LPARAM lParam);
+	afx_msg LRESULT OnSaveClipboardMessage(WPARAM wParam, LPARAM lParam);
 DECLARE_MESSAGE_MAP()public:
     virtual BOOL PreTranslateMessage(MSG *pMsg);
     afx_msg void OnClose();
@@ -117,4 +118,5 @@ DECLARE_MESSAGE_MAP()public:
     afx_msg void OnFirstNewclip();
 	afx_msg void OnFirstGlobalhotkeys();
 	afx_msg void OnFirstDeleteclipdata();
+	afx_msg void OnFirstSavecurrentclipboard();
 };

+ 2 - 0
Misc.h

@@ -123,6 +123,8 @@ CString GetProcessName(HWND hWnd);
 #define WM_SHOW_OPTIONS	WM_USER	+ 220
 #define WM_DELETE_CLIPS_CLOSED	WM_USER	+ 221
 #define WM_OPEN_CLOSE_WINDWOW WM_USER + 222
+#define WM_SAVE_CLIPBOARD WM_USER + 223
+
 
 #if !defined(_BITSET_)
 #	include <bitset>

+ 4 - 0
OptionsKeyBoard.cpp

@@ -50,6 +50,7 @@ void COptionsKeyBoard::DoDataExchange(CDataExchange* pDX)
 	//}}AFX_DATA_MAP
 	DDX_Control(pDX, IDC_STATIC_CUSTOM_KEYS, m_CustomeKeysHelp);
 	DDX_Control(pDX, IDC_CHECK_MOVE_CLIPS_ON_PASTE, m_btMoveClipOnGlobal10);
+	DDX_Control(pDX, IDC_HOTKEY_SAVE_CLIPBOARD, m_saveClipboardHotKey);
 }
 
 BEGIN_MESSAGE_MAP(COptionsKeyBoard, CPropertyPage)
@@ -83,6 +84,8 @@ BOOL COptionsKeyBoard::OnInitDialog()
 	theApp.m_pPosNine->CopyToCtrl(m_Nine, m_hWnd, IDC_CHECK_WIN9);
 	theApp.m_pPosTen->CopyToCtrl(m_Ten, m_hWnd, IDC_CHECK_WIN10);
 	theApp.m_pTextOnlyPaste->CopyToCtrl(m_TextOnlyKey, m_hWnd, IDC_CHECK_WIN_TEXT_ONLY);
+	theApp.m_pSaveClipboard->CopyToCtrl(m_saveClipboardHotKey, m_hWnd, IDC_CHECK_WIN_SAVE_CLIPBOARD);
+
 
 	//Unregister hotkeys and Reregister them on cancel or ok
 	g_HotKeys.UnregisterAll();
@@ -132,6 +135,7 @@ BOOL COptionsKeyBoard::OnApply()
 	theApp.m_pPosNine->CopyFromCtrl(m_Nine, m_hWnd, IDC_CHECK_WIN9);
 	theApp.m_pPosTen->CopyFromCtrl(m_Ten, m_hWnd, IDC_CHECK_WIN10);
 	theApp.m_pTextOnlyPaste->CopyFromCtrl(m_TextOnlyKey, m_hWnd, IDC_CHECK_WIN_TEXT_ONLY);
+	theApp.m_pSaveClipboard->CopyFromCtrl(m_saveClipboardHotKey, m_hWnd, IDC_CHECK_WIN_SAVE_CLIPBOARD);
 
 	ARRAY NewKeys;
 	g_HotKeys.GetKeys(NewKeys);

+ 2 - 0
OptionsKeyBoard.h

@@ -11,6 +11,7 @@
 #include "OptionsSheet.h"
 #include "afxwin.h"
 #include "HyperLink.h"
+#include "afxcmn.h"
 
 /////////////////////////////////////////////////////////////////////////////
 // COptionsKeyBoard dialog
@@ -72,6 +73,7 @@ protected:
 
 public:
 	CHyperLink m_CustomeKeysHelp;
+	CHotKeyCtrl m_saveClipboardHotKey;
 };
 
 //{{AFX_INSERT_LOCATION}}

+ 26 - 0
QPasteWnd.cpp

@@ -230,6 +230,8 @@ ON_UPDATE_COMMAND_UI(ID_IMPORT_EXPORTCLIP_BITMAP, &CQPasteWnd::OnUpdateImportExp
 
 ON_COMMAND(ID_MENU_WILDCARDSEARCH, &CQPasteWnd::OnMenuWildcardsearch)
 
+ON_COMMAND(ID_MENU_SAVECURRENTCLIPBOARD, &CQPasteWnd::OnMenuSavecurrentclipboard)
+ON_UPDATE_COMMAND_UI(ID_MENU_SAVECURRENTCLIPBOARD, &CQPasteWnd::OnUpdateMenuSavecurrentclipboard)
 END_MESSAGE_MAP()
 
 
@@ -2745,6 +2747,8 @@ bool CQPasteWnd::DoAction(DWORD actionId)
 	case ActionEnums::EXPORT_TO_BITMAP_FILE:
 		ret = DoExportToBitMapFile();
 		break;
+	case ActionEnums::SAVE_CURRENT_CLIPBOARD:
+		ret = DoSaveCurrentClipboard();
 	}
 
 	return ret;
@@ -3578,6 +3582,13 @@ bool CQPasteWnd::DoExportToGoogleTranslate()
 		}
 	}
 
+	return true;
+} 
+
+bool CQPasteWnd::DoSaveCurrentClipboard()
+{
+	theApp.m_pMainFrame->PostMessage(WM_SAVE_CLIPBOARD, 0, 0);
+
 	return true;
 }
 
@@ -4896,3 +4907,18 @@ void CQPasteWnd::OnMenuWildcardsearch()
 	CGetSetOptions::SetRegExTextSearch(FALSE);
 }
 
+void CQPasteWnd::OnMenuSavecurrentclipboard()
+{
+	DoAction(ActionEnums::SAVE_CURRENT_CLIPBOARD);
+}
+
+
+void CQPasteWnd::OnUpdateMenuSavecurrentclipboard(CCmdUI *pCmdUI)
+{
+	if (!pCmdUI->m_pMenu)
+	{
+		return;
+	}
+
+	UpdateMenuShortCut(pCmdUI, ActionEnums::SAVE_CURRENT_CLIPBOARD);
+}

+ 3 - 0
QPasteWnd.h

@@ -237,6 +237,7 @@ public:
 	bool DoExportToTextFile();
 	bool DoExportToGoogleTranslate();
 	bool DoExportToBitMapFile();
+	bool DoSaveCurrentClipboard();
 
 	void UpdateMenuShortCut(CCmdUI *pCmdUI, DWORD action);
 
@@ -398,4 +399,6 @@ public:
 	afx_msg void OnImportExportclipBitmap();
 	afx_msg void OnUpdateImportExportclipBitmap(CCmdUI *pCmdUI);
 	afx_msg void OnMenuWildcardsearch();
+	afx_msg void OnMenuSavecurrentclipboard();
+	afx_msg void OnUpdateMenuSavecurrentclipboard(CCmdUI *pCmdUI);
 };

+ 6 - 3
Resource.h

@@ -191,6 +191,7 @@
 #define IDC_HOTKEY_TEXT_ONLY            2003
 #define IDD_OPTIONS_TYPES               2004
 #define IDC_START_ON_STARTUP            2004
+#define IDC_HOTKEY_SAVE_CLIPBOARD       2004
 #define IDR_QUICK_PASTE                 2005
 #define IDC_TRANSPARENCY                2006
 #define IDD_OPTIONS_QUICK_PASTE         2006
@@ -270,6 +271,7 @@
 #define IDC_STATIC_MAX_SIZE             2046
 #define IDC_STATIC_NO_LIMIT             2047
 #define IDC_CHECK_WIN_NAMED_PASTE       2047
+#define IDC_CHECK_WIN_SAVE_CLIPBOARD    2047
 #define IDC_STATIC_ACTIVATE             2048
 #define IDC_STATIC_NAMED_COPY           2049
 #define IDC_STATIC_ACTIVATE2            2049
@@ -287,6 +289,7 @@
 #define IDC_STATIC_10                   2061
 #define IDC_STATIC_LINES                2062
 #define IDC_STATIC_NAMED_COPY2          2062
+#define IDC_STATIC_COLLECT_CLIPBOARD    2062
 #define IDC_STATIC_POPUP                2063
 #define IDC_STATIC_LEGEND               2064
 #define IDC_STATIC_LEG                  2065
@@ -501,7 +504,8 @@
 #define ID_IMPORT_EXPORTCLIP            32901
 #define ID_IMPORT_EXPORTCLIP_BITMAP     32902
 #define ID_MENU_WILDCARDSEARCH          32903
-
+#define ID_FIRST_SAVECURRENTCLIPBOARD   32904
+#define ID_MENU_SAVECURRENTCLIPBOARD    32905
 
 // Next default values for new objects
 // 
@@ -509,8 +513,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        240
-
-#define _APS_NEXT_COMMAND_VALUE         32904
+#define _APS_NEXT_COMMAND_VALUE         32906
 #define _APS_NEXT_CONTROL_VALUE         2127
 #define _APS_NEXT_SYMED_VALUE           101
 #endif