Commit 9698bde3 authored by Brian Curtin's avatar Brian Curtin

Add associator

parent 4bca2861
/*
* Copyright (C) 2011-2012 Vinay Sajip. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include "associator.h"
#define PYTHON_EXECUTABLE L"python.exe"
#define MSGSIZE 1024
#define MAX_VERSION_SIZE 4
typedef struct {
wchar_t version[MAX_VERSION_SIZE]; /* m.n */
int bits; /* 32 or 64 */
wchar_t executable[MAX_PATH];
} INSTALLED_PYTHON;
/*
* To avoid messing about with heap allocations, just assume we can allocate
* statically and never have to deal with more versions than this.
*/
#define MAX_INSTALLED_PYTHONS 100
static INSTALLED_PYTHON installed_pythons[MAX_INSTALLED_PYTHONS];
static size_t num_installed_pythons = 0;
/* to hold SOFTWARE\Python\PythonCore\X.Y\InstallPath */
#define IP_BASE_SIZE 40
#define IP_SIZE (IP_BASE_SIZE + MAX_VERSION_SIZE)
#define CORE_PATH L"SOFTWARE\\Python\\PythonCore"
static wchar_t * location_checks[] = {
L"\\",
/*
L"\\PCBuild\\",
L"\\PCBuild\\amd64\\",
*/
NULL
};
static wchar_t *
skip_whitespace(wchar_t * p)
{
while (*p && isspace(*p))
++p;
return p;
}
/*
* This function is here to minimise Visual Studio
* warnings about security implications of getenv, and to
* treat blank values as if they are absent.
*/
static wchar_t * get_env(wchar_t * key)
{
wchar_t * result = _wgetenv(key);
if (result) {
result = skip_whitespace(result);
if (*result == L'\0')
result = NULL;
}
return result;
}
static FILE * log_fp = NULL;
static void
debug(wchar_t * format, ...)
{
va_list va;
if (log_fp != NULL) {
va_start(va, format);
vfwprintf_s(log_fp, format, va);
}
}
static void winerror(int rc, wchar_t * message, int size)
{
FormatMessageW(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, rc, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
message, size, NULL);
}
static INSTALLED_PYTHON *
find_existing_python(wchar_t * path)
{
INSTALLED_PYTHON * result = NULL;
size_t i;
INSTALLED_PYTHON * ip;
for (i = 0, ip = installed_pythons; i < num_installed_pythons; i++, ip++) {
if (_wcsicmp(path, ip->executable) == 0) {
result = ip;
break;
}
}
return result;
}
static void
locate_pythons_for_key(HKEY root, REGSAM flags)
{
HKEY core_root, ip_key;
LSTATUS status = RegOpenKeyExW(root, CORE_PATH, 0, flags, &core_root);
wchar_t message[MSGSIZE];
DWORD i;
size_t n;
BOOL ok;
DWORD type, data_size, attrs;
INSTALLED_PYTHON * ip, * pip;
wchar_t ip_path[IP_SIZE];
wchar_t * check;
wchar_t ** checkp;
wchar_t *key_name = (root == HKEY_LOCAL_MACHINE) ? L"HKLM" : L"HKCU";
if (status != ERROR_SUCCESS)
debug(L"locate_pythons_for_key: unable to open PythonCore key in %s\n",
key_name);
else {
ip = &installed_pythons[num_installed_pythons];
for (i = 0; num_installed_pythons < MAX_INSTALLED_PYTHONS; i++) {
status = RegEnumKeyW(core_root, i, ip->version, MAX_VERSION_SIZE);
if (status != ERROR_SUCCESS) {
if (status != ERROR_NO_MORE_ITEMS) {
/* unexpected error */
winerror(status, message, MSGSIZE);
debug(L"Can't enumerate registry key for version %s: %s\n",
ip->version, message);
}
break;
}
else {
_snwprintf_s(ip_path, IP_SIZE, _TRUNCATE,
L"%s\\%s\\InstallPath", CORE_PATH, ip->version);
status = RegOpenKeyExW(root, ip_path, 0, flags, &ip_key);
if (status != ERROR_SUCCESS) {
winerror(status, message, MSGSIZE);
// Note: 'message' already has a trailing \n
debug(L"%s\\%s: %s", key_name, ip_path, message);
continue;
}
data_size = sizeof(ip->executable) - 1;
status = RegQueryValueEx(ip_key, NULL, NULL, &type,
(LPBYTE) ip->executable, &data_size);
RegCloseKey(ip_key);
if (status != ERROR_SUCCESS) {
winerror(status, message, MSGSIZE);
debug(L"%s\\%s: %s\n", key_name, ip_path, message);
continue;
}
if (type == REG_SZ) {
data_size = data_size / sizeof(wchar_t) - 1; /* for NUL */
if (ip->executable[data_size - 1] == L'\\')
--data_size; /* reg value ended in a backslash */
/* ip->executable is data_size long */
for (checkp = location_checks; *checkp; ++checkp) {
check = *checkp;
_snwprintf_s(&ip->executable[data_size],
MAX_PATH - data_size,
MAX_PATH - data_size,
L"%s%s", check, PYTHON_EXECUTABLE);
attrs = GetFileAttributesW(ip->executable);
if (attrs == INVALID_FILE_ATTRIBUTES) {
winerror(GetLastError(), message, MSGSIZE);
debug(L"locate_pythons_for_key: %s: %s",
ip->executable, message);
}
else if (attrs & FILE_ATTRIBUTE_DIRECTORY) {
debug(L"locate_pythons_for_key: '%s' is a \
directory\n",
ip->executable, attrs);
}
else if (find_existing_python(ip->executable)) {
debug(L"locate_pythons_for_key: %s: already \
found: %s\n", ip->executable);
}
else {
/* check the executable type. */
ok = GetBinaryTypeW(ip->executable, &attrs);
if (!ok) {
debug(L"Failure getting binary type: %s\n",
ip->executable);
}
else {
if (attrs == SCS_64BIT_BINARY)
ip->bits = 64;
else if (attrs == SCS_32BIT_BINARY)
ip->bits = 32;
else
ip->bits = 0;
if (ip->bits == 0) {
debug(L"locate_pythons_for_key: %s: \
invalid binary type: %X\n",
ip->executable, attrs);
}
else {
if (wcschr(ip->executable, L' ') != NULL) {
/* has spaces, so quote */
n = wcslen(ip->executable);
memmove(&ip->executable[1],
ip->executable, n * sizeof(wchar_t));
ip->executable[0] = L'\"';
ip->executable[n + 1] = L'\"';
ip->executable[n + 2] = L'\0';
}
debug(L"locate_pythons_for_key: %s \
is a %dbit executable\n",
ip->executable, ip->bits);
++num_installed_pythons;
pip = ip++;
if (num_installed_pythons >=
MAX_INSTALLED_PYTHONS)
break;
/* Copy over the attributes for the next */
*ip = *pip;
}
}
}
}
}
}
}
RegCloseKey(core_root);
}
}
static int
compare_pythons(const void * p1, const void * p2)
{
INSTALLED_PYTHON * ip1 = (INSTALLED_PYTHON *) p1;
INSTALLED_PYTHON * ip2 = (INSTALLED_PYTHON *) p2;
/* note reverse sorting on version */
int result = wcscmp(ip2->version, ip1->version);
if (result == 0)
result = ip2->bits - ip1->bits; /* 64 before 32 */
return result;
}
static void
locate_all_pythons()
{
#if defined(_M_X64)
// If we are a 64bit process, first hit the 32bit keys.
debug(L"locating Pythons in 32bit registry\n");
locate_pythons_for_key(HKEY_CURRENT_USER, KEY_READ | KEY_WOW64_32KEY);
locate_pythons_for_key(HKEY_LOCAL_MACHINE, KEY_READ | KEY_WOW64_32KEY);
#else
// If we are a 32bit process on a 64bit Windows, first hit the 64bit keys.
BOOL f64 = FALSE;
if (IsWow64Process(GetCurrentProcess(), &f64) && f64) {
debug(L"locating Pythons in 64bit registry\n");
locate_pythons_for_key(HKEY_CURRENT_USER, KEY_READ | KEY_WOW64_64KEY);
locate_pythons_for_key(HKEY_LOCAL_MACHINE, KEY_READ | KEY_WOW64_64KEY);
}
#endif
// now hit the "native" key for this process bittedness.
debug(L"locating Pythons in native registry\n");
locate_pythons_for_key(HKEY_CURRENT_USER, KEY_READ);
locate_pythons_for_key(HKEY_LOCAL_MACHINE, KEY_READ);
qsort(installed_pythons, num_installed_pythons, sizeof(INSTALLED_PYTHON),
compare_pythons);
}
typedef struct {
wchar_t * path;
wchar_t * key;
wchar_t * value;
} REGISTRY_ENTRY;
static REGISTRY_ENTRY registry_entries[] = {
{ L".py", NULL, L"Python.File" },
{ L".pyc", NULL, L"Python.CompiledFile" },
{ L".pyo", NULL, L"Python.CompiledFile" },
{ L".pyw", NULL, L"Python.NoConFile" },
{ L"Python.CompiledFile", NULL, L"Compiled Python File" },
{ L"Python.CompiledFile\\DefaultIcon", NULL, L"pyc.ico" },
{ L"Python.CompiledFile\\shell\\open", NULL, L"Open" },
{ L"Python.CompiledFile\\shell\\open\\command", NULL, L"python.exe" },
{ L"Python.File", NULL, L"Python File" },
{ L"Python.File\\DefaultIcon", NULL, L"py.ico" },
{ L"Python.File\\shell\\open", NULL, L"Open" },
{ L"Python.File\\shell\\open\\command", NULL, L"python.exe" },
{ L"Python.NoConFile", NULL, L"Python File (no console)" },
{ L"Python.NoConFile\\DefaultIcon", NULL, L"py.ico" },
{ L"Python.NoConFile\\shell\\open", NULL, L"Open" },
{ L"Python.NoConFile\\shell\\open\\command", NULL, L"pythonw.exe" },
{ NULL }
};
static BOOL
do_association(INSTALLED_PYTHON * ip)
{
LONG rc;
BOOL result = TRUE;
REGISTRY_ENTRY * rp = registry_entries;
wchar_t value[MAX_PATH];
wchar_t root[MAX_PATH];
wchar_t message[MSGSIZE];
wchar_t * pvalue;
HKEY hKey;
DWORD len;
wcsncpy_s(root, MAX_PATH, ip->executable, _TRUNCATE);
pvalue = wcsrchr(root, '\\');
if (pvalue)
*pvalue = L'\0';
for (; rp->path; ++rp) {
if (wcsstr(rp->path, L"DefaultIcon")) {
pvalue = value;
_snwprintf_s(value, MAX_PATH, _TRUNCATE,
L"%s\\DLLs\\%s", root, rp->value);
}
else if (wcsstr(rp->path, L"open\\command")) {
pvalue = value;
_snwprintf_s(value, MAX_PATH, _TRUNCATE,
L"%s\\%s \"%%1\" %%*", root, rp->value);
}
else {
pvalue = rp->value;
}
/* use rp->path, rp->key, pvalue */
/* NOTE: size is in bytes */
len = (DWORD) ((1 + wcslen(pvalue)) * sizeof(wchar_t));
rc = RegOpenKeyEx(HKEY_CLASSES_ROOT, rp->path, 0, KEY_SET_VALUE, &hKey);
if (rc == ERROR_SUCCESS) {
rc = RegSetValueExW(hKey, rp->key, 0, REG_SZ, (LPBYTE) pvalue, len);
RegCloseKey(hKey);
}
if (rc != ERROR_SUCCESS) {
winerror(rc, message, MSGSIZE);
MessageBoxW(NULL, message, L"Unable to set file associations", MB_OK | MB_ICONSTOP);
result = FALSE;
break;
}
}
return result;
}
static BOOL
associations_exist()
{
BOOL result = FALSE;
REGISTRY_ENTRY * rp = registry_entries;
wchar_t buffer[MSGSIZE];
LONG csize = MSGSIZE * sizeof(wchar_t);
LONG rc;
/* Currently, if any is found, we assume they're all there. */
for (; rp->path; ++rp) {
LONG size = csize;
rc = RegQueryValueW(HKEY_CLASSES_ROOT, rp->path, buffer, &size);
if (rc == ERROR_SUCCESS) {
result = TRUE;
break;
}
}
return result;
}
/* --------------------------------------------------------------------*/
static BOOL CALLBACK
find_by_title(HWND hwnd, LPARAM lParam)
{
wchar_t buffer[MSGSIZE];
BOOL not_found = TRUE;
wchar_t * p = (wchar_t *) GetWindowTextW(hwnd, buffer, MSGSIZE);
if (wcsstr(buffer, L"Python Launcher") == buffer) {
not_found = FALSE;
*((HWND *) lParam) = hwnd;
}
return not_found;
}
static HWND
find_installer_window()
{
HWND result = NULL;
BOOL found = EnumWindows(find_by_title, (LPARAM) &result);
return result;
}
static void
centre_window_in_front(HWND hwnd)
{
HWND hwndParent;
RECT rect, rectP;
int width, height;
int screenwidth, screenheight;
int x, y;
//make the window relative to its parent
screenwidth = GetSystemMetrics(SM_CXSCREEN);
screenheight = GetSystemMetrics(SM_CYSCREEN);
hwndParent = GetParent(hwnd);
GetWindowRect(hwnd, &rect);
if (hwndParent) {
GetWindowRect(hwndParent, &rectP);
}
else {
rectP.left = rectP.top = 0;
rectP.right = screenwidth;
rectP.bottom = screenheight;
}
width = rect.right - rect.left;
height = rect.bottom - rect.top;
x = ((rectP.right-rectP.left) - width) / 2 + rectP.left;
y = ((rectP.bottom-rectP.top) - height) / 2 + rectP.top;
//make sure that the dialog box never moves outside of
//the screen
if (x < 0)
x = 0;
if (y < 0)
y = 0;
if (x + width > screenwidth)
x = screenwidth - width;
if (y + height > screenheight)
y = screenheight - height;
SetWindowPos(hwnd, HWND_TOPMOST, x, y, width, height, SWP_SHOWWINDOW);
}
static void
init_list(HWND hList)
{
LVCOLUMNW column;
LVITEMW item;
int colno = 0;
int width = 0;
int row;
size_t i;
INSTALLED_PYTHON * ip;
RECT r;
LPARAM style;
GetClientRect(hList, &r);
style = SendMessage(hList, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE,
0, style | LVS_EX_FULLROWSELECT);
/* First set up the columns */
memset(&column, 0, sizeof(column));
column.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
column.pszText = L"Version";
column.cx = 60;
width += column.cx;
SendMessage(hList, LVM_INSERTCOLUMN, colno++,(LPARAM) &column);
#if defined(_M_X64)
column.pszText = L"Bits";
column.cx = 40;
column.iSubItem = colno;
SendMessage(hList, LVM_INSERTCOLUMN, colno++,(LPARAM) &column);
width += column.cx;
#endif
column.pszText = L"Path";
column.cx = r.right - r.top - width;
column.iSubItem = colno;
SendMessage(hList, LVM_INSERTCOLUMN, colno++,(LPARAM) &column);
/* Then insert the rows */
memset(&item, 0, sizeof(item));
item.mask = LVIF_TEXT;
for (i = 0, ip = installed_pythons; i < num_installed_pythons; i++,ip++) {
item.iItem = (int) i;
item.iSubItem = 0;
item.pszText = ip->version;
colno = 0;
row = (int) SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM) &item);
#if defined(_M_X64)
item.iSubItem = ++colno;
item.pszText = (ip->bits == 64) ? L"64": L"32";
SendMessage(hList, LVM_SETITEM, row, (LPARAM) &item);
#endif
item.iSubItem = ++colno;
item.pszText = ip->executable;
SendMessage(hList, LVM_SETITEM, row, (LPARAM) &item);
}
}
/* ----------------------------------------------------------------*/
typedef int (__stdcall *MSGBOXWAPI)(IN HWND hWnd,
IN LPCWSTR lpText, IN LPCWSTR lpCaption,
IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);
int MessageBoxTimeoutW(IN HWND hWnd, IN LPCWSTR lpText,
IN LPCWSTR lpCaption, IN UINT uType,
IN WORD wLanguageId, IN DWORD dwMilliseconds);
#define MB_TIMEDOUT 32000
int MessageBoxTimeoutW(HWND hWnd, LPCWSTR lpText,
LPCWSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds)
{
static MSGBOXWAPI MsgBoxTOW = NULL;
if (!MsgBoxTOW) {
HMODULE hUser32 = GetModuleHandleW(L"user32.dll");
if (hUser32)
MsgBoxTOW = (MSGBOXWAPI)GetProcAddress(hUser32,
"MessageBoxTimeoutW");
else {
//stuff happened, add code to handle it here
//(possibly just call MessageBox())
return 0;
}
}
if (MsgBoxTOW)
return MsgBoxTOW(hWnd, lpText, lpCaption, uType, wLanguageId,
dwMilliseconds);
return 0;
}
/* ----------------------------------------------------------------*/
static INT_PTR CALLBACK
DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hList;
HWND hChild;
static int selected_index = -1;
WORD low = LOWORD(wParam);
wchar_t confirmation[MSGSIZE];
BOOL result = FALSE;
debug(L"DialogProc entry: 0x%02X\n", message);
switch (message) {
case WM_INITDIALOG:
hList = GetDlgItem(hDlg, IDC_LIST1);
init_list(hList);
SetFocus(hList);
result = TRUE;
break;
case WM_COMMAND:
if((low == IDOK) || (low == IDCANCEL)) {
HMODULE hUser32 = LoadLibraryW(L"user32.dll");
if (low == IDCANCEL)
wcsncpy_s(confirmation, MSGSIZE, L"No association was \
performed.", _TRUNCATE);
else {
if (selected_index < 0) {
/* should never happen */
wcsncpy_s(confirmation, MSGSIZE, L"The Python version to \
associate with couldn't be determined.", _TRUNCATE);
}
else {
INSTALLED_PYTHON * ip = &installed_pythons[selected_index];
/* Do the association and set the message. */
do_association(ip);
_snwprintf_s(confirmation, MSGSIZE, _TRUNCATE,
L"Associated Python files with the Python %s \
found at '%s'", ip->version, ip->executable);
}
}
if (hUser32) {
MessageBoxTimeoutW(hDlg,
confirmation,
L"Association Status",
MB_OK | MB_SETFOREGROUND |
MB_ICONINFORMATION,
0, 2000);
FreeLibrary(hUser32);
}
PostQuitMessage(0);
EndDialog(hDlg, 0);
result = TRUE;
}
break;
case WM_NOTIFY:
if (low == IDC_LIST1) {
NMLISTVIEW * p = (NMLISTVIEW *) lParam;
if ((p->hdr.code == LVN_ITEMCHANGED) &&
(p->uNewState & LVIS_SELECTED)) {
hChild = GetDlgItem(hDlg, IDOK);
selected_index = p->iItem;
EnableWindow(hChild, selected_index >= 0);
}
result = TRUE;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
result = TRUE;
break;
case WM_CLOSE:
DestroyWindow(hDlg);
result = TRUE;
break;
}
debug(L"DialogProc exit: %d\n", result);
return result;
}
int WINAPI wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine, int nShow)
{
MSG msg;
HWND hDialog = 0;
HICON hIcon;
HWND hParent;
int status;
DWORD dw;
INITCOMMONCONTROLSEX icx;
wchar_t * wp;
wp = get_env(L"PYASSOC_DEBUG");
if ((wp != NULL) && (*wp != L'\0')) {
fopen_s(&log_fp, "c:\\temp\\associator.log", "w");
}
if (!lpCmdLine) {
debug(L"No command line specified.\n");
return 0;
}
if (!wcsstr(lpCmdLine, L"nocheck") &&
associations_exist()) /* Could have been restored by uninstall. */
return 0;
locate_all_pythons();
if (num_installed_pythons == 0)
return 0;
debug(L"%d pythons found.\n", num_installed_pythons);
/*
* OK, now there's something to do.
*
* We need to find the installer window to be the parent of
* our dialog, otherwise our dialog will be behind it.
*
* First, initialize common controls. If you don't - on
* some machines it works fine, on others the dialog never
* appears!
*/
icx.dwSize = sizeof(icx);
icx.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icx);
hParent = find_installer_window();
debug(L"installer window: %X\n", hParent);
hDialog = CreateDialogW(hInstance, MAKEINTRESOURCE(DLG_MAIN), hParent,
DialogProc);
dw = GetLastError();
debug(L"dialog created: %X: error: %X\n", hDialog, dw);
if (!hDialog)
{
wchar_t buf [100];
_snwprintf_s(buf, 100, _TRUNCATE, L"Error 0x%x", GetLastError());
MessageBoxW(0, buf, L"CreateDialog", MB_ICONEXCLAMATION | MB_OK);
return 1;
}
centre_window_in_front(hDialog);
hIcon = LoadIcon( GetModuleHandle(NULL), MAKEINTRESOURCE(DLG_ICON));
if( hIcon )
{
SendMessage(hDialog, WM_SETICON, ICON_BIG, (LPARAM) hIcon);
SendMessage(hDialog, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
DestroyIcon(hIcon);
}
while ((status = GetMessage (& msg, 0, 0, 0)) != 0)
{
if (status == -1)
return -1;
if (!IsDialogMessage(hDialog, & msg))
{
TranslateMessage( & msg );
DispatchMessage( & msg );
}
}
return (int) msg.wParam;
}
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by main.rc
//
#define SW_HIDE 0
#define HIDE_WINDOW 0
#define WM_NULL 0x0000
#define WA_INACTIVE 0
#define HTNOWHERE 0
#define SMTO_NORMAL 0x0000
#define ICON_SMALL 0
#define SIZE_RESTORED 0
#define BN_CLICKED 0
#define BST_UNCHECKED 0x0000
#define HDS_HORZ 0x0000
#define TBSTYLE_BUTTON 0x0000
#define TBS_HORZ 0x0000
#define TBS_BOTTOM 0x0000
#define TBS_RIGHT 0x0000
#define LVS_ICON 0x0000
#define LVS_ALIGNTOP 0x0000
#define TCS_TABS 0x0000
#define TCS_SINGLELINE 0x0000
#define TCS_RIGHTJUSTIFY 0x0000
#define DTS_SHORTDATEFORMAT 0x0000
#define PGS_VERT 0x00000000
#define LANG_NEUTRAL 0x00
#define SUBLANG_NEUTRAL 0x00
#define SORT_DEFAULT 0x0
#define SORT_JAPANESE_XJIS 0x0
#define SORT_CHINESE_BIG5 0x0
#define SORT_CHINESE_PRCP 0x0
#define SORT_KOREAN_KSC 0x0
#define SORT_HUNGARIAN_DEFAULT 0x0
#define SORT_GEORGIAN_TRADITIONAL 0x0
#define _USE_DECLSPECS_FOR_SAL 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SHOW_OPENWINDOW 1
#define SW_PARENTCLOSING 1
#define VK_LBUTTON 0x01
#define WM_CREATE 0x0001
#define WA_ACTIVE 1
#define PWR_OK 1
#define PWR_SUSPENDREQUEST 1
#define NFR_ANSI 1
#define UIS_SET 1
#define UISF_HIDEFOCUS 0x1
#define XBUTTON1 0x0001
#define WMSZ_LEFT 1
#define HTCLIENT 1
#define SMTO_BLOCK 0x0001
#define MA_ACTIVATE 1
#define ICON_BIG 1
#define SIZE_MINIMIZED 1
#define MK_LBUTTON 0x0001
#define TME_HOVER 0x00000001
#define CS_VREDRAW 0x0001
#define CF_TEXT 1
#define SCF_ISSECURE 0x00000001
#define IDOK 1
#define BN_PAINT 1
#define BST_CHECKED 0x0001
#define TBSTYLE_SEP 0x0001
#define TTS_ALWAYSTIP 0x01
#define TBS_AUTOTICKS 0x0001
#define UDS_WRAP 0x0001
#define PBS_SMOOTH 0x01
#define LWS_TRANSPARENT 0x0001
#define LVS_REPORT 0x0001
#define TVS_HASBUTTONS 0x0001
#define TCS_SCROLLOPPOSITE 0x0001
#define ACS_CENTER 0x0001
#define MCS_DAYSTATE 0x0001
#define DTS_UPDOWN 0x0001
#define PGS_HORZ 0x00000001
#define NFS_EDIT 0x0001
#define BCSIF_GLYPH 0x0001
#define BCSS_NOSPLIT 0x0001
#define LANG_ARABIC 0x01
#define SUBLANG_DEFAULT 0x01
#define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01
#define SUBLANG_ALBANIAN_ALBANIA 0x01
#define SUBLANG_ALSATIAN_FRANCE 0x01
#define SUBLANG_AMHARIC_ETHIOPIA 0x01
#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
#define SUBLANG_ARMENIAN_ARMENIA 0x01
#define SUBLANG_ASSAMESE_INDIA 0x01
#define SUBLANG_AZERI_LATIN 0x01
#define SUBLANG_BASHKIR_RUSSIA 0x01
#define SUBLANG_BASQUE_BASQUE 0x01
#define SUBLANG_BELARUSIAN_BELARUS 0x01
#define SUBLANG_BENGALI_INDIA 0x01
#define SUBLANG_BRETON_FRANCE 0x01
#define SUBLANG_BULGARIAN_BULGARIA 0x01
#define SUBLANG_CATALAN_CATALAN 0x01
#define SUBLANG_CHINESE_TRADITIONAL 0x01
#define SUBLANG_CORSICAN_FRANCE 0x01
#define SUBLANG_CZECH_CZECH_REPUBLIC 0x01
#define SUBLANG_CROATIAN_CROATIA 0x01
#define SUBLANG_DANISH_DENMARK 0x01
#define SUBLANG_DARI_AFGHANISTAN 0x01
#define SUBLANG_DIVEHI_MALDIVES 0x01
#define SUBLANG_DUTCH 0x01
#define SUBLANG_ENGLISH_US 0x01
#define SUBLANG_ESTONIAN_ESTONIA 0x01
#define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01
#define SUBLANG_FILIPINO_PHILIPPINES 0x01
#define SUBLANG_FINNISH_FINLAND 0x01
#define SUBLANG_FRENCH 0x01
#define SUBLANG_FRISIAN_NETHERLANDS 0x01
#define SUBLANG_GALICIAN_GALICIAN 0x01
#define SUBLANG_GEORGIAN_GEORGIA 0x01
#define SUBLANG_GERMAN 0x01
#define SUBLANG_GREEK_GREECE 0x01
#define SUBLANG_GREENLANDIC_GREENLAND 0x01
#define SUBLANG_GUJARATI_INDIA 0x01
#define SUBLANG_HAUSA_NIGERIA_LATIN 0x01
#define SUBLANG_HEBREW_ISRAEL 0x01
#define SUBLANG_HINDI_INDIA 0x01
#define SUBLANG_HUNGARIAN_HUNGARY 0x01
#define SUBLANG_ICELANDIC_ICELAND 0x01
#define SUBLANG_IGBO_NIGERIA 0x01
#define SUBLANG_INDONESIAN_INDONESIA 0x01
#define SUBLANG_INUKTITUT_CANADA 0x01
#define SUBLANG_ITALIAN 0x01
#define SUBLANG_JAPANESE_JAPAN 0x01
#define SUBLANG_KANNADA_INDIA 0x01
#define SUBLANG_KAZAK_KAZAKHSTAN 0x01
#define SUBLANG_KHMER_CAMBODIA 0x01
#define SUBLANG_KICHE_GUATEMALA 0x01
#define SUBLANG_KINYARWANDA_RWANDA 0x01
#define SUBLANG_KONKANI_INDIA 0x01
#define SUBLANG_KOREAN 0x01
#define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01
#define SUBLANG_LAO_LAO 0x01
#define SUBLANG_LATVIAN_LATVIA 0x01
#define SUBLANG_LITHUANIAN 0x01
#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01
#define SUBLANG_MACEDONIAN_MACEDONIA 0x01
#define SUBLANG_MALAY_MALAYSIA 0x01
#define SUBLANG_MALAYALAM_INDIA 0x01
#define SUBLANG_MALTESE_MALTA 0x01
#define SUBLANG_MAORI_NEW_ZEALAND 0x01
#define SUBLANG_MAPUDUNGUN_CHILE 0x01
#define SUBLANG_MARATHI_INDIA 0x01
#define SUBLANG_MOHAWK_MOHAWK 0x01
#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
#define SUBLANG_NEPALI_NEPAL 0x01
#define SUBLANG_NORWEGIAN_BOKMAL 0x01
#define SUBLANG_OCCITAN_FRANCE 0x01
#define SUBLANG_ORIYA_INDIA 0x01
#define SUBLANG_PASHTO_AFGHANISTAN 0x01
#define SUBLANG_PERSIAN_IRAN 0x01
#define SUBLANG_POLISH_POLAND 0x01
#define SUBLANG_PORTUGUESE_BRAZILIAN 0x01
#define SUBLANG_PUNJABI_INDIA 0x01
#define SUBLANG_QUECHUA_BOLIVIA 0x01
#define SUBLANG_ROMANIAN_ROMANIA 0x01
#define SUBLANG_ROMANSH_SWITZERLAND 0x01
#define SUBLANG_RUSSIAN_RUSSIA 0x01
#define SUBLANG_SAMI_NORTHERN_NORWAY 0x01
#define SUBLANG_SANSKRIT_INDIA 0x01
#define SUBLANG_SERBIAN_CROATIA 0x01
#define SUBLANG_SINDHI_INDIA 0x01
#define SUBLANG_SINHALESE_SRI_LANKA 0x01
#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01
#define SUBLANG_SLOVAK_SLOVAKIA 0x01
#define SUBLANG_SLOVENIAN_SLOVENIA 0x01
#define SUBLANG_SPANISH 0x01
#define SUBLANG_SWAHILI_KENYA 0x01
#define SUBLANG_SWEDISH 0x01
#define SUBLANG_SYRIAC_SYRIA 0x01
#define SUBLANG_TAJIK_TAJIKISTAN 0x01
#define SUBLANG_TAMIL_INDIA 0x01
#define SUBLANG_TATAR_RUSSIA 0x01
#define SUBLANG_TELUGU_INDIA 0x01
#define SUBLANG_THAI_THAILAND 0x01
#define SUBLANG_TIBETAN_PRC 0x01
#define SUBLANG_TSWANA_SOUTH_AFRICA 0x01
#define SUBLANG_TURKISH_TURKEY 0x01
#define SUBLANG_TURKMEN_TURKMENISTAN 0x01
#define SUBLANG_UIGHUR_PRC 0x01
#define SUBLANG_UKRAINIAN_UKRAINE 0x01
#define SUBLANG_UPPER_SORBIAN_GERMANY 0x01
#define SUBLANG_URDU_PAKISTAN 0x01
#define SUBLANG_UZBEK_LATIN 0x01
#define SUBLANG_VIETNAMESE_VIETNAM 0x01
#define SUBLANG_WELSH_UNITED_KINGDOM 0x01
#define SUBLANG_WOLOF_SENEGAL 0x01
#define SUBLANG_XHOSA_SOUTH_AFRICA 0x01
#define SUBLANG_YAKUT_RUSSIA 0x01
#define SUBLANG_YI_PRC 0x01
#define SUBLANG_YORUBA_NIGERIA 0x01
#define SUBLANG_ZULU_SOUTH_AFRICA 0x01
#define SORT_INVARIANT_MATH 0x1
#define SORT_JAPANESE_UNICODE 0x1
#define SORT_CHINESE_UNICODE 0x1
#define SORT_KOREAN_UNICODE 0x1
#define SORT_GERMAN_PHONE_BOOK 0x1
#define SORT_HUNGARIAN_TECHNICAL 0x1
#define SORT_GEORGIAN_MODERN 0x1
#define VS_VERSION_INFO 1
#define VFFF_ISSHAREDFILE 0x0001
#define VFF_CURNEDEST 0x0001
#define VIFF_FORCEINSTALL 0x0001
#define SW_SHOWMINIMIZED 2
#define SHOW_ICONWINDOW 2
#define SW_OTHERZOOM 2
#define VK_RBUTTON 0x02
#define WM_DESTROY 0x0002
#define WA_CLICKACTIVE 2
#define PWR_SUSPENDRESUME 2
#define NFR_UNICODE 2
#define UIS_CLEAR 2
#define UISF_HIDEACCEL 0x2
#define XBUTTON2 0x0002
#define WMSZ_RIGHT 2
#define HTCAPTION 2
#define SMTO_ABORTIFHUNG 0x0002
#define MA_ACTIVATEANDEAT 2
#define ICON_SMALL2 2
#define SIZE_MAXIMIZED 2
#define MK_RBUTTON 0x0002
#define TME_LEAVE 0x00000002
#define CS_HREDRAW 0x0002
#define CF_BITMAP 2
#define IDCANCEL 2
#define BN_HILITE 2
#define BST_INDETERMINATE 0x0002
#define HDS_BUTTONS 0x0002
#define TBSTYLE_CHECK 0x0002
#define TTS_NOPREFIX 0x02
#define TBS_VERT 0x0002
#define UDS_SETBUDDYINT 0x0002
#define LWS_IGNORERETURN 0x0002
#define LVS_SMALLICON 0x0002
#define TVS_HASLINES 0x0002
#define TVS_EX_MULTISELECT 0x0002
#define TCS_BOTTOM 0x0002
#define TCS_RIGHT 0x0002
#define ACS_TRANSPARENT 0x0002
#define MCS_MULTISELECT 0x0002
#define DTS_SHOWNONE 0x0002
#define PGS_AUTOSCROLL 0x00000002
#define NFS_STATIC 0x0002
#define BCSIF_IMAGE 0x0002
#define BCSS_STRETCH 0x0002
#define LANG_BULGARIAN 0x02
#define SUBLANG_SYS_DEFAULT 0x02
#define SUBLANG_ARABIC_IRAQ 0x02
#define SUBLANG_AZERI_CYRILLIC 0x02
#define SUBLANG_BENGALI_BANGLADESH 0x02
#define SUBLANG_CHINESE_SIMPLIFIED 0x02
#define SUBLANG_DUTCH_BELGIAN 0x02
#define SUBLANG_ENGLISH_UK 0x02
#define SUBLANG_FRENCH_BELGIAN 0x02
#define SUBLANG_GERMAN_SWISS 0x02
#define SUBLANG_INUKTITUT_CANADA_LATIN 0x02
#define SUBLANG_IRISH_IRELAND 0x02
#define SUBLANG_ITALIAN_SWISS 0x02
#define SUBLANG_KASHMIRI_SASIA 0x02
#define SUBLANG_KASHMIRI_INDIA 0x02
#define SUBLANG_LOWER_SORBIAN_GERMANY 0x02
#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
#define SUBLANG_MONGOLIAN_PRC 0x02
#define SUBLANG_NEPALI_INDIA 0x02
#define SUBLANG_NORWEGIAN_NYNORSK 0x02
#define SUBLANG_PORTUGUESE 0x02
#define SUBLANG_QUECHUA_ECUADOR 0x02
#define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02
#define SUBLANG_SERBIAN_LATIN 0x02
#define SUBLANG_SINDHI_PAKISTAN 0x02
#define SUBLANG_SINDHI_AFGHANISTAN 0x02
#define SUBLANG_SPANISH_MEXICAN 0x02
#define SUBLANG_SWEDISH_FINLAND 0x02
#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
#define SUBLANG_TIGRIGNA_ERITREA 0x02
#define SUBLANG_URDU_INDIA 0x02
#define SUBLANG_UZBEK_CYRILLIC 0x02
#define SORT_CHINESE_PRC 0x2
#define VFF_FILEINUSE 0x0002
#define VIFF_DONTDELETEOLD 0x0002
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SHOW_FULLSCREEN 3
#define SW_PARENTOPENING 3
#define VK_CANCEL 0x03
#define WM_MOVE 0x0003
#define PWR_CRITICALRESUME 3
#define NF_QUERY 3
#define UIS_INITIALIZE 3
#define WMSZ_TOP 3
#define HTSYSMENU 3
#define MA_NOACTIVATE 3
#define SIZE_MAXSHOW 3
#define CF_METAFILEPICT 3
#define IDABORT 3
#define BN_UNHILITE 3
#define LVS_LIST 0x0003
#define LVS_TYPEMASK 0x0003
#define LANG_CATALAN 0x03
#define SUBLANG_CUSTOM_DEFAULT 0x03
#define SUBLANG_ARABIC_EGYPT 0x03
#define SUBLANG_CHINESE_HONGKONG 0x03
#define SUBLANG_ENGLISH_AUS 0x03
#define SUBLANG_FRENCH_CANADIAN 0x03
#define SUBLANG_GERMAN_AUSTRIAN 0x03
#define SUBLANG_QUECHUA_PERU 0x03
#define SUBLANG_SAMI_NORTHERN_FINLAND 0x03
#define SUBLANG_SERBIAN_CYRILLIC 0x03
#define SUBLANG_SPANISH_MODERN 0x03
#define SORT_CHINESE_BOPOMOFO 0x3
#define SW_SHOWNOACTIVATE 4
#define SHOW_OPENNOACTIVATE 4
#define SW_OTHERUNZOOM 4
#define VK_MBUTTON 0x04
#define NF_REQUERY 4
#define UISF_ACTIVE 0x4
#define WMSZ_TOPLEFT 4
#define HTGROWBOX 4
#define MA_NOACTIVATEANDEAT 4
#define SIZE_MAXHIDE 4
#define MK_SHIFT 0x0004
#define CF_SYLK 4
#define IDRETRY 4
#define BN_DISABLE 4
#define BST_PUSHED 0x0004
#define HDS_HOTTRACK 0x0004
#define TBSTYLE_GROUP 0x0004
#define TBS_TOP 0x0004
#define TBS_LEFT 0x0004
#define UDS_ALIGNRIGHT 0x0004
#define PBS_VERTICAL 0x04
#define LWS_NOPREFIX 0x0004
#define LVS_SINGLESEL 0x0004
#define TVS_LINESATROOT 0x0004
#define TVS_EX_DOUBLEBUFFER 0x0004
#define TCS_MULTISELECT 0x0004
#define ACS_AUTOPLAY 0x0004
#define MCS_WEEKNUMBERS 0x0004
#define DTS_LONGDATEFORMAT 0x0004
#define PGS_DRAGNDROP 0x00000004
#define NFS_LISTCOMBO 0x0004
#define BCSIF_STYLE 0x0004
#define BCSS_ALIGNLEFT 0x0004
#define LANG_CHINESE 0x04
#define LANG_CHINESE_SIMPLIFIED 0x04
#define SUBLANG_CUSTOM_UNSPECIFIED 0x04
#define SUBLANG_ARABIC_LIBYA 0x04
#define SUBLANG_CHINESE_SINGAPORE 0x04
#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
#define SUBLANG_ENGLISH_CAN 0x04
#define SUBLANG_FRENCH_SWISS 0x04
#define SUBLANG_GERMAN_LUXEMBOURG 0x04
#define SUBLANG_SAMI_LULE_NORWAY 0x04
#define SUBLANG_SPANISH_GUATEMALA 0x04
#define SORT_JAPANESE_RADICALSTROKE 0x4
#define VFF_BUFFTOOSMALL 0x0004
#define SW_SHOW 5
#define VK_XBUTTON1 0x05
#define WM_SIZE 0x0005
#define WMSZ_TOPRIGHT 5
#define HTMENU 5
#define CF_DIF 5
#define IDIGNORE 5
#define BN_DOUBLECLICKED 5
#define LANG_CZECH 0x05
#define SUBLANG_UI_CUSTOM_DEFAULT 0x05
#define SUBLANG_ARABIC_ALGERIA 0x05
#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
#define SUBLANG_CHINESE_MACAU 0x05
#define SUBLANG_ENGLISH_NZ 0x05
#define SUBLANG_FRENCH_LUXEMBOURG 0x05
#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
#define SUBLANG_SAMI_LULE_SWEDEN 0x05
#define SUBLANG_SPANISH_COSTA_RICA 0x05
#define SW_MINIMIZE 6
#define VK_XBUTTON2 0x06
#define WM_ACTIVATE 0x0006
#define WMSZ_BOTTOM 6
#define HTHSCROLL 6
#define CF_TIFF 6
#define IDYES 6
#define BN_SETFOCUS 6
#define LANG_DANISH 0x06
#define SUBLANG_ARABIC_MOROCCO 0x06
#define SUBLANG_ENGLISH_EIRE 0x06
#define SUBLANG_FRENCH_MONACO 0x06
#define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06
#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06
#define SUBLANG_SPANISH_PANAMA 0x06
#define SW_SHOWMINNOACTIVE 7
#define WM_SETFOCUS 0x0007
#define WMSZ_BOTTOMLEFT 7
#define HTVSCROLL 7
#define CF_OEMTEXT 7
#define IDNO 7
#define BN_KILLFOCUS 7
#define LANG_GERMAN 0x07
#define SUBLANG_ARABIC_TUNISIA 0x07
#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
#define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07
#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
#define SW_SHOWNA 8
#define VK_BACK 0x08
#define WM_KILLFOCUS 0x0008
#define WMSZ_BOTTOMRIGHT 8
#define HTMINBUTTON 8
#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
#define MK_CONTROL 0x0008
#define CS_DBLCLKS 0x0008
#define CF_DIB 8
#define IDCLOSE 8
#define BST_FOCUS 0x0008
#define HDS_HIDDEN 0x0008
#define TBSTYLE_DROPDOWN 0x0008
#define TBS_BOTH 0x0008
#define UDS_ALIGNLEFT 0x0008
#define PBS_MARQUEE 0x08
#define LWS_USEVISUALSTYLE 0x0008
#define LVS_SHOWSELALWAYS 0x0008
#define TVS_EDITLABELS 0x0008
#define TVS_EX_NOINDENTSTATE 0x0008
#define TCS_FLATBUTTONS 0x0008
#define ACS_TIMER 0x0008
#define MCS_NOTODAYCIRCLE 0x0008
#define NFS_BUTTON 0x0008
#define BCSIF_SIZE 0x0008
#define BCSS_IMAGE 0x0008
#define LANG_GREEK 0x08
#define SUBLANG_ARABIC_OMAN 0x08
#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
#define SUBLANG_ENGLISH_JAMAICA 0x08
#define SUBLANG_SAMI_SKOLT_FINLAND 0x08
#define SUBLANG_SPANISH_VENEZUELA 0x08
#define SW_RESTORE 9
#define VK_TAB 0x09
#define HTMAXBUTTON 9
#define CF_PALETTE 9
#define IDHELP 9
#define DTS_TIMEFORMAT 0x0009
#define LANG_ENGLISH 0x09
#define SUBLANG_ARABIC_YEMEN 0x09
#define SUBLANG_ENGLISH_CARIBBEAN 0x09
#define SUBLANG_SAMI_INARI_FINLAND 0x09
#define SUBLANG_SPANISH_COLOMBIA 0x09
#define SW_SHOWDEFAULT 10
#define WM_ENABLE 0x000A
#define HTLEFT 10
#define CF_PENDATA 10
#define IDTRYAGAIN 10
#define HELP_CONTEXTMENU 0x000a
#define LANG_SPANISH 0x0a
#define SUBLANG_ARABIC_SYRIA 0x0a
#define SUBLANG_ENGLISH_BELIZE 0x0a
#define SUBLANG_SPANISH_PERU 0x0a
#define SW_FORCEMINIMIZE 11
#define SW_MAX 11
#define WM_SETREDRAW 0x000B
#define HTRIGHT 11
#define CF_RIFF 11
#define IDCONTINUE 11
#define HELP_FINDER 0x000b
#define LANG_FINNISH 0x0b
#define SUBLANG_ARABIC_JORDAN 0x0b
#define SUBLANG_ENGLISH_TRINIDAD 0x0b
#define SUBLANG_SPANISH_ARGENTINA 0x0b
#define VK_CLEAR 0x0C
#define WM_SETTEXT 0x000C
#define HTTOP 12
#define CF_WAVE 12
#define HELP_WM_HELP 0x000c
#define DTS_SHORTDATECENTURYFORMAT 0x000C
#define LANG_FRENCH 0x0c
#define SUBLANG_ARABIC_LEBANON 0x0c
#define SUBLANG_ENGLISH_ZIMBABWE 0x0c
#define SUBLANG_SPANISH_ECUADOR 0x0c
#define VK_RETURN 0x0D
#define WM_GETTEXT 0x000D
#define HTTOPLEFT 13
#define CF_UNICODETEXT 13
#define HELP_SETPOPUP_POS 0x000d
#define LANG_HEBREW 0x0d
#define SUBLANG_ARABIC_KUWAIT 0x0d
#define SUBLANG_ENGLISH_PHILIPPINES 0x0d
#define SUBLANG_SPANISH_CHILE 0x0d
#define WM_GETTEXTLENGTH 0x000E
#define HTTOPRIGHT 14
#define CF_ENHMETAFILE 14
#define LANG_HUNGARIAN 0x0e
#define SUBLANG_ARABIC_UAE 0x0e
#define SUBLANG_SPANISH_URUGUAY 0x0e
#define WM_PAINT 0x000F
#define HTBOTTOM 15
#define CF_HDROP 15
#define LANG_ICELANDIC 0x0f
#define SUBLANG_ARABIC_BAHRAIN 0x0f
#define SUBLANG_SPANISH_PARAGUAY 0x0f
#define VK_SHIFT 0x10
#define WM_CLOSE 0x0010
#define HTBOTTOMLEFT 16
#define WVR_ALIGNTOP 0x0010
#define MK_MBUTTON 0x0010
#define TME_NONCLIENT 0x00000010
#define CF_LOCALE 16
#define HELP_TCARD_DATA 0x0010
#define TBSTYLE_AUTOSIZE 0x0010
#define TTS_NOANIMATE 0x10
#define TBS_NOTICKS 0x0010
#define UDS_AUTOBUDDY 0x0010
#define PBS_SMOOTHREVERSE 0x10
#define LWS_USECUSTOMTEXT 0x0010
#define LVS_SORTASCENDING 0x0010
#define TVS_DISABLEDRAGDROP 0x0010
#define TVS_EX_RICHTOOLTIP 0x0010
#define TCS_FORCEICONLEFT 0x0010
#define MCS_NOTODAY 0x0010
#define DTS_APPCANPARSE 0x0010
#define NFS_ALL 0x0010
#define LANG_ITALIAN 0x10
#define SUBLANG_ARABIC_QATAR 0x10
#define SUBLANG_ENGLISH_INDIA 0x10
#define SUBLANG_SPANISH_BOLIVIA 0x10
#define VK_CONTROL 0x11
#define WM_QUERYENDSESSION 0x0011
#define HTBOTTOMRIGHT 17
#define CF_DIBV5 17
#define HELP_TCARD_OTHER_CALLER 0x0011
#define LANG_JAPANESE 0x11
#define SUBLANG_ENGLISH_MALAYSIA 0x11
#define SUBLANG_SPANISH_EL_SALVADOR 0x11
#define VK_MENU 0x12
#define WM_QUIT 0x0012
#define HTBORDER 18
#define CF_MAX 18
#define LANG_KOREAN 0x12
#define SUBLANG_ENGLISH_SINGAPORE 0x12
#define SUBLANG_SPANISH_HONDURAS 0x12
#define VK_PAUSE 0x13
#define WM_QUERYOPEN 0x0013
#define HTOBJECT 19
#define LANG_DUTCH 0x13
#define SUBLANG_SPANISH_NICARAGUA 0x13
#define VK_CAPITAL 0x14
#define WM_ERASEBKGND 0x0014
#define HTCLOSE 20
#define LANG_NORWEGIAN 0x14
#define SUBLANG_SPANISH_PUERTO_RICO 0x14
#define VK_KANA 0x15
#define VK_HANGEUL 0x15
#define VK_HANGUL 0x15
#define WM_SYSCOLORCHANGE 0x0015
#define HTHELP 21
#define LANG_POLISH 0x15
#define SUBLANG_SPANISH_US 0x15
#define WM_ENDSESSION 0x0016
#define LANG_PORTUGUESE 0x16
#define VK_JUNJA 0x17
#define LANG_ROMANSH 0x17
#define VK_FINAL 0x18
#define WM_SHOWWINDOW 0x0018
#define LANG_ROMANIAN 0x18
#define VK_HANJA 0x19
#define VK_KANJI 0x19
#define LANG_RUSSIAN 0x19
#define WM_WININICHANGE 0x001A
#define LANG_BOSNIAN 0x1a
#define LANG_CROATIAN 0x1a
#define LANG_SERBIAN 0x1a
#define VK_ESCAPE 0x1B
#define WM_DEVMODECHANGE 0x001B
#define LANG_SLOVAK 0x1b
#define VK_CONVERT 0x1C
#define WM_ACTIVATEAPP 0x001C
#define LANG_ALBANIAN 0x1c
#define VK_NONCONVERT 0x1D
#define WM_FONTCHANGE 0x001D
#define LANG_SWEDISH 0x1d
#define VK_ACCEPT 0x1E
#define WM_TIMECHANGE 0x001E
#define LANG_THAI 0x1e
#define VK_MODECHANGE 0x1F
#define WM_CANCELMODE 0x001F
#define LANG_TURKISH 0x1f
#define VK_SPACE 0x20
#define WM_SETCURSOR 0x0020
#define SMTO_ERRORONEXIT 0x0020
#define WVR_ALIGNLEFT 0x0020
#define MK_XBUTTON1 0x0020
#define CS_OWNDC 0x0020
#define TBSTYLE_NOPREFIX 0x0020
#define TTS_NOFADE 0x20
#define TBS_ENABLESELRANGE 0x0020
#define UDS_ARROWKEYS 0x0020
#define LWS_RIGHT 0x0020
#define LVS_SORTDESCENDING 0x0020
#define TVS_SHOWSELALWAYS 0x0020
#define TVS_EX_AUTOHSCROLL 0x0020
#define TCS_FORCELABELLEFT 0x0020
#define DTS_RIGHTALIGN 0x0020
#define NFS_USEFONTASSOC 0x0020
#define LANG_URDU 0x20
#define VK_PRIOR 0x21
#define WM_MOUSEACTIVATE 0x0021
#define LANG_INDONESIAN 0x21
#define VK_NEXT 0x22
#define WM_CHILDACTIVATE 0x0022
#define LANG_UKRAINIAN 0x22
#define VK_END 0x23
#define WM_QUEUESYNC 0x0023
#define LANG_BELARUSIAN 0x23
#define VK_HOME 0x24
#define WM_GETMINMAXINFO 0x0024
#define LANG_SLOVENIAN 0x24
#define VK_LEFT 0x25
#define LANG_ESTONIAN 0x25
#define VK_UP 0x26
#define WM_PAINTICON 0x0026
#define LANG_LATVIAN 0x26
#define VK_RIGHT 0x27
#define WM_ICONERASEBKGND 0x0027
#define LANG_LITHUANIAN 0x27
#define VK_DOWN 0x28
#define WM_NEXTDLGCTL 0x0028
#define LANG_TAJIK 0x28
#define VK_SELECT 0x29
#define LANG_FARSI 0x29
#define LANG_PERSIAN 0x29
#define VK_PRINT 0x2A
#define WM_SPOOLERSTATUS 0x002A
#define LANG_VIETNAMESE 0x2a
#define VK_EXECUTE 0x2B
#define WM_DRAWITEM 0x002B
#define LANG_ARMENIAN 0x2b
#define VK_SNAPSHOT 0x2C
#define WM_MEASUREITEM 0x002C
#define LANG_AZERI 0x2c
#define VK_INSERT 0x2D
#define WM_DELETEITEM 0x002D
#define LANG_BASQUE 0x2d
#define VK_DELETE 0x2E
#define WM_VKEYTOITEM 0x002E
#define LANG_LOWER_SORBIAN 0x2e
#define LANG_UPPER_SORBIAN 0x2e
#define VK_HELP 0x2F
#define WM_CHARTOITEM 0x002F
#define LANG_MACEDONIAN 0x2f
#define WM_SETFONT 0x0030
#define WM_GETFONT 0x0031
#define WM_SETHOTKEY 0x0032
#define LANG_TSWANA 0x32
#define WM_GETHOTKEY 0x0033
#define LANG_XHOSA 0x34
#define LANG_ZULU 0x35
#define LANG_AFRIKAANS 0x36
#define WM_QUERYDRAGICON 0x0037
#define LANG_GEORGIAN 0x37
#define LANG_FAEROESE 0x38
#define WM_COMPAREITEM 0x0039
#define LANG_HINDI 0x39
#define LANG_MALTESE 0x3a
#define LANG_SAMI 0x3b
#define LANG_IRISH 0x3c
#define WM_GETOBJECT 0x003D
#define LANG_MALAY 0x3e
#define LANG_KAZAK 0x3f
#define WVR_ALIGNBOTTOM 0x0040
#define MK_XBUTTON2 0x0040
#define CS_CLASSDC 0x0040
#define HDS_DRAGDROP 0x0040
#define BTNS_SHOWTEXT 0x0040
#define TTS_BALLOON 0x40
#define TBS_FIXEDLENGTH 0x0040
#define UDS_HORZ 0x0040
#define LVS_SHAREIMAGELISTS 0x0040
#define TVS_RTLREADING 0x0040
#define TVS_EX_FADEINOUTEXPANDOS 0x0040
#define TCS_HOTTRACK 0x0040
#define MCS_NOTRAILINGDATES 0x0040
#define LANG_KYRGYZ 0x40
#define WM_COMPACTING 0x0041
#define LANG_SWAHILI 0x41
#define LANG_TURKMEN 0x42
#define LANG_UZBEK 0x43
#define WM_COMMNOTIFY 0x0044
#define LANG_TATAR 0x44
#define LANG_BENGALI 0x45
#define WM_WINDOWPOSCHANGING 0x0046
#define LANG_PUNJABI 0x46
#define WM_WINDOWPOSCHANGED 0x0047
#define LANG_GUJARATI 0x47
#define WM_POWER 0x0048
#define LANG_ORIYA 0x48
#define LANG_TAMIL 0x49
#define WM_COPYDATA 0x004A
#define LANG_TELUGU 0x4a
#define WM_CANCELJOURNAL 0x004B
#define LANG_KANNADA 0x4b
#define LANG_MALAYALAM 0x4c
#define LANG_ASSAMESE 0x4d
#define WM_NOTIFY 0x004E
#define LANG_MARATHI 0x4e
#define LANG_SANSKRIT 0x4f
#define WM_INPUTLANGCHANGEREQUEST 0x0050
#define LANG_MONGOLIAN 0x50
#define WM_INPUTLANGCHANGE 0x0051
#define LANG_TIBETAN 0x51
#define WM_TCARD 0x0052
#define LANG_WELSH 0x52
#define WM_HELP 0x0053
#define LANG_KHMER 0x53
#define WM_USERCHANGED 0x0054
#define LANG_LAO 0x54
#define WM_NOTIFYFORMAT 0x0055
#define LANG_GALICIAN 0x56
#define LANG_KONKANI 0x57
#define LANG_MANIPURI 0x58
#define LANG_SINDHI 0x59
#define LANG_SYRIAC 0x5a
#define VK_LWIN 0x5B
#define LANG_SINHALESE 0x5b
#define VK_RWIN 0x5C
#define VK_APPS 0x5D
#define LANG_INUKTITUT 0x5d
#define LANG_AMHARIC 0x5e
#define VK_SLEEP 0x5F
#define LANG_TAMAZIGHT 0x5f
#define VK_NUMPAD0 0x60
#define LANG_KASHMIRI 0x60
#define VK_NUMPAD1 0x61
#define LANG_NEPALI 0x61
#define VK_NUMPAD2 0x62
#define LANG_FRISIAN 0x62
#define VK_NUMPAD3 0x63
#define LANG_PASHTO 0x63
#define VK_NUMPAD4 0x64
#define LANG_FILIPINO 0x64
#define VS_USER_DEFINED 100
#define VK_NUMPAD5 0x65
#define LANG_DIVEHI 0x65
#define VK_NUMPAD6 0x66
#define VK_NUMPAD7 0x67
#define VK_NUMPAD8 0x68
#define LANG_HAUSA 0x68
#define VK_NUMPAD9 0x69
#define VK_MULTIPLY 0x6A
#define LANG_YORUBA 0x6a
#define VK_ADD 0x6B
#define LANG_QUECHUA 0x6b
#define VK_SEPARATOR 0x6C
#define LANG_SOTHO 0x6c
#define VK_SUBTRACT 0x6D
#define LANG_BASHKIR 0x6d
#define VK_DECIMAL 0x6E
#define LANG_LUXEMBOURGISH 0x6e
#define VK_DIVIDE 0x6F
#define LANG_GREENLANDIC 0x6f
#define VK_F1 0x70
#define LANG_IGBO 0x70
#define VK_F2 0x71
#define VK_F3 0x72
#define VK_F4 0x73
#define LANG_TIGRIGNA 0x73
#define VK_F5 0x74
#define VK_F6 0x75
#define VK_F7 0x76
#define VK_F8 0x77
#define VK_F9 0x78
#define WHEEL_DELTA 120
#define LANG_YI 0x78
#define VK_F10 0x79
#define VK_F11 0x7A
#define LANG_MAPUDUNGUN 0x7a
#define VK_F12 0x7B
#define WM_CONTEXTMENU 0x007B
#define VK_F13 0x7C
#define WM_STYLECHANGING 0x007C
#define LANG_MOHAWK 0x7c
#define VK_F14 0x7D
#define WM_STYLECHANGED 0x007D
#define VK_F15 0x7E
#define WM_DISPLAYCHANGE 0x007E
#define LANG_BRETON 0x7e
#define VK_F16 0x7F
#define WM_GETICON 0x007F
#define LANG_INVARIANT 0x7f
#define VK_F17 0x80
#define WM_SETICON 0x0080
#define WVR_ALIGNRIGHT 0x0080
#define CS_PARENTDC 0x0080
#define CF_OWNERDISPLAY 0x0080
#define HDS_FULLDRAG 0x0080
#define BTNS_WHOLEDROPDOWN 0x0080
#define TTS_CLOSE 0x80
#define TBS_NOTHUMB 0x0080
#define UDS_NOTHOUSANDS 0x0080
#define LVS_NOLABELWRAP 0x0080
#define TVS_NOTOOLTIPS 0x0080
#define TVS_EX_PARTIALCHECKBOXES 0x0080
#define TCS_VERTICAL 0x0080
#define MCS_SHORTDAYSOFWEEK 0x0080
#define LANG_UIGHUR 0x80
#define VK_F18 0x81
#define WM_NCCREATE 0x0081
#define CF_DSPTEXT 0x0081
#define LANG_MAORI 0x81
#define VK_F19 0x82
#define WM_NCDESTROY 0x0082
#define CF_DSPBITMAP 0x0082
#define LANG_OCCITAN 0x82
#define VK_F20 0x83
#define WM_NCCALCSIZE 0x0083
#define CF_DSPMETAFILEPICT 0x0083
#define LANG_CORSICAN 0x83
#define VK_F21 0x84
#define WM_NCHITTEST 0x0084
#define LANG_ALSATIAN 0x84
#define VK_F22 0x85
#define WM_NCPAINT 0x0085
#define LANG_YAKUT 0x85
#define VK_F23 0x86
#define WM_NCACTIVATE 0x0086
#define LANG_KICHE 0x86
#define VK_F24 0x87
#define WM_GETDLGCODE 0x0087
#define LANG_KINYARWANDA 0x87
#define WM_SYNCPAINT 0x0088
#define LANG_WOLOF 0x88
#define LANG_DARI 0x8c
#define CF_DSPENHMETAFILE 0x008E
#define VK_NUMLOCK 0x90
#define VK_SCROLL 0x91
#define VK_OEM_NEC_EQUAL 0x92
#define VK_OEM_FJ_JISHO 0x92
#define VK_OEM_FJ_MASSHOU 0x93
#define VK_OEM_FJ_TOUROKU 0x94
#define VK_OEM_FJ_LOYA 0x95
#define VK_OEM_FJ_ROYA 0x96
#define VK_LSHIFT 0xA0
#define WM_NCMOUSEMOVE 0x00A0
#define VK_RSHIFT 0xA1
#define WM_NCLBUTTONDOWN 0x00A1
#define VK_LCONTROL 0xA2
#define WM_NCLBUTTONUP 0x00A2
#define VK_RCONTROL 0xA3
#define WM_NCLBUTTONDBLCLK 0x00A3
#define VK_LMENU 0xA4
#define WM_NCRBUTTONDOWN 0x00A4
#define VK_RMENU 0xA5
#define WM_NCRBUTTONUP 0x00A5
#define VK_BROWSER_BACK 0xA6
#define WM_NCRBUTTONDBLCLK 0x00A6
#define VK_BROWSER_FORWARD 0xA7
#define WM_NCMBUTTONDOWN 0x00A7
#define VK_BROWSER_REFRESH 0xA8
#define WM_NCMBUTTONUP 0x00A8
#define VK_BROWSER_STOP 0xA9
#define WM_NCMBUTTONDBLCLK 0x00A9
#define VK_BROWSER_SEARCH 0xAA
#define VK_BROWSER_FAVORITES 0xAB
#define WM_NCXBUTTONDOWN 0x00AB
#define VK_BROWSER_HOME 0xAC
#define WM_NCXBUTTONUP 0x00AC
#define VK_VOLUME_MUTE 0xAD
#define WM_NCXBUTTONDBLCLK 0x00AD
#define VK_VOLUME_DOWN 0xAE
#define VK_VOLUME_UP 0xAF
#define VK_MEDIA_NEXT_TRACK 0xB0
#define EM_GETSEL 0x00B0
#define VK_MEDIA_PREV_TRACK 0xB1
#define EM_SETSEL 0x00B1
#define VK_MEDIA_STOP 0xB2
#define EM_GETRECT 0x00B2
#define VK_MEDIA_PLAY_PAUSE 0xB3
#define EM_SETRECT 0x00B3
#define VK_LAUNCH_MAIL 0xB4
#define EM_SETRECTNP 0x00B4
#define VK_LAUNCH_MEDIA_SELECT 0xB5
#define EM_SCROLL 0x00B5
#define VK_LAUNCH_APP1 0xB6
#define EM_LINESCROLL 0x00B6
#define VK_LAUNCH_APP2 0xB7
#define EM_SCROLLCARET 0x00B7
#define EM_GETMODIFY 0x00B8
#define EM_SETMODIFY 0x00B9
#define VK_OEM_1 0xBA
#define EM_GETLINECOUNT 0x00BA
#define VK_OEM_PLUS 0xBB
#define EM_LINEINDEX 0x00BB
#define VK_OEM_COMMA 0xBC
#define EM_SETHANDLE 0x00BC
#define VK_OEM_MINUS 0xBD
#define EM_GETHANDLE 0x00BD
#define VK_OEM_PERIOD 0xBE
#define EM_GETTHUMB 0x00BE
#define VK_OEM_2 0xBF
#define VK_OEM_3 0xC0
#define EM_LINELENGTH 0x00C1
#define EM_REPLACESEL 0x00C2
#define EM_GETLINE 0x00C4
#define EM_LIMITTEXT 0x00C5
#define EM_CANUNDO 0x00C6
#define EM_UNDO 0x00C7
#define EM_FMTLINES 0x00C8
#define DLG_MAIN 200
#define EM_LINEFROMCHAR 0x00C9
#define EM_SETTABSTOPS 0x00CB
#define EM_SETPASSWORDCHAR 0x00CC
#define EM_EMPTYUNDOBUFFER 0x00CD
#define EM_GETFIRSTVISIBLELINE 0x00CE
#define EM_SETREADONLY 0x00CF
#define EM_SETWORDBREAKPROC 0x00D0
#define EM_GETWORDBREAKPROC 0x00D1
#define EM_GETPASSWORDCHAR 0x00D2
#define EM_SETMARGINS 0x00D3
#define EM_GETMARGINS 0x00D4
#define EM_GETLIMITTEXT 0x00D5
#define EM_POSFROMCHAR 0x00D6
#define EM_CHARFROMPOS 0x00D7
#define EM_SETIMESTATUS 0x00D8
#define EM_GETIMESTATUS 0x00D9
#define VK_OEM_4 0xDB
#define VK_OEM_5 0xDC
#define VK_OEM_6 0xDD
#define VK_OEM_7 0xDE
#define VK_OEM_8 0xDF
#define VK_OEM_AX 0xE1
#define VK_OEM_102 0xE2
#define VK_ICO_HELP 0xE3
#define VK_ICO_00 0xE4
#define VK_PROCESSKEY 0xE5
#define VK_ICO_CLEAR 0xE6
#define VK_PACKET 0xE7
#define VK_OEM_RESET 0xE9
#define VK_OEM_JUMP 0xEA
#define VK_OEM_PA1 0xEB
#define VK_OEM_PA2 0xEC
#define VK_OEM_PA3 0xED
#define VK_OEM_WSCTRL 0xEE
#define VK_OEM_CUSEL 0xEF
#define VK_OEM_ATTN 0xF0
#define BM_GETCHECK 0x00F0
#define VK_OEM_FINISH 0xF1
#define BM_SETCHECK 0x00F1
#define VK_OEM_COPY 0xF2
#define BM_GETSTATE 0x00F2
#define VK_OEM_AUTO 0xF3
#define BM_SETSTATE 0x00F3
#define VK_OEM_ENLW 0xF4
#define BM_SETSTYLE 0x00F4
#define VK_OEM_BACKTAB 0xF5
#define BM_CLICK 0x00F5
#define VK_ATTN 0xF6
#define BM_GETIMAGE 0x00F6
#define VK_CRSEL 0xF7
#define BM_SETIMAGE 0x00F7
#define VK_EXSEL 0xF8
#define BM_SETDONTCLICK 0x00F8
#define VK_EREOF 0xF9
#define VK_PLAY 0xFA
#define VK_ZOOM 0xFB
#define VK_NONAME 0xFC
#define VK_PA1 0xFD
#define VK_OEM_CLEAR 0xFE
#define WM_INPUT_DEVICE_CHANGE 0x00FE
#define SUBVERSION_MASK 0x000000FF
#define WM_INPUT 0x00FF
#define WM_KEYFIRST 0x0100
#define WM_KEYDOWN 0x0100
#define WVR_HREDRAW 0x0100
#define HDS_FILTERBAR 0x0100
#define TBSTYLE_TOOLTIPS 0x0100
#define RBS_TOOLTIPS 0x00000100
#define TTS_USEVISUALSTYLE 0x100
#define SBARS_SIZEGRIP 0x0100
#define TBS_TOOLTIPS 0x0100
#define UDS_HOTTRACK 0x0100
#define LVS_AUTOARRANGE 0x0100
#define TVS_CHECKBOXES 0x0100
#define TVS_EX_EXCLUSIONCHECKBOXES 0x0100
#define TCS_BUTTONS 0x0100
#define MCS_NOSELCHANGEONNAV 0x0100
#define WM_KEYUP 0x0101
#define WM_CHAR 0x0102
#define WM_DEADCHAR 0x0103
#define WM_SYSKEYDOWN 0x0104
#define WM_SYSKEYUP 0x0105
#define WM_SYSCHAR 0x0106
#define WM_SYSDEADCHAR 0x0107
#define WM_UNICHAR 0x0109
#define WM_IME_STARTCOMPOSITION 0x010D
#define WM_IME_ENDCOMPOSITION 0x010E
#define WM_IME_COMPOSITION 0x010F
#define WM_IME_KEYLAST 0x010F
#define WM_INITDIALOG 0x0110
#define WM_COMMAND 0x0111
#define WM_SYSCOMMAND 0x0112
#define WM_TIMER 0x0113
#define WM_HSCROLL 0x0114
#define WM_VSCROLL 0x0115
#define WM_INITMENU 0x0116
#define WM_INITMENUPOPUP 0x0117
#define WM_MENUSELECT 0x011F
#define WM_MENUCHAR 0x0120
#define WM_ENTERIDLE 0x0121
#define WM_MENURBUTTONUP 0x0122
#define WM_MENUDRAG 0x0123
#define WM_MENUGETOBJECT 0x0124
#define WM_UNINITMENUPOPUP 0x0125
#define WM_MENUCOMMAND 0x0126
#define WM_CHANGEUISTATE 0x0127
#define WM_UPDATEUISTATE 0x0128
#define WM_QUERYUISTATE 0x0129
#define DLG_ICON 300
#define WM_CTLCOLORMSGBOX 0x0132
#define WM_CTLCOLOREDIT 0x0133
#define WM_CTLCOLORLISTBOX 0x0134
#define WM_CTLCOLORBTN 0x0135
#define WM_CTLCOLORDLG 0x0136
#define WM_CTLCOLORSCROLLBAR 0x0137
#define WM_CTLCOLORSTATIC 0x0138
#define MN_GETHMENU 0x01E1
#define _WIN32_IE_IE20 0x0200
#define WM_MOUSEFIRST 0x0200
#define WM_MOUSEMOVE 0x0200
#define WVR_VREDRAW 0x0200
#define CS_NOCLOSE 0x0200
#define CF_PRIVATEFIRST 0x0200
#define HDS_FLAT 0x0200
#define TBSTYLE_WRAPABLE 0x0200
#define RBS_VARHEIGHT 0x00000200
#define TBS_REVERSED 0x0200
#define LVS_EDITLABELS 0x0200
#define TVS_TRACKSELECT 0x0200
#define TVS_EX_DIMMEDCHECKBOXES 0x0200
#define TCS_MULTILINE 0x0200
#define WM_LBUTTONDOWN 0x0201
#define WM_LBUTTONUP 0x0202
#define WM_LBUTTONDBLCLK 0x0203
#define WM_RBUTTONDOWN 0x0204
#define WM_RBUTTONUP 0x0205
#define WM_RBUTTONDBLCLK 0x0206
#define WM_MBUTTONDOWN 0x0207
#define WM_MBUTTONUP 0x0208
#define WM_MBUTTONDBLCLK 0x0209
#define WM_MOUSEWHEEL 0x020A
#define WM_XBUTTONDOWN 0x020B
#define WM_XBUTTONUP 0x020C
#define WM_XBUTTONDBLCLK 0x020D
#define WM_MOUSEHWHEEL 0x020E
#define WM_PARENTNOTIFY 0x0210
#define WM_ENTERMENULOOP 0x0211
#define WM_EXITMENULOOP 0x0212
#define WM_NEXTMENU 0x0213
#define WM_SIZING 0x0214
#define WM_CAPTURECHANGED 0x0215
#define WM_MOVING 0x0216
#define WM_POWERBROADCAST 0x0218
#define WM_DEVICECHANGE 0x0219
#define WM_MDICREATE 0x0220
#define WM_MDIDESTROY 0x0221
#define WM_MDIACTIVATE 0x0222
#define WM_MDIRESTORE 0x0223
#define WM_MDINEXT 0x0224
#define WM_MDIMAXIMIZE 0x0225
#define WM_MDITILE 0x0226
#define WM_MDICASCADE 0x0227
#define WM_MDIICONARRANGE 0x0228
#define WM_MDIGETACTIVE 0x0229
#define WM_MDISETMENU 0x0230
#define WM_ENTERSIZEMOVE 0x0231
#define WM_EXITSIZEMOVE 0x0232
#define WM_DROPFILES 0x0233
#define WM_MDIREFRESHMENU 0x0234
#define WM_IME_SETCONTEXT 0x0281
#define WM_IME_NOTIFY 0x0282
#define WM_IME_CONTROL 0x0283
#define WM_IME_COMPOSITIONFULL 0x0284
#define WM_IME_SELECT 0x0285
#define WM_IME_CHAR 0x0286
#define WM_IME_REQUEST 0x0288
#define WM_IME_KEYDOWN 0x0290
#define WM_IME_KEYUP 0x0291
#define WM_NCMOUSEHOVER 0x02A0
#define WM_MOUSEHOVER 0x02A1
#define WM_NCMOUSELEAVE 0x02A2
#define WM_MOUSELEAVE 0x02A3
#define WM_WTSSESSION_CHANGE 0x02B1
#define WM_TABLET_FIRST 0x02c0
#define WM_TABLET_LAST 0x02df
#define CF_PRIVATELAST 0x02FF
#define _WIN32_IE_IE30 0x0300
#define WM_CUT 0x0300
#define CF_GDIOBJFIRST 0x0300
#define WM_COPY 0x0301
#define _WIN32_IE_IE302 0x0302
#define WM_PASTE 0x0302
#define WM_CLEAR 0x0303
#define WM_UNDO 0x0304
#define WM_RENDERFORMAT 0x0305
#define WM_RENDERALLFORMATS 0x0306
#define WM_DESTROYCLIPBOARD 0x0307
#define WM_DRAWCLIPBOARD 0x0308
#define WM_PAINTCLIPBOARD 0x0309
#define WM_VSCROLLCLIPBOARD 0x030A
#define WM_SIZECLIPBOARD 0x030B
#define WM_ASKCBFORMATNAME 0x030C
#define WM_CHANGECBCHAIN 0x030D
#define WM_HSCROLLCLIPBOARD 0x030E
#define WM_QUERYNEWPALETTE 0x030F
#define WM_PALETTEISCHANGING 0x0310
#define WM_PALETTECHANGED 0x0311
#define WM_HOTKEY 0x0312
#define WM_PRINT 0x0317
#define WM_PRINTCLIENT 0x0318
#define WM_APPCOMMAND 0x0319
#define WM_THEMECHANGED 0x031A
#define WM_CLIPBOARDUPDATE 0x031D
#define WM_DWMCOMPOSITIONCHANGED 0x031E
#define WM_DWMNCRENDERINGCHANGED 0x031F
#define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320
#define WM_DWMWINDOWMAXIMIZEDCHANGE 0x0321
#define WM_GETTITLEBARINFOEX 0x033F
#define WM_HANDHELDFIRST 0x0358
#define WM_HANDHELDLAST 0x035F
#define WM_AFXFIRST 0x0360
#define WM_AFXLAST 0x037F
#define WM_PENWINFIRST 0x0380
#define WM_PENWINLAST 0x038F
#define WM_DDE_FIRST 0x03E0
#define IDC_STATUS 1000
#define IDC_LIST1 1000
#define IDC_LEFT 1001
#define IDC_RIGHT 1002
#define IDC_TOP 1003
#define IDC_MIDDLE 1004
#define IDC_BOTTOM 1005
#define IDC_EDIT 1010
#define IDC_CLEAR 1011
#define CF_GDIOBJLAST 0x03FF
#define _WIN32_WINNT_NT4 0x0400
#define _WIN32_IE_IE40 0x0400
#define WM_USER 0x0400
#define WVR_VALIDRECTS 0x0400
#define HDS_CHECKBOXES 0x0400
#define TBSTYLE_ALTDRAG 0x0400
#define RBS_BANDBORDERS 0x00000400
#define TBS_DOWNISLEFT 0x0400
#define LVS_OWNERDRAWFIXED 0x0400
#define TVS_SINGLEEXPAND 0x0400
#define TVS_EX_DRAWIMAGEASYNC 0x0400
#define TCS_FIXEDWIDTH 0x0400
#define ctlFirst 0x0400
#define psh1 0x0400
#define _WIN32_IE_IE401 0x0401
#define psh2 0x0401
#define psh3 0x0402
#define psh4 0x0403
#define psh5 0x0404
#define psh6 0x0405
#define psh7 0x0406
#define psh8 0x0407
#define psh9 0x0408
#define psh10 0x0409
#define psh11 0x040a
#define psh12 0x040b
#define psh13 0x040c
#define psh14 0x040d
#define psh15 0x040e
#define psh16 0x040f
#define _WIN32_WINDOWS 0x0410
#define chx1 0x0410
#define chx2 0x0411
#define chx3 0x0412
#define chx4 0x0413
#define chx5 0x0414
#define chx6 0x0415
#define chx7 0x0416
#define chx8 0x0417
#define chx9 0x0418
#define chx10 0x0419
#define chx11 0x041a
#define chx12 0x041b
#define chx13 0x041c
#define chx14 0x041d
#define chx15 0x041e
#define chx16 0x041f
#define rad1 0x0420
#define rad2 0x0421
#define rad3 0x0422
#define rad4 0x0423
#define rad5 0x0424
#define rad6 0x0425
#define rad7 0x0426
#define rad8 0x0427
#define rad9 0x0428
#define rad10 0x0429
#define rad11 0x042a
#define rad12 0x042b
#define rad13 0x042c
#define rad14 0x042d
#define rad15 0x042e
#define rad16 0x042f
#define grp1 0x0430
#define grp2 0x0431
#define grp3 0x0432
#define grp4 0x0433
#define frm1 0x0434
#define frm2 0x0435
#define frm3 0x0436
#define frm4 0x0437
#define rct1 0x0438
#define rct2 0x0439
#define rct3 0x043a
#define rct4 0x043b
#define ico1 0x043c
#define ico2 0x043d
#define ico3 0x043e
#define ico4 0x043f
#define stc1 0x0440
#define stc2 0x0441
#define stc3 0x0442
#define stc4 0x0443
#define stc5 0x0444
#define stc6 0x0445
#define stc7 0x0446
#define stc8 0x0447
#define stc9 0x0448
#define stc10 0x0449
#define stc11 0x044a
#define stc12 0x044b
#define stc13 0x044c
#define stc14 0x044d
#define stc15 0x044e
#define stc16 0x044f
#define stc17 0x0450
#define stc18 0x0451
#define stc19 0x0452
#define stc20 0x0453
#define stc21 0x0454
#define stc22 0x0455
#define stc23 0x0456
#define stc24 0x0457
#define stc25 0x0458
#define stc26 0x0459
#define stc27 0x045a
#define stc28 0x045b
#define stc29 0x045c
#define stc30 0x045d
#define stc31 0x045e
#define stc32 0x045f
#define lst1 0x0460
#define lst2 0x0461
#define lst3 0x0462
#define lst4 0x0463
#define lst5 0x0464
#define lst6 0x0465
#define lst7 0x0466
#define lst8 0x0467
#define lst9 0x0468
#define lst10 0x0469
#define lst11 0x046a
#define lst12 0x046b
#define lst13 0x046c
#define lst14 0x046d
#define lst15 0x046e
#define lst16 0x046f
#define cmb1 0x0470
#define cmb2 0x0471
#define cmb3 0x0472
#define cmb4 0x0473
#define cmb5 0x0474
#define cmb6 0x0475
#define cmb7 0x0476
#define cmb8 0x0477
#define cmb9 0x0478
#define cmb10 0x0479
#define cmb11 0x047a
#define cmb12 0x047b
#define cmb13 0x047c
#define cmb14 0x047d
#define cmb15 0x047e
#define cmb16 0x047f
#define edt1 0x0480
#define edt2 0x0481
#define edt3 0x0482
#define edt4 0x0483
#define edt5 0x0484
#define edt6 0x0485
#define edt7 0x0486
#define edt8 0x0487
#define edt9 0x0488
#define edt10 0x0489
#define edt11 0x048a
#define edt12 0x048b
#define edt13 0x048c
#define edt14 0x048d
#define edt15 0x048e
#define edt16 0x048f
#define scr1 0x0490
#define scr2 0x0491
#define scr3 0x0492
#define scr4 0x0493
#define scr5 0x0494
#define scr6 0x0495
#define scr7 0x0496
#define scr8 0x0497
#define ctl1 0x04A0
#define ctlLast 0x04ff
#define _WIN32_WINNT_WIN2K 0x0500
#define _WIN32_IE_IE50 0x0500
#define _WIN32_WINNT_WINXP 0x0501
#define _WIN32_IE_IE501 0x0501
#define _WIN32_WINNT_WS03 0x0502
#define _WIN32_IE_IE55 0x0550
#define _WIN32_WINNT_LONGHORN 0x0600
#define _WIN32_IE_IE60 0x0600
#define FILEOPENORD 1536
#define _WIN32_IE_IE60SP1 0x0601
#define MULTIFILEOPENORD 1537
#define _WIN32_IE_WS03 0x0602
#define PRINTDLGORD 1538
#define _WIN32_IE_IE60SP2 0x0603
#define PRNSETUPDLGORD 1539
#define FINDDLGORD 1540
#define REPLACEDLGORD 1541
#define FONTDLGORD 1542
#define FORMATDLGORD31 1543
#define FORMATDLGORD30 1544
#define RUNDLGORD 1545
#define PAGESETUPDLGORD 1546
#define NEWFILEOPENORD 1547
#define PRINTDLGEXORD 1549
#define PAGESETUPDLGORDMOTIF 1550
#define COLORMGMTDLGORD 1551
#define NEWFILEOPENV2ORD 1552
#define NEWFILEOPENV3ORD 1553
#define _WIN32_IE_IE70 0x0700
#define CS_SAVEBITS 0x0800
#define HDS_NOSIZING 0x0800
#define TBSTYLE_FLAT 0x0800
#define RBS_FIXEDORDER 0x00000800
#define SBARS_TOOLTIPS 0x0800
#define SBT_TOOLTIPS 0x0800
#define TBS_NOTIFYBEFOREMOVE 0x0800
#define LVS_ALIGNLEFT 0x0800
#define TVS_INFOTIP 0x0800
#define TCS_RAGGEDRIGHT 0x0800
#define LVS_ALIGNMASK 0x0c00
#define CS_BYTEALIGNCLIENT 0x1000
#define HDS_OVERFLOW 0x1000
#define TBSTYLE_LIST 0x1000
#define RBS_REGISTERDROP 0x00001000
#define TBS_TRANSPARENTBKGND 0x1000
#define LVS_OWNERDATA 0x1000
#define TVS_FULLROWSELECT 0x1000
#define TCS_FOCUSONBUTTONDOWN 0x1000
#define CS_BYTEALIGNWINDOW 0x2000
#define TBSTYLE_CUSTOMERASE 0x2000
#define RBS_AUTOSIZE 0x00002000
#define LVS_NOSCROLL 0x2000
#define TVS_NOSCROLL 0x2000
#define TCS_OWNERDRAWFIXED 0x2000
#define CS_GLOBALCLASS 0x4000
#define TBSTYLE_REGISTERDROP 0x4000
#define RBS_VERTICALGRIPPER 0x00004000
#define LVS_NOCOLUMNHEADER 0x4000
#define TVS_NONEVENHEIGHT 0x4000
#define TCS_TOOLTIPS 0x4000
#define IDH_NO_HELP 28440
#define IDH_MISSING_CONTEXT 28441
#define IDH_GENERIC_HELP_BUTTON 28442
#define IDH_OK 28443
#define IDH_CANCEL 28444
#define IDH_HELP 28445
#define LANG_BOSNIAN_NEUTRAL 0x781a
#define LANG_CHINESE_TRADITIONAL 0x7c04
#define LANG_SERBIAN_NEUTRAL 0x7c1a
#define IDTIMEOUT 32000
#define OCR_NORMAL 32512
#define OIC_SAMPLE 32512
#define OCR_IBEAM 32513
#define OIC_HAND 32513
#define OCR_WAIT 32514
#define OIC_QUES 32514
#define OCR_CROSS 32515
#define OIC_BANG 32515
#define OCR_UP 32516
#define OIC_NOTE 32516
#define OIC_WINLOGO 32517
#define OIC_SHIELD 32518
#define OCR_SIZE 32640
#define OCR_ICON 32641
#define OCR_SIZENWSE 32642
#define OCR_SIZENESW 32643
#define OCR_SIZEWE 32644
#define OCR_SIZENS 32645
#define OCR_SIZEALL 32646
#define OCR_ICOCUR 32647
#define OCR_NO 32648
#define OCR_HAND 32649
#define OCR_APPSTARTING 32650
#define OBM_LFARROWI 32734
#define OBM_RGARROWI 32735
#define OBM_DNARROWI 32736
#define OBM_UPARROWI 32737
#define OBM_COMBO 32738
#define OBM_MNARROW 32739
#define OBM_LFARROWD 32740
#define OBM_RGARROWD 32741
#define OBM_DNARROWD 32742
#define OBM_UPARROWD 32743
#define OBM_RESTORED 32744
#define OBM_ZOOMD 32745
#define OBM_REDUCED 32746
#define OBM_RESTORE 32747
#define OBM_ZOOM 32748
#define OBM_REDUCE 32749
#define OBM_LFARROW 32750
#define OBM_RGARROW 32751
#define OBM_DNARROW 32752
#define OBM_UPARROW 32753
#define OBM_CLOSE 32754
#define OBM_OLD_RESTORE 32755
#define OBM_OLD_ZOOM 32756
#define OBM_OLD_REDUCE 32757
#define OBM_BTNCORNERS 32758
#define OBM_CHECKBOXES 32759
#define OBM_CHECK 32760
#define OBM_BTSIZE 32761
#define OBM_OLD_LFARROW 32762
#define OBM_OLD_RGARROW 32763
#define OBM_OLD_DNARROW 32764
#define OBM_OLD_UPARROW 32765
#define OBM_SIZE 32766
#define OBM_OLD_CLOSE 32767
#define WM_APP 0x8000
#define HELP_TCARD 0x8000
#define TBSTYLE_TRANSPARENT 0x8000
#define RBS_DBLCLKTOGGLE 0x00008000
#define LVS_NOSORTHEADER 0x8000
#define TVS_NOHSCROLL 0x8000
#define TCS_FOCUSNEVER 0x8000
#define SC_SIZE 0xF000
#define SC_SEPARATOR 0xF00F
#define SC_MOVE 0xF010
#define SC_MINIMIZE 0xF020
#define SC_MAXIMIZE 0xF030
#define SC_NEXTWINDOW 0xF040
#define SC_PREVWINDOW 0xF050
#define SC_CLOSE 0xF060
#define SC_VSCROLL 0xF070
#define SC_HSCROLL 0xF080
#define SC_MOUSEMENU 0xF090
#define SC_KEYMENU 0xF100
#define SC_ARRANGE 0xF110
#define SC_RESTORE 0xF120
#define SC_TASKLIST 0xF130
#define SC_SCREENSAVE 0xF140
#define SC_HOTKEY 0xF150
#define SC_DEFAULT 0xF160
#define SC_MONITORPOWER 0xF170
#define SC_CONTEXTHELP 0xF180
#define LVS_TYPESTYLEMASK 0xfc00
#define SPVERSION_MASK 0x0000FF00
#define UNICODE_NOCHAR 0xFFFF
#define IDC_STATIC -1
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1002
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
// Microsoft Visual C++ generated resource script.
//
#include "associator.h"
#include "winuser.h"
/////////////////////////////////////////////////////////////////////////////
// English (U.K.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
DLG_ICON ICON "launcher.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
DLG_MAIN DIALOGEX 20, 40, 236, 183
// Make the dialog visible after positioning at centre
STYLE DS_SETFONT | DS_3DLOOK | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_NOPARENTNOTIFY
CAPTION "Python File Associations Have Ceased To Be!"
FONT 10, "Arial", 400, 0, 0x0
BEGIN
LTEXT "You've uninstalled the Python Launcher, so now there are no applications associated with Python files.",IDC_STATIC,7,7,225,18
LTEXT "You may wish to associate Python files with one of the Python versions installed on your machine, listed below:",IDC_STATIC,7,27,225,18
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,6,49,224,105
PUSHBUTTON "&Associate with selected Python",IDOK,6,164,117,14,WS_DISABLED
PUSHBUTTON "Do&n't associate Python files",IDCANCEL,128,164,102,14
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
DLG_MAIN, DIALOG
BEGIN
RIGHTMARGIN, 238
END
END
#endif // APSTUDIO_INVOKED
#endif // English (U.K.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{023B3CDA-59C8-45FD-95DC-F8973322ED34}</ProjectGuid>
<RootNamespace>associator</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="pyproject.props" />
<Import Project="debug.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="pyproject.props" />
<Import Project="release.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\PC\associator.c" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\PC\associator.rc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\PC\associator.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\PC\associator.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\PC\associator.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\PC\associator.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -72,6 +72,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pylauncher", "pylauncher.vc
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pywlauncher", "pywlauncher.vcxproj", "{1D4B18D3-7C12-4ECB-9179-8531FF876CE6}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "associator", "associator.vcxproj", "{023B3CDA-59C8-45FD-95DC-F8973322ED34}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
......@@ -597,6 +599,18 @@ Global
{1D4B18D3-7C12-4ECB-9179-8531FF876CE6}.Release|Win32.Build.0 = Release|Win32
{1D4B18D3-7C12-4ECB-9179-8531FF876CE6}.Release|x64.ActiveCfg = Release|x64
{1D4B18D3-7C12-4ECB-9179-8531FF876CE6}.Release|x64.Build.0 = Release|x64
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.Debug|Win32.ActiveCfg = Debug|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.Debug|Win32.Build.0 = Debug|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.Debug|x64.ActiveCfg = Debug|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.PGInstrument|Win32.ActiveCfg = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.PGInstrument|Win32.Build.0 = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.PGInstrument|x64.ActiveCfg = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.PGUpdate|Win32.ActiveCfg = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.PGUpdate|Win32.Build.0 = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.PGUpdate|x64.ActiveCfg = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.Release|Win32.ActiveCfg = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.Release|Win32.Build.0 = Release|Win32
{023B3CDA-59C8-45FD-95DC-F8973322ED34}.Release|x64.ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment