[C, Dos] Windows detecteren?

Pagina: 1
Acties:

  • hneel
  • Registratie: Maart 2001
  • Laatst online: 13:26

hneel

denkt er het zijne van

Topicstarter
Ik ben bezig met een dos programma. Ik zou graag kunnen detecteren of het programma in echt msdos draait of onder windows in een DOS box. Kan dat?

Waar ik zelf al aan gedacht heb is het dos versie nummer opvragen. Bij windows98 kreeg ik dan 7.10, maar onder win2k kreeg ik 5.0. Dus dat is ook geen waterdichte methode.

Zijn er geen interrupt funkties die zoiets kunnen zien?
Het zou helemaal mooi zijn als ik zou kunnen zien of zo'n dos-box full-screen dan wel 'normaal' draait.

[ Voor 3% gewijzigd door hneel op 17-04-2003 10:31 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Sorry hoor, maar dit vind ik best wel een google vraag :)

http://www.google.nl/sear...=UTF-8&oe=UTF-8&hl=nl&lr=

Stop uploading passwords to Github!


Verwijderd

Probeer eens in een dos-prompt: mem /d
als windows actief is zul je dit zien onder de status van de modules

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

de environment variabele WINDIR checken lijkt mij het makkelijkst :)

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main (int argc, char ** argv, char ** env)
{
    int underWindows = 0;
    char ** e;
    
    for (e = env; *e; e++)
    {
        if (!strcoll (*e, "WINDIR"))
        {
            underWindows = 1;
            break;
        }
    }
}

[ Voor 67% gewijzigd door .oisyn op 17-04-2003 11:08 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 08-06 11:02
Simpel de windir environment variable uitlezen is idd een oplossing, maar als je dan het programma voor de gek wilt houden zet je zelf hier een waarde in en start je het programma op.
Ik heb thuis wel documentatie over interrupts om windows te detecteren, die zal ik vanavond ff opzoeken en hier posten.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

PiepPiep schreef op 17 april 2003 @ 13:11:
Simpel de windir environment variable uitlezen is idd een oplossing, maar als je dan het programma voor de gek wilt houden zet je zelf hier een waarde in en start je het programma op.
en dus?
Je zegt het zelf al: als je het programma voor de gek wilt houden.
A) waarom zou je dat willen
B) waarom zou het verboden zijn om dat te doen, mocht je het echt willen
Ik heb thuis wel documentatie over interrupts om windows te detecteren, die zal ik vanavond ff opzoeken en hier posten.
Je kunt ook leuk een DOS interrupt (0x21) hook zetten die je doodleuk kan vertellen dat je in windows zit terwijl je dat niet zit, of andersom :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • hneel
  • Registratie: Maart 2001
  • Laatst online: 13:26

hneel

denkt er het zijne van

Topicstarter
.oisyn schreef op 17 April 2003 @ 11:06:
de environment variabele WINDIR checken lijkt mij het makkelijkst :)
Het probleem was dat dit niet werkte onder win2k. Ik had trouwens sowieso onderscheid nodig tussen win95 en winnt/2k/xp.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CheckEnvironment(void)
{
  char *sParam;
  
  /* in windows 9x vind je de variabele "windir". Let op: in kleine letters (case sensitive) */
  sParam = getenv( "windir" );
  if ( sParam != NULL )
  {
    OS = OS_WIN_9X;
  }

  /* In windows NT/2K/XP bestaat de variabele "windir" wel, maar vind je hem niet met getenv.
     Wel vind je hier de variabele "OS=Windows_NT" */
  sParam = getenv( "OS" );
  if ( sParam != NULL )
  {
    if ( stricmp( sParam, "Windows_NT" ) == 0 )
    {
      OS = OS_WIN_NT;
    }
  }
}

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
je moet hiervoor dus wel windows opgestart hebben..
als je van CD of diskette boot, en zo in dos komt gaat het niet werken

This message was sent on 100% recyclable electrons.


  • PipoDeClown
  • Registratie: September 2000
  • Niet online

PipoDeClown

Izze Zimpell

http://www-2.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
hiertussen zit vast wel een interrupt bij die je kunt gebruiken.
ook voor full en windows dosbox en titel veranderen enzo.
je kunt ook een proces checken win.com bijv.

God weet alles, want hij is lid van de Mosad. To protect your freedom i will take that away from you. Mijn drankgebruik heeft ernstig te lijden onder mijn gezondheid.


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 08-06 11:02
.oisyn schreef op 17 april 2003 @ 14:44:
[...]


en dus?
Je zegt het zelf al: als je het programma voor de gek wilt houden.
A) waarom zou je dat willen
B) waarom zou het verboden zijn om dat te doen, mocht je het echt willen


[...]


Je kunt ook leuk een DOS interrupt (0x21) hook zetten die je doodleuk kan vertellen dat je in windows zit terwijl je dat niet zit, of andersom :)
Okee, dat is ook wel zo, maar als gewone huisgebruiker hook je niet zo snel ff een dos interrupt.
Mgoe, die documentatie die ik wou geven is al gegeven dus, die ralf brown lijst had ik het over.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22

Pagina: 1