Avatar billede stig-b Nybegynder
21. september 2005 - 12:50 Der er 13 kommentarer og
1 løsning

Åbne nyt dos vindue fra kørende C-dos program i Borland 5.2

Jeg har et program, der kører med en del processer, og jeg vil gerne kunne åbne et nyt vindue, hvori jeg kan indtaste tekst, der skal bruges af en af processerne. Er der nogen eksperter der kan hjælpe med, hvordan jeg åbner et nyt vindue?

stig-b
Avatar billede stig-b Nybegynder
21. september 2005 - 12:53 #1
Ups! Jeg vil gerne give 100 point.
Avatar billede arne_v Ekspert
21. september 2005 - 13:35 #2
Du skal bruge:

AllocConsole
ReadConsole
WriteConsole
FreeConsole

fra Win32 API
Avatar billede stig-b Nybegynder
21. september 2005 - 15:00 #3
Kan du give lidt flere hints?
Avatar billede stig-b Nybegynder
21. september 2005 - 15:17 #4
Jeg er ikke vant til Win32 API, men formoder jeg skal inkludere windows.h. Det ville være dejligt, hvis du f.eks. kan vise mig allokeringen.
Avatar billede arne_v Ekspert
21. september 2005 - 16:15 #5
jeg kan godt lave et eksempel

men formentlig først i morgen eftermiddag

der er eksmepler på nettet
Avatar billede arne_v Ekspert
21. september 2005 - 16:15 #6
Avatar billede arne_v Ekspert
21. september 2005 - 16:17 #7
Avatar billede stig-b Nybegynder
21. september 2005 - 18:06 #8
hej arne_v.
Tak for dine links. Jeg kan få koden fra codeguru til at køre i Visual Studio. Men i dette projekt arbejder jeg i Borland 5.2, og den bryder sig ikke om f.eks. AllocConsole, og heller ikke nogen af de andre for den sags skyld. tsk, tsk :/ Desuden er applikationen en win16 app, hvilket nok ikke gør det meget bedre. Jeg kan indtaste de input jeg har brug for til de processer, der skal bruge dem, men det kører ikke optimalt, og jeg synes det vil være frækkere at have et selvstændigt vindue til indtastning af alle værdier, der skal indtastes.

Jeg ser dog frem til at se dit eksempel :)
Avatar billede bertelbrander Praktikant
21. september 2005 - 19:15 #9
AllocConsole og venner er en del af Kernel32.lib/Kernel32.dll så der er nok ikke store chancer for at få dem til at virke med en 16 bit applikation.
Avatar billede stig-b Nybegynder
22. september 2005 - 09:57 #10
Nu er jeg kommet lidt i tvivl om det er en 16- eller 32-bit applikation. Når jeg laver en projekt i Borland 5.2 har jeg fire valgmuligheder for applikationstype

1. Win32
2. Windows 3.x(16)
3. DOS (Standard)
4. DOS (Overlay)

Applikationen vi taler om her er den 3. mulighed DOS (Standard), så jeg regner med at det kan være en 32-bit app, selv om det ikke en Win32 projekttype, irrk..!
Avatar billede stig-b Nybegynder
22. september 2005 - 18:34 #11
Har faktisk fundet lige den løsning jeg skal bruge:

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044654269&id=1043284392

Til arne_v,

Jeg vil gerne give dig de 30 point fordi dine links har været nyttige, så hvis du sender et svar, er de dine med tak :)

stig-b
Avatar billede arne_v Ekspert
22. september 2005 - 21:11 #12
ok

hvilken af løsningerne på det link brugte du ?
Avatar billede stig-b Nybegynder
23. september 2005 - 09:16 #13
#include <stdio.h>
#include <process.h>

int main(void)
{
  puts("Spawning child with spawnl");
 
  spawnl( P_WAIT, "child.exe",
    "child.exe", "Using spawnl", "Arg1", "Arg2", NULL );
 
  // min tilføjelse
  readFile("test.txt");
  printf("You transfered val1, val2, val3 and val4: ");
  for(int i = 0; i < 4; i++)
  {
      printf("%d ", val[i]);
  }
  return 0;
}

Denne løsning brugte jeg i en test, hvor jeg i child, når den åbner ved programstart indtaster nogle værdier, skriver dem til en fil og lukker child. Ved lukning af child henter mainprogrammet værdierne fra filen og skriver dem til skærmen som vist ovenfor. Jeg forestillede mig, at jeg ville bruge den i projektet og åbne den med en control key, når der var brug for den.

Men jeg har ikke brugt løsningen, fordi jeg lavede en løsning, der læser bioskey fra skærmen en karakter ad gangen, konverterer den til en char og lægger den i et array. Vha. en konverteringsalgoritme konverteres char'ene i arrayet til integers og samles til hele tal. scanf kan ikke bruges, fordi den ikke er reentrant, hvilket giver nogle uheldige resultater, når andre processer også skriver til skærmen, samtidig med at jeg taster ind. Cursoren er simpelthen ikke til at styre, det er den med bioskey.
Avatar billede stig-b Nybegynder
23. september 2005 - 09:24 #14
I projektet har vi en kerneemulering, som implementerer sine egne processer, message queues etc. Det blev ikke anset for god skik at blande <process.h> med kerneemuleringen, derfor løsningen med bioskey.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester