📄 launcher.cpp
字号:
// Launcher.cpp 从Win32系统中装载Java程序的引导器
#include <windows.h>
#include <stdio.h>
#define JRE_KEY "Software\\JavaSoft\\Java Runtime Environment"
// 函数:是否存在指定的文件
static BOOL exist(char *filename)
{
FILE *f;
if ((f = fopen(filename, "r")) == NULL) {
return FALSE;
}
else {
fclose(f);
return TRUE;
}
}
// 函数:从注册表中读指定键值
static BOOL GetStringFromRegistry(HKEY key, const char *name, char *buf, int bufsize)
{
DWORD type, size;
if (RegQueryValueEx(key, name, 0, &type, 0, &size) == 0
&& type == REG_SZ
&& (size < (unsigned int)bufsize)) {
if (RegQueryValueEx(key, name, 0, 0, (PUCHAR)buf, &size) == 0) {
return TRUE;
}
}
return FALSE;
}
// 函数:在注册表里查找JRE的安装位置,使用了上面的GetStringFromRegistry函数
static BOOL GetPublicJREHome(char *buf, int bufsize)
{
HKEY key, subkey;
char version[MAX_PATH + 1];
/* 查找当前JRE的版本号 */
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, JRE_KEY, 0, KEY_READ, &key) != 0) {
fprintf(stderr, "Error opening registry key '" JRE_KEY "'\n");
return FALSE;
}
if (!GetStringFromRegistry(key, "CurrentVersion",
version, sizeof(version))) {
fprintf(stderr, "Failed reading value of registry key:\n\t"
JRE_KEY "\\CurrentVersion\n");
RegCloseKey(key);
return FALSE;
}
/* 查找当前版本的JRE的目录 */
if (RegOpenKeyEx(key, version, 0, KEY_READ, &subkey) != 0) {
fprintf(stderr, "Error opening registry key '"
JRE_KEY "\\%s'\n", version);
RegCloseKey(key);
return FALSE;
}
/* 读"JavaHome"的键值到buf */
if (!GetStringFromRegistry(subkey, "JavaHome", buf, bufsize)) {
fprintf(stderr, "Failed reading value of registry key:\n\t"
JRE_KEY "\\%s\\JavaHome\n", version);
RegCloseKey(key);
RegCloseKey(subkey);
return FALSE;
}
RegCloseKey(key);
RegCloseKey(subkey);
return TRUE;
}
// 函数:在新的控制台开启进程执行命令
static BOOL ExecuteAndReturn(LPTSTR pszCmd)
{
PROCESS_INFORMATION pi; //生成的新的进程的信息
STARTUPINFO si; //生成的新进程窗体的信息
ZeroMemory(& si,sizeof(si)); //清空si结构,新进程窗体的信息
si.cb=sizeof(si);
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=SW_SHOW;
//在新的控制台以正常优先级产生新的进程
BOOL bRes=CreateProcess(NULL,pszCmd,NULL,NULL,TRUE,
CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS,NULL,NULL,& si,& pi);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return bRes;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char JavawFile[MAX_PATH + 1]; //带绝对路径的javaw文件名
char Command[MAX_PATH + 1]; //将要发出的命令
JavawFile[0] = Command[0] = 0; //初始化为NULL
if (GetPublicJREHome(JavawFile, sizeof(JavawFile))) {
strcat(JavawFile, "\\bin\\javaw.exe");
}
if (!exist(JavawFile)) {
MessageBox(NULL, "找不到JAVA目录!", "error", MB_OK);
return 1;
}
strcat(Command, "\"");
strcat(Command, JavawFile);
strcat(Command, "\""); //给javaw文件名加上双引号
strcat(Command, " HelloWorld");
ExecuteAndReturn( Command ); //执行命令
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -