-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathlaunch.cpp
84 lines (68 loc) · 2.23 KB
/
launch.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Copyright © 2010 Martin Stone.
//
// This file is part of TouchCursor.
//
// TouchCursor is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// TouchCursor is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with TouchCursor. If not, see <http://www.gnu.org/licenses/>.
#include "launch.h"
#include <windows.h>
void GetProgramFolder(wchar_t* buff) {
lstrcpy(buff, GetCommandLine());
// get rid of "
wchar_t* start = buff;
while (*start == '\"') ++start;
if (start != buff) {
wchar_t* dest = buff;
do {
*dest++ = *start++;
} while (*start);
}
wchar_t* end = buff + lstrlen(buff);
while (*end != '\\' && end > buff) *end-- = 0;
*end = 0;
}
void PrefixProgramFolder(wchar_t* buff, const wchar_t* path) {
GetProgramFolder(buff);
lstrcat(buff, L"\\");
lstrcat(buff, path);
}
bool LaunchProgRelative(const wchar_t* prog, const wchar_t* args) {
wchar_t command[2*1024] = L"\"";
PrefixProgramFolder(command+1, prog);
lstrcat(command, L"\"");
if (*args) {
lstrcat(command, L" ");
lstrcat(command, args);
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
BOOL ret = CreateProcess(0, command, 0, 0, 0, 0, 0, 0, &si, &pi);
return ret;
}
void LaunchUrl(const wchar_t* url) {
ShellExecute(0, L"open", url, 0, L"", SW_NORMAL);
}
void LaunchLocalHtml(const wchar_t* filename) {
wchar_t path[MAX_PATH];
if (filename[0] == L'\\' || filename[1] == L':') {
lstrcpy(path, filename);
}
else {
// relative: Make absolute
PrefixProgramFolder(path, filename);
}
LaunchUrl(path);
}