Hoppa till innehåll

Hur Öppnar Man En Websida I Ett Program


Stakc
 Dela

Rekommendera inlägg

Inte riktigt så jag menade, Jag menar som på Runescape så kan man ladda ner så man typ spelar i "programfönster" om du förstår vad jag menar?

Runescape non-browser standalone klienten laddar ingen webbsida. Den är skriven i "Microsoft - C++"(ej standardiserat) med hjälp av Win32API och GCJ(http://gcc.gnu.org/java/) och laddar Javas Virtual Machine (tillhandahåller "programfönstret" du talar om) och därefter laddar den in och kör Runescapes main-klass i Java.

 

Till skillnad ifrån din webbläsare som själv laddar Javas Virtual Machine och specificerar ett Java Arkiv med main-startklass i Java.

 

Även Minecraft.exe tror jag använder GCJ för att ladda spelet, men med mer kringfunktioner än Runescapes klient.

 

Källkod(GNU GPLv2 http://www.gnu.org/licenses/gpl-2.0.html):

/*
* Copyright 2010 Jagex Limited.
*
* This file is part of JagexLauncher.
* 
* JagexLauncher is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* JagexLauncher 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, see <http://www.gnu.org/licenses/>
*
*/

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
#define MAX_LINE_LENGTH 65536

int mainprogram(char *game)
{
    FILE *f;
    char **paramlines;
    int l_paramlines=0;
    char prmfile[512];
    sprintf_s(prmfile, 512, "../%s/%s.prm", game, game);
    if (fopen_s(&f, prmfile, "r") !=0) {
        MessageBox(NULL, TEXT("Unable to load parameter file. Please reinstall the program."), TEXT("Error"), MB_OK);
        return 0;
    } else {
        char line[MAX_LINE_LENGTH];
        while (fgets(line, MAX_LINE_LENGTH, f)!=NULL) l_paramlines++;
        paramlines=new char *[l_paramlines];
        fseek(f, 0, SEEK_SET);
        int i=0;
        while (fgets(line, MAX_LINE_LENGTH, f)!=NULL) {
            int len=strlen(line);
            for (int j=len-1; j>=0; j--) {
                if (line[j]!='\n' && line[j]!='\r') break;
                line[j]=0;
            }
            paramlines[i]=new char[len+1];
            strcpy_s(paramlines[i], len+1, line);
            i++;
        }

    }
    if (l_paramlines<1) {
        MessageBox(NULL, TEXT("Empty parameter file. Please reinstall the program."), TEXT("Error"), MB_OK);
        return 0;
    }

    JavaVM *jvm;
    JNIEnv *env;
    LoadLibrary(TEXT("jvm.dll"));
    JavaVMInitArgs vm_args;
    vm_args.version=JNI_VERSION_1_6;
    vm_args.nOptions=l_paramlines-1;
    vm_args.options=new JavaVMOption[l_paramlines-1];
    for (int i=0; i<l_paramlines-1; i++) vm_args.options[i].optionString=paramlines[i];
    vm_args.ignoreUnrecognized=false;

    jint result=JNI_CreateJavaVM(&jvm, reinterpret_cast<void **>(&env), &vm_args);
    if (result!=JNI_OK) return 0;
    jclass cls=env->FindClass(paramlines[l_paramlines-1]);
    if (cls!=NULL) {
        jmethodID mid=env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
        jobjectArray args=env->NewObjectArray(1, env->FindClass("java/lang/String"), NULL);
        env->SetObjectArrayElement(args,0,env->NewStringUTF(game));
        env->CallStaticVoidMethod(cls, mid, args);
    }

    jvm->DestroyJavaVM();
    return 0;
}

#ifdef _CONSOLE
int _tmain(int argc, TCHAR **argv)
{
    if (argc<2) return 0;
    #ifdef UNICODE
    int len=_tcslen(argv[1]);
    char *game=new char[len+1];
    WideCharToMultiByte(CP_ACP, 0, argv[1], len+1, game, len+1, NULL, NULL);
    int ret=mainprogram(game);
    delete[] game;
    return ret;
    #else
    return mainprogram(argv[0]);
    #endif

}
#else
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    return mainprogram(lpCmdLine);
}
#endif

Redigerat av Vitdom
Länk till kommentar
Dela på andra sajter

Gå med i konversationen

Du kan skriva nu och registrera dig senare. Om du har ett konto, logga in nu för att posta med ditt konto.

Gäst
Svara på det här ämnet...

×   Klistrade in som rich text.   Klistra in som vanlig text istället

  Endast 75 emojis är tillåtet.

×   Din länk har automatiskt inbäddats.   Visa som en länk istället

×   Ditt tidigare innehåll har återställts.   Rensa redigeraren

×   Du kan inte klistra in bilder direkt. Ladda upp eller infoga bilder från URL.

 Dela

×
  • Skapa ny...