⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 launcher.cpp

📁 在win32系统中引导java程序
💻 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 + -