OSDN Git Service

invoke yamy{64,32} and yamyd32 from same directory of yamy.exe instead of current...
[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 "stringtool.h"\r
7 #include "mayurc.h"\r
8 \r
9 /// main\r
10 int WINAPI _tWinMain(HINSTANCE i_hInstance, HINSTANCE /* i_hPrevInstance */,\r
11                                          LPTSTR /* i_lpszCmdLine */, int /* i_nCmdShow */)\r
12 {\r
13         typedef BOOL (WINAPI* ISWOW64PROCESS)(HANDLE hProcess, PBOOL Wow64Process);\r
14         BOOL isWow64;\r
15         ISWOW64PROCESS pIsWow64Process;\r
16         STARTUPINFO si;\r
17         PROCESS_INFORMATION pi;\r
18         BOOL result;\r
19         tstring yamyPath;\r
20         _TCHAR exePath[GANA_MAX_PATH];\r
21         _TCHAR exeDrive[GANA_MAX_PATH];\r
22         _TCHAR exeDir[GANA_MAX_PATH];\r
23 \r
24         GetModuleFileName(NULL, exePath, GANA_MAX_PATH);\r
25         _tsplitpath_s(exePath, exeDrive, GANA_MAX_PATH, exeDir, GANA_MAX_PATH, NULL, 0, NULL, 0);\r
26         yamyPath = exeDrive;\r
27         yamyPath += exeDir;\r
28 \r
29         pIsWow64Process =\r
30                 (ISWOW64PROCESS)::GetProcAddress(::GetModuleHandle(_T("kernel32.dll")),\r
31                                                                                  "IsWow64Process");\r
32         ZeroMemory(&pi,sizeof(pi));\r
33         ZeroMemory(&si,sizeof(si));\r
34         si.cb=sizeof(si);\r
35 \r
36         if (pIsWow64Process) {\r
37                 result = pIsWow64Process(::GetCurrentProcess(), &isWow64);\r
38                 if (result != FALSE && isWow64 == TRUE) {\r
39                         yamyPath += _T("yamy64");\r
40                 } else {\r
41                         yamyPath += _T("yamy32");\r
42                 }\r
43         } else {\r
44                 yamyPath += _T("yamy32");\r
45         }\r
46 \r
47         result = CreateProcess(yamyPath.c_str(), NULL, NULL, NULL, FALSE,\r
48                                                    NORMAL_PRIORITY_CLASS, 0, NULL, &si, &pi);\r
49 \r
50         if (result == FALSE) {\r
51                 TCHAR buf[1024];\r
52                 TCHAR text[1024];\r
53                 TCHAR title[1024];\r
54 \r
55                 LoadString(i_hInstance, IDS_cannotInvoke,\r
56                                    text, sizeof(text)/sizeof(text[0]));\r
57                 LoadString(i_hInstance, IDS_mayu,\r
58                                    title, sizeof(title)/sizeof(title[0]));\r
59                 _stprintf_s(buf, sizeof(buf)/sizeof(buf[0]),\r
60                                         text, yamyPath, GetLastError());\r
61                 MessageBox((HWND)NULL, buf, title, MB_OK | MB_ICONSTOP);\r
62         } else {\r
63                 CloseHandle(pi.hThread);\r
64                 CloseHandle(pi.hProcess);\r
65         }\r
66 \r
67         return 0;\r
68 }\r