diff --git a/reactos/base/applications/clipbrd/CMakeLists.txt b/reactos/base/applications/clipbrd/CMakeLists.txt index 8c88d79db6a..264037f9815 100644 --- a/reactos/base/applications/clipbrd/CMakeLists.txt +++ b/reactos/base/applications/clipbrd/CMakeLists.txt @@ -2,9 +2,9 @@ list(APPEND SOURCE clipbrd.c cliputils.c - winutils.c fileutils.c scrollutils.c + winutils.c precomp.h) add_executable(clipbrd ${SOURCE} clipbrd.rc) diff --git a/reactos/base/applications/clipbrd/clipbrd.c b/reactos/base/applications/clipbrd/clipbrd.c index 42e5be3adfe..cd18944066c 100644 --- a/reactos/base/applications/clipbrd/clipbrd.c +++ b/reactos/base/applications/clipbrd/clipbrd.c @@ -63,6 +63,23 @@ static void SaveClipboardToFile(void) CloseClipboard(); } +static void LoadClipboardDataFromFile(LPWSTR lpszFileName) +{ + if (!OpenClipboard(Globals.hMainWnd)) + { + ShowLastWin32Error(Globals.hMainWnd); + return; + } + + if (MessageBoxRes(Globals.hMainWnd, Globals.hInstance, STRING_DELETE_MSG, STRING_DELETE_TITLE, MB_ICONWARNING | MB_YESNO) == IDYES) + { + EmptyClipboard(); + ReadClipboardFile(lpszFileName); + } + + CloseClipboard(); +} + static void LoadClipboardFromFile(void) { OPENFILENAMEW ofn; @@ -87,19 +104,7 @@ static void LoadClipboardFromFile(void) if (!GetOpenFileNameW(&ofn)) return; - if (!OpenClipboard(Globals.hMainWnd)) - { - ShowLastWin32Error(Globals.hMainWnd); - return; - } - - if (MessageBoxRes(Globals.hMainWnd, Globals.hInstance, STRING_DELETE_MSG, STRING_DELETE_TITLE, MB_ICONWARNING | MB_YESNO) == IDYES) - { - EmptyClipboard(); - ReadClipboardFile(szFileName); - } - - CloseClipboard(); + LoadClipboardDataFromFile(szFileName); } static void LoadClipboardFromDrop(HDROP hDrop) @@ -109,19 +114,7 @@ static void LoadClipboardFromDrop(HDROP hDrop) DragQueryFileW(hDrop, 0, szFileName, ARRAYSIZE(szFileName)); DragFinish(hDrop); - if (!OpenClipboard(Globals.hMainWnd)) - { - ShowLastWin32Error(Globals.hMainWnd); - return; - } - - if (MessageBoxRes(Globals.hMainWnd, Globals.hInstance, STRING_DELETE_MSG, STRING_DELETE_TITLE, MB_ICONWARNING | MB_YESNO) == IDYES) - { - EmptyClipboard(); - ReadClipboardFile(szFileName); - } - - CloseClipboard(); + LoadClipboardDataFromFile(szFileName); } static void SetDisplayFormat(UINT uFormat) @@ -169,7 +162,7 @@ static void InitMenuPopup(HMENU hMenu, LPARAM index) DrawMenuBar(Globals.hMainWnd); } -void UpdateDisplayMenu(void) +static void UpdateDisplayMenu(void) { UINT uFormat; WCHAR szFormatName[MAX_FMT_NAME_LEN + 1]; @@ -258,7 +251,7 @@ static int ClipboardCommandHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l WCHAR szTitle[MAX_STRING_LEN]; HICON hIcon; - hIcon = LoadIconW(Globals.hInstance, MAKEINTRESOURCE(CLIP_ICON)); + hIcon = LoadIconW(Globals.hInstance, MAKEINTRESOURCE(CLIPBRD_ICON)); LoadStringW(Globals.hInstance, STRING_CLIPBOARD, szTitle, ARRAYSIZE(szTitle)); ShellAboutW(Globals.hMainWnd, szTitle, 0, hIcon); DeleteObject(hIcon); @@ -346,6 +339,28 @@ static LRESULT WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lP { switch(uMsg) { + case WM_CREATE: + { + Globals.hMenu = GetMenu(hWnd); + Globals.hWndNext = SetClipboardViewer(hWnd); + UpdateDisplayMenu(); + SetDisplayFormat(0); + break; + } + + case WM_CLOSE: + { + DestroyWindow(hWnd); + break; + } + + case WM_DESTROY: + { + ChangeClipboardChain(hWnd, Globals.hWndNext); + PostQuitMessage(0); + break; + } + case WM_PAINT: { ClipboardPaintHandler(hWnd, uMsg, wParam, lParam); @@ -395,28 +410,6 @@ static LRESULT WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lP break; } - case WM_CREATE: - { - Globals.hMenu = GetMenu(hWnd); - Globals.hWndNext = SetClipboardViewer(hWnd); - UpdateDisplayMenu(); - SetDisplayFormat(0); - break; - } - - case WM_CLOSE: - { - DestroyWindow(hWnd); - break; - } - - case WM_DESTROY: - { - ChangeClipboardChain(hWnd, Globals.hWndNext); - PostQuitMessage(0); - break; - } - case WM_CHANGECBCHAIN: { if ((HWND)wParam == Globals.hWndNext) @@ -534,7 +527,7 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi wndclass.cbSize = sizeof(wndclass); wndclass.lpfnWndProc = MainWndProc; wndclass.hInstance = hInstance; - wndclass.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(CLIP_ICON)); + wndclass.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(CLIPBRD_ICON)); wndclass.hCursor = LoadCursorW(0, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndclass.lpszMenuName = MAKEINTRESOURCEW(MAIN_MENU); @@ -574,6 +567,10 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi ShowLastWin32Error(Globals.hMainWnd); } + /* If the user provided a path to a clipboard data file, try to open it */ + if (lpCmdLine != NULL && *lpCmdLine) + LoadClipboardDataFromFile(lpCmdLine); + UpdateLinesToScroll(); while (GetMessageW(&msg, 0, 0, 0)) diff --git a/reactos/base/applications/clipbrd/clipbrd.rc b/reactos/base/applications/clipbrd/clipbrd.rc index f6a0a77a859..f6bfd2241e0 100644 --- a/reactos/base/applications/clipbrd/clipbrd.rc +++ b/reactos/base/applications/clipbrd/clipbrd.rc @@ -8,7 +8,8 @@ #define REACTOS_STR_ORIGINAL_FILENAME "clipbrd.exe" #include -CLIP_ICON ICON "res/clipbrd.ico" +CLIPBRD_ICON ICON "res/clipbrd.ico" +CLPFILE_ICON ICON "res/clpfile.ico" #include diff --git a/reactos/base/applications/clipbrd/lang/de-DE.rc b/reactos/base/applications/clipbrd/lang/de-DE.rc index 29d4c46d30c..63d4cddbbdd 100644 --- a/reactos/base/applications/clipbrd/lang/de-DE.rc +++ b/reactos/base/applications/clipbrd/lang/de-DE.rc @@ -33,6 +33,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "Zwischenablage" + STRING_CLIPFILE "Clipboard Element" STRING_DELETE_MSG "Soll der Inhalt der Zwischenablage gelöscht werden?" STRING_DELETE_TITLE "Zwischenablage löschen" STRING_FORMAT_NT "Zwischenablagedateien für ReactOS (*.clp)" diff --git a/reactos/base/applications/clipbrd/lang/en-US.rc b/reactos/base/applications/clipbrd/lang/en-US.rc index 1ad8fb57c46..14976fc57e4 100644 --- a/reactos/base/applications/clipbrd/lang/en-US.rc +++ b/reactos/base/applications/clipbrd/lang/en-US.rc @@ -33,6 +33,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "Clipboard" + STRING_CLIPFILE "Clipboard Element" STRING_DELETE_MSG "Clear contents of the Clipboard?" STRING_DELETE_TITLE "Clear Clipboard" STRING_FORMAT_NT "Clipboard files for ReactOS (*.clp)" diff --git a/reactos/base/applications/clipbrd/lang/es-ES.rc b/reactos/base/applications/clipbrd/lang/es-ES.rc index 2c90bed1ac3..95de8347d90 100644 --- a/reactos/base/applications/clipbrd/lang/es-ES.rc +++ b/reactos/base/applications/clipbrd/lang/es-ES.rc @@ -35,6 +35,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "Portapapeles" + STRING_CLIPFILE "Clipboard Element" STRING_DELETE_MSG "¿Borrar contenidos del Portapapeles?" STRING_DELETE_TITLE "Vaciar Portapapeles" STRING_FORMAT_NT "Archivos de Portapapeles de ReactOS (*.clp)" diff --git a/reactos/base/applications/clipbrd/lang/fr-FR.rc b/reactos/base/applications/clipbrd/lang/fr-FR.rc index 4ae69fb1bf8..272422b8543 100644 --- a/reactos/base/applications/clipbrd/lang/fr-FR.rc +++ b/reactos/base/applications/clipbrd/lang/fr-FR.rc @@ -18,7 +18,7 @@ BEGIN BEGIN MENUITEM "&Supprimer\tSuppr", CMD_DELETE END - POPUP "&Affichage" + POPUP "Affic&hage" BEGIN MENUITEM "&Automatique", CMD_AUTOMATIC END @@ -33,6 +33,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "Presse-papiers" + STRING_CLIPFILE "Élément du Presse-papiers" STRING_DELETE_MSG "Voulez-vous effacer le contenu du Presse-papiers ?" STRING_DELETE_TITLE "Effacer le Presse-papiers" STRING_FORMAT_NT "Fichiers du Presse-papiers ReactOS (*.clp)" diff --git a/reactos/base/applications/clipbrd/lang/ro-RO.rc b/reactos/base/applications/clipbrd/lang/ro-RO.rc index 080f7eee8fb..dfdc2273bc7 100644 --- a/reactos/base/applications/clipbrd/lang/ro-RO.rc +++ b/reactos/base/applications/clipbrd/lang/ro-RO.rc @@ -34,6 +34,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "Clipboard" + STRING_CLIPFILE "Clipboard Element" STRING_DELETE_MSG "Elimină conținutul din Clipboard?" STRING_DELETE_TITLE "Curăță Clipboard" STRING_FORMAT_NT "Fișiere clipboard pentru ReactOS (*.clp)" diff --git a/reactos/base/applications/clipbrd/lang/tr-TR.rc b/reactos/base/applications/clipbrd/lang/tr-TR.rc index 144ec391d15..192be1e5cdd 100644 --- a/reactos/base/applications/clipbrd/lang/tr-TR.rc +++ b/reactos/base/applications/clipbrd/lang/tr-TR.rc @@ -35,6 +35,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "Pano" + STRING_CLIPFILE "Clipboard Element" STRING_DELETE_MSG "Pano içeriğini sil?" STRING_DELETE_TITLE "Pano Sil" STRING_FORMAT_NT "ReactOS İçin Pano Kütükleri (*.clp)" diff --git a/reactos/base/applications/clipbrd/lang/zh-CN.rc b/reactos/base/applications/clipbrd/lang/zh-CN.rc index dbf70e8c491..88981380d69 100644 --- a/reactos/base/applications/clipbrd/lang/zh-CN.rc +++ b/reactos/base/applications/clipbrd/lang/zh-CN.rc @@ -35,6 +35,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "剪贴板" + STRING_CLIPFILE "Clipboard Element" STRING_DELETE_MSG "清除剪贴板的内容吗?" STRING_DELETE_TITLE "清除剪贴板" STRING_FORMAT_NT "ReactOS 的剪贴板文件 (*.clp)" diff --git a/reactos/base/applications/clipbrd/lang/zh-TW.rc b/reactos/base/applications/clipbrd/lang/zh-TW.rc index 2a266afdc1a..267dc722bd8 100644 --- a/reactos/base/applications/clipbrd/lang/zh-TW.rc +++ b/reactos/base/applications/clipbrd/lang/zh-TW.rc @@ -35,6 +35,7 @@ END STRINGTABLE BEGIN STRING_CLIPBOARD "剪貼簿" + STRING_CLIPFILE "Clipboard Element" STRING_DELETE_MSG "清除剪貼簿的內容嗎?" STRING_DELETE_TITLE "清除剪貼簿" STRING_FORMAT_NT "ReactOS 的剪貼簿檔案 (*.clp)" diff --git a/reactos/base/applications/clipbrd/res/clpfile.ico b/reactos/base/applications/clipbrd/res/clpfile.ico new file mode 100644 index 00000000000..057f6b13035 Binary files /dev/null and b/reactos/base/applications/clipbrd/res/clpfile.ico differ diff --git a/reactos/base/applications/clipbrd/resources.h b/reactos/base/applications/clipbrd/resources.h index f85336e22a4..ac958ef6258 100644 --- a/reactos/base/applications/clipbrd/resources.h +++ b/reactos/base/applications/clipbrd/resources.h @@ -1,38 +1,40 @@ #pragma once -#define MAIN_MENU 100 -#define CLIP_ICON 101 -#define ID_ACCEL 102 +#define CLIPBRD_ICON 100 +#define CLPFILE_ICON 101 +#define MAIN_MENU 102 +#define ID_ACCEL 103 -#define CMD_OPEN 100 -#define CMD_SAVE_AS 101 -#define CMD_EXIT 102 -#define CMD_DELETE 103 -#define CMD_HELP 105 -#define CMD_ABOUT 106 +#define CMD_OPEN 110 +#define CMD_SAVE_AS 111 +#define CMD_EXIT 112 +#define CMD_DELETE 113 +#define CMD_HELP 115 +#define CMD_ABOUT 116 #define CMD_AUTOMATIC 1000 -#define STRING_CLIPBOARD 100 -#define STRING_DELETE_MSG 101 -#define STRING_DELETE_TITLE 102 -#define STRING_FORMAT_NT 103 -#define STRING_FORMAT_GEN 104 +#define STRING_CLIPBOARD 120 +#define STRING_CLIPFILE 121 +#define STRING_DELETE_MSG 123 +#define STRING_DELETE_TITLE 124 +#define STRING_FORMAT_NT 125 +#define STRING_FORMAT_GEN 126 #define STRING_CF_UNKNOWN 200 #define STRING_CF_TEXT 201 #define STRING_CF_BITMAP 202 -#define STRING_CF_OEMTEXT 203 -#define STRING_CF_UNICODETEXT 204 -#define STRING_CF_DIB 205 -#define STRING_CF_LOCALE 206 -#define STRING_CF_ENHMETAFILE 207 -#define STRING_CF_METAFILEPICT 208 +#define STRING_CF_METAFILEPICT 203 +#define STRING_CF_SYLK 204 +#define STRING_CF_DIF 205 +#define STRING_CF_OEMTEXT 207 +#define STRING_CF_DIB 208 #define STRING_CF_PALETTE 209 -#define STRING_CF_DIBV5 210 -#define STRING_CF_SYLK 211 -#define STRING_CF_DIF 212 -#define STRING_CF_HDROP 213 +#define STRING_CF_UNICODETEXT 213 +#define STRING_CF_ENHMETAFILE 214 +#define STRING_CF_HDROP 215 +#define STRING_CF_LOCALE 216 +#define STRING_CF_DIBV5 217 #define ERROR_UNSUPPORTED_FORMAT 300 #define ERROR_INVALID_FILE_FORMAT 301 diff --git a/reactos/boot/bootdata/hivecls.inf b/reactos/boot/bootdata/hivecls.inf index 19b62df4eb5..5ce9771d370 100644 --- a/reactos/boot/bootdata/hivecls.inf +++ b/reactos/boot/bootdata/hivecls.inf @@ -23,6 +23,13 @@ HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}","",0x00000000,"Drive Propert HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","",0x00000000,"shell32.dll" HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +; Clipboard Element +HKCR,".clp","",0x00000000,"clpfile" +HKCR,"clpfile","",0x00000000,"Clipboard Element" +HKCR,"clpfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\clipbrd.exe,-121" +HKCR,"clpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\clipbrd.exe,1" +HKCR,"clpfile\shell\open\command","",0x00000000,"clipbrd.exe %1" + ; Rich Text Files HKCR,".rtf","",0x00000000,"rtffile" HKCR,".rtf\shellnew","",0x00000000,""