[CLIPBRD]

- Add clipboard file icon by Jared Smudde.
- Open any clipboard data file given in the command line.

[BOOTDATA]
- Add registry entries for file extension .clp.

CORE-10853 #resolve #comment Support added in revision 70736.

svn path=/trunk/; revision=70736
This commit is contained in:
Hermès Bélusca-Maïto 2016-02-13 23:16:19 +00:00
parent 60c090d24a
commit c3c8cf879c
14 changed files with 93 additions and 78 deletions

View file

@ -2,9 +2,9 @@
list(APPEND SOURCE list(APPEND SOURCE
clipbrd.c clipbrd.c
cliputils.c cliputils.c
winutils.c
fileutils.c fileutils.c
scrollutils.c scrollutils.c
winutils.c
precomp.h) precomp.h)
add_executable(clipbrd ${SOURCE} clipbrd.rc) add_executable(clipbrd ${SOURCE} clipbrd.rc)

View file

@ -63,6 +63,23 @@ static void SaveClipboardToFile(void)
CloseClipboard(); 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) static void LoadClipboardFromFile(void)
{ {
OPENFILENAMEW ofn; OPENFILENAMEW ofn;
@ -87,19 +104,7 @@ static void LoadClipboardFromFile(void)
if (!GetOpenFileNameW(&ofn)) if (!GetOpenFileNameW(&ofn))
return; return;
if (!OpenClipboard(Globals.hMainWnd)) LoadClipboardDataFromFile(szFileName);
{
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();
} }
static void LoadClipboardFromDrop(HDROP hDrop) static void LoadClipboardFromDrop(HDROP hDrop)
@ -109,19 +114,7 @@ static void LoadClipboardFromDrop(HDROP hDrop)
DragQueryFileW(hDrop, 0, szFileName, ARRAYSIZE(szFileName)); DragQueryFileW(hDrop, 0, szFileName, ARRAYSIZE(szFileName));
DragFinish(hDrop); DragFinish(hDrop);
if (!OpenClipboard(Globals.hMainWnd)) LoadClipboardDataFromFile(szFileName);
{
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();
} }
static void SetDisplayFormat(UINT uFormat) static void SetDisplayFormat(UINT uFormat)
@ -169,7 +162,7 @@ static void InitMenuPopup(HMENU hMenu, LPARAM index)
DrawMenuBar(Globals.hMainWnd); DrawMenuBar(Globals.hMainWnd);
} }
void UpdateDisplayMenu(void) static void UpdateDisplayMenu(void)
{ {
UINT uFormat; UINT uFormat;
WCHAR szFormatName[MAX_FMT_NAME_LEN + 1]; 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]; WCHAR szTitle[MAX_STRING_LEN];
HICON hIcon; HICON hIcon;
hIcon = LoadIconW(Globals.hInstance, MAKEINTRESOURCE(CLIP_ICON)); hIcon = LoadIconW(Globals.hInstance, MAKEINTRESOURCE(CLIPBRD_ICON));
LoadStringW(Globals.hInstance, STRING_CLIPBOARD, szTitle, ARRAYSIZE(szTitle)); LoadStringW(Globals.hInstance, STRING_CLIPBOARD, szTitle, ARRAYSIZE(szTitle));
ShellAboutW(Globals.hMainWnd, szTitle, 0, hIcon); ShellAboutW(Globals.hMainWnd, szTitle, 0, hIcon);
DeleteObject(hIcon); DeleteObject(hIcon);
@ -346,6 +339,28 @@ static LRESULT WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lP
{ {
switch(uMsg) 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: case WM_PAINT:
{ {
ClipboardPaintHandler(hWnd, uMsg, wParam, lParam); ClipboardPaintHandler(hWnd, uMsg, wParam, lParam);
@ -395,28 +410,6 @@ static LRESULT WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lP
break; 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: case WM_CHANGECBCHAIN:
{ {
if ((HWND)wParam == Globals.hWndNext) if ((HWND)wParam == Globals.hWndNext)
@ -534,7 +527,7 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
wndclass.cbSize = sizeof(wndclass); wndclass.cbSize = sizeof(wndclass);
wndclass.lpfnWndProc = MainWndProc; wndclass.lpfnWndProc = MainWndProc;
wndclass.hInstance = hInstance; wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(CLIP_ICON)); wndclass.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(CLIPBRD_ICON));
wndclass.hCursor = LoadCursorW(0, IDC_ARROW); wndclass.hCursor = LoadCursorW(0, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass.lpszMenuName = MAKEINTRESOURCEW(MAIN_MENU); wndclass.lpszMenuName = MAKEINTRESOURCEW(MAIN_MENU);
@ -574,6 +567,10 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
ShowLastWin32Error(Globals.hMainWnd); 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(); UpdateLinesToScroll();
while (GetMessageW(&msg, 0, 0, 0)) while (GetMessageW(&msg, 0, 0, 0))

View file

@ -8,7 +8,8 @@
#define REACTOS_STR_ORIGINAL_FILENAME "clipbrd.exe" #define REACTOS_STR_ORIGINAL_FILENAME "clipbrd.exe"
#include <reactos/version.rc> #include <reactos/version.rc>
CLIP_ICON ICON "res/clipbrd.ico" CLIPBRD_ICON ICON "res/clipbrd.ico"
CLPFILE_ICON ICON "res/clpfile.ico"
#include <reactos/manifest_exe.rc> #include <reactos/manifest_exe.rc>

View file

@ -33,6 +33,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "Zwischenablage" STRING_CLIPBOARD "Zwischenablage"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "Soll der Inhalt der Zwischenablage gelöscht werden?" STRING_DELETE_MSG "Soll der Inhalt der Zwischenablage gelöscht werden?"
STRING_DELETE_TITLE "Zwischenablage löschen" STRING_DELETE_TITLE "Zwischenablage löschen"
STRING_FORMAT_NT "Zwischenablagedateien für ReactOS (*.clp)" STRING_FORMAT_NT "Zwischenablagedateien für ReactOS (*.clp)"

View file

@ -33,6 +33,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "Clipboard" STRING_CLIPBOARD "Clipboard"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "Clear contents of the Clipboard?" STRING_DELETE_MSG "Clear contents of the Clipboard?"
STRING_DELETE_TITLE "Clear Clipboard" STRING_DELETE_TITLE "Clear Clipboard"
STRING_FORMAT_NT "Clipboard files for ReactOS (*.clp)" STRING_FORMAT_NT "Clipboard files for ReactOS (*.clp)"

View file

@ -35,6 +35,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "Portapapeles" STRING_CLIPBOARD "Portapapeles"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "¿Borrar contenidos del Portapapeles?" STRING_DELETE_MSG "¿Borrar contenidos del Portapapeles?"
STRING_DELETE_TITLE "Vaciar Portapapeles" STRING_DELETE_TITLE "Vaciar Portapapeles"
STRING_FORMAT_NT "Archivos de Portapapeles de ReactOS (*.clp)" STRING_FORMAT_NT "Archivos de Portapapeles de ReactOS (*.clp)"

View file

@ -18,7 +18,7 @@ BEGIN
BEGIN BEGIN
MENUITEM "&Supprimer\tSuppr", CMD_DELETE MENUITEM "&Supprimer\tSuppr", CMD_DELETE
END END
POPUP "&Affichage" POPUP "Affic&hage"
BEGIN BEGIN
MENUITEM "&Automatique", CMD_AUTOMATIC MENUITEM "&Automatique", CMD_AUTOMATIC
END END
@ -33,6 +33,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "Presse-papiers" STRING_CLIPBOARD "Presse-papiers"
STRING_CLIPFILE "Élément du Presse-papiers"
STRING_DELETE_MSG "Voulez-vous effacer le contenu du Presse-papiers ?" STRING_DELETE_MSG "Voulez-vous effacer le contenu du Presse-papiers ?"
STRING_DELETE_TITLE "Effacer le Presse-papiers" STRING_DELETE_TITLE "Effacer le Presse-papiers"
STRING_FORMAT_NT "Fichiers du Presse-papiers ReactOS (*.clp)" STRING_FORMAT_NT "Fichiers du Presse-papiers ReactOS (*.clp)"

View file

@ -34,6 +34,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "Clipboard" STRING_CLIPBOARD "Clipboard"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "Elimină conținutul din Clipboard?" STRING_DELETE_MSG "Elimină conținutul din Clipboard?"
STRING_DELETE_TITLE "Curăță Clipboard" STRING_DELETE_TITLE "Curăță Clipboard"
STRING_FORMAT_NT "Fișiere clipboard pentru ReactOS (*.clp)" STRING_FORMAT_NT "Fișiere clipboard pentru ReactOS (*.clp)"

View file

@ -35,6 +35,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "Pano" STRING_CLIPBOARD "Pano"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "Pano içeriğini sil?" STRING_DELETE_MSG "Pano içeriğini sil?"
STRING_DELETE_TITLE "Pano Sil" STRING_DELETE_TITLE "Pano Sil"
STRING_FORMAT_NT "ReactOS İçin Pano Kütükleri (*.clp)" STRING_FORMAT_NT "ReactOS İçin Pano Kütükleri (*.clp)"

View file

@ -35,6 +35,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "剪贴板" STRING_CLIPBOARD "剪贴板"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "清除剪贴板的内容吗?" STRING_DELETE_MSG "清除剪贴板的内容吗?"
STRING_DELETE_TITLE "清除剪贴板" STRING_DELETE_TITLE "清除剪贴板"
STRING_FORMAT_NT "ReactOS 的剪贴板文件 (*.clp)" STRING_FORMAT_NT "ReactOS 的剪贴板文件 (*.clp)"

View file

@ -35,6 +35,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
STRING_CLIPBOARD "剪貼簿" STRING_CLIPBOARD "剪貼簿"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "清除剪貼簿的內容嗎?" STRING_DELETE_MSG "清除剪貼簿的內容嗎?"
STRING_DELETE_TITLE "清除剪貼簿" STRING_DELETE_TITLE "清除剪貼簿"
STRING_FORMAT_NT "ReactOS 的剪貼簿檔案 (*.clp)" STRING_FORMAT_NT "ReactOS 的剪貼簿檔案 (*.clp)"

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,38 +1,40 @@
#pragma once #pragma once
#define MAIN_MENU 100 #define CLIPBRD_ICON 100
#define CLIP_ICON 101 #define CLPFILE_ICON 101
#define ID_ACCEL 102 #define MAIN_MENU 102
#define ID_ACCEL 103
#define CMD_OPEN 100 #define CMD_OPEN 110
#define CMD_SAVE_AS 101 #define CMD_SAVE_AS 111
#define CMD_EXIT 102 #define CMD_EXIT 112
#define CMD_DELETE 103 #define CMD_DELETE 113
#define CMD_HELP 105 #define CMD_HELP 115
#define CMD_ABOUT 106 #define CMD_ABOUT 116
#define CMD_AUTOMATIC 1000 #define CMD_AUTOMATIC 1000
#define STRING_CLIPBOARD 100 #define STRING_CLIPBOARD 120
#define STRING_DELETE_MSG 101 #define STRING_CLIPFILE 121
#define STRING_DELETE_TITLE 102 #define STRING_DELETE_MSG 123
#define STRING_FORMAT_NT 103 #define STRING_DELETE_TITLE 124
#define STRING_FORMAT_GEN 104 #define STRING_FORMAT_NT 125
#define STRING_FORMAT_GEN 126
#define STRING_CF_UNKNOWN 200 #define STRING_CF_UNKNOWN 200
#define STRING_CF_TEXT 201 #define STRING_CF_TEXT 201
#define STRING_CF_BITMAP 202 #define STRING_CF_BITMAP 202
#define STRING_CF_OEMTEXT 203 #define STRING_CF_METAFILEPICT 203
#define STRING_CF_UNICODETEXT 204 #define STRING_CF_SYLK 204
#define STRING_CF_DIB 205 #define STRING_CF_DIF 205
#define STRING_CF_LOCALE 206 #define STRING_CF_OEMTEXT 207
#define STRING_CF_ENHMETAFILE 207 #define STRING_CF_DIB 208
#define STRING_CF_METAFILEPICT 208
#define STRING_CF_PALETTE 209 #define STRING_CF_PALETTE 209
#define STRING_CF_DIBV5 210 #define STRING_CF_UNICODETEXT 213
#define STRING_CF_SYLK 211 #define STRING_CF_ENHMETAFILE 214
#define STRING_CF_DIF 212 #define STRING_CF_HDROP 215
#define STRING_CF_HDROP 213 #define STRING_CF_LOCALE 216
#define STRING_CF_DIBV5 217
#define ERROR_UNSUPPORTED_FORMAT 300 #define ERROR_UNSUPPORTED_FORMAT 300
#define ERROR_INVALID_FILE_FORMAT 301 #define ERROR_INVALID_FILE_FORMAT 301

View file

@ -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","",0x00000000,"shell32.dll"
HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","ThreadingModel",0x00000000,"Apartment" 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 ; Rich Text Files
HKCR,".rtf","",0x00000000,"rtffile" HKCR,".rtf","",0x00000000,"rtffile"
HKCR,".rtf\shellnew","",0x00000000,"" HKCR,".rtf\shellnew","",0x00000000,""