OSDN Git Service

b05d808344556ce607e15327181c19daff3eaf20
[yamy/yamy.git] / yamy.cpp
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
2 // yamy.cpp\r
3 \r
4 #include <windows.h>\r
5 #include <tchar.h>\r
6 #include "mayurc.h"\r
7 \r
8 /// main\r
9 int WINAPI _tWinMain(HINSTANCE i_hInstance, HINSTANCE /* i_hPrevInstance */,\r
10                                          LPTSTR /* i_lpszCmdLine */, int /* i_nCmdShow */)\r
11 {\r
12         typedef BOOL (WINAPI* ISWOW64PROCESS)(HANDLE hProcess, PBOOL Wow64Process);\r
13         BOOL isWow64;\r
14         ISWOW64PROCESS pIsWow64Process;\r
15         STARTUPINFO si;\r
16         PROCESS_INFORMATION pi;\r
17         BOOL result;\r
18         TCHAR *yamyPath = _T("yamy32");\r
19 \r
20         pIsWow64Process =\r
21                 (ISWOW64PROCESS)::GetProcAddress(::GetModuleHandle(_T("kernel32.dll")),\r
22                                                                                  "IsWow64Process");\r
23         ZeroMemory(&pi,sizeof(pi));\r
24         ZeroMemory(&si,sizeof(si));\r
25         si.cb=sizeof(si);\r
26 \r
27         if (pIsWow64Process) {\r
28                 result = pIsWow64Process(::GetCurrentProcess(), &isWow64);\r
29                 if (result != FALSE && isWow64 == TRUE) {\r
30                         yamyPath = _T("yamy64");\r
31                 }\r
32         }\r
33 \r
34         result = CreateProcess(yamyPath, yamyPath, NULL, NULL, FALSE,\r
35                                                    NORMAL_PRIORITY_CLASS, 0, NULL, &si, &pi);\r
36 \r
37         if (result == FALSE) {\r
38                 TCHAR buf[1024];\r
39                 TCHAR text[1024];\r
40                 TCHAR title[1024];\r
41 \r
42                 LoadString(i_hInstance, IDS_cannotInvoke,\r
43                                    text, sizeof(text)/sizeof(text[0]));\r
44                 LoadString(i_hInstance, IDS_mayu,\r
45                                    title, sizeof(title)/sizeof(title[0]));\r
46                 _stprintf_s(buf, sizeof(buf)/sizeof(buf[0]),\r
47                                         text, yamyPath, GetLastError());\r
48                 MessageBox((HWND)NULL, buf, title, MB_OK | MB_ICONSTOP);\r
49         } else {\r
50                 CloseHandle(pi.hThread);\r
51                 CloseHandle(pi.hProcess);\r
52         }\r
53 \r
54         return 0;\r
55 }\r