#include "rapps.h"
-
/* SESSION Operation */
#define EXTRACT_FILLFILELIST 0x00000001
#define EXTRACT_EXTRACTFILES 0x00000002
VOID
CopyTextToClipboard(LPCWSTR lpszText)
{
- if(OpenClipboard(NULL))
+ HRESULT hr;
+
+ if (OpenClipboard(NULL))
{
HGLOBAL ClipBuffer;
WCHAR *Buffer;
+ DWORD cchBuffer;
EmptyClipboard();
- ClipBuffer = GlobalAlloc(GMEM_DDESHARE, (wcslen(lpszText) + 1) * sizeof(TCHAR));
- Buffer = (WCHAR*)GlobalLock(ClipBuffer);
- wcscpy(Buffer, lpszText);
+ cchBuffer = wcslen(lpszText) + 1;
+ ClipBuffer = GlobalAlloc(GMEM_DDESHARE, cchBuffer * sizeof(WCHAR));
+ Buffer = GlobalLock(ClipBuffer);
+ hr = StringCchCopyW(Buffer, cchBuffer, lpszText);
GlobalUnlock(ClipBuffer);
- SetClipboardData(CF_UNICODETEXT, ClipBuffer);
+ if (SUCCEEDED(hr))
+ SetClipboardData(CF_UNICODETEXT, ClipBuffer);
CloseClipboard();
}
}
VOID
-ShowPopupMenu(HWND hwnd, UINT MenuID)
+ShowPopupMenu(HWND hwnd, UINT MenuID, UINT DefaultItem)
{
- HMENU hPopupMenu = GetSubMenu(LoadMenuW(hInst, MAKEINTRESOURCEW(MenuID)), 0);
+ HMENU hMenu = NULL;
+ HMENU hPopupMenu;
+ MENUITEMINFO mii;
POINT pt;
+ if (MenuID)
+ {
+ hMenu = LoadMenuW(hInst, MAKEINTRESOURCEW(MenuID));
+ hPopupMenu = GetSubMenu(hMenu, 0);
+ }
+ else
+ hPopupMenu = GetMenu(hwnd);
+
+ ZeroMemory(&mii, sizeof(mii));
+ mii.cbSize = sizeof(mii);
+ mii.fMask = MIIM_STATE;
+ GetMenuItemInfo(hPopupMenu, DefaultItem, FALSE, &mii);
+ if (!(mii.fState & MFS_GRAYED))
+ SetMenuDefaultItem(hPopupMenu, DefaultItem, FALSE);
+
GetCursorPos(&pt);
SetForegroundWindow(hwnd);
TrackPopupMenu(hPopupMenu, 0, pt.x, pt.y, 0, hMainWnd, NULL);
- DestroyMenu(hPopupMenu);
+ if (hMenu)
+ DestroyMenu(hMenu);
}
BOOL
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
+ si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
if (!CreateProcessW(NULL, lpPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
return TRUE;
}
+BOOL
+GetStorageDirectory(PWCHAR lpDirectory, DWORD cch)
+{
+ if (cch < MAX_PATH)
+ return FALSE;
+
+ if (!SHGetSpecialFolderPathW(NULL, lpDirectory, CSIDL_LOCAL_APPDATA, TRUE))
+ return FALSE;
+
+ if (FAILED(StringCchCatW(lpDirectory, cch, L"\\rapps")))
+ return FALSE;
+
+ if (!CreateDirectoryW(lpDirectory, NULL) &&
+ GetLastError() != ERROR_ALREADY_EXISTS)
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
BOOL
ExtractFilesFromCab(LPWSTR lpCabName, LPWSTR lpOutputPath)
if (RegCreateKeyExW(HKEY_LOCAL_MACHINE,
szBuf, 0, NULL,
REG_OPTION_NON_VOLATILE,
- KEY_WRITE, NULL, &hKey, &dwDisp) != ERROR_SUCCESS)
+ KEY_WRITE, NULL, &hKey, &dwDisp) != ERROR_SUCCESS)
{
return;
}
- if (!GetCurrentDirectoryW(MAX_PATH, szPath)) return;
- wcscat(szPath, L"\\rapps.exe");
+ if (!GetModuleFileName(NULL, szPath, sizeof(szPath) / sizeof(szPath[0])))
+ return;
if (RegSetValueExW(hKey,
L"EventMessageFile",
(LPBYTE)szPath,
(DWORD)(wcslen(szPath) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS)
{
- RegCloseKey(hKey);
+ RegCloseKey(hKey);
return;
}
- dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
- EVENTLOG_INFORMATION_TYPE;
-
+ dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
+ EVENTLOG_INFORMATION_TYPE;
+
if (RegSetValueExW(hKey,
L"TypesSupported",
0,
(LPBYTE)&dwData,
sizeof(DWORD)) != ERROR_SUCCESS)
{
- RegCloseKey(hKey);
+ RegCloseKey(hKey);
return;
}
(LPBYTE)szPath,
(DWORD)(wcslen(szPath) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS)
{
- RegCloseKey(hKey);
+ RegCloseKey(hKey);
return;
}
(LPBYTE)&dwCategoryNum,
sizeof(DWORD)) != ERROR_SUCCESS)
{
- RegCloseKey(hKey);
+ RegCloseKey(hKey);
return;
}