Program do NIE konsoli (ale windows)

0

Witam
Od jakiegoś czasu staram się napisać program do konsoli, ale nie tej w pracującym windowsie. Tylko program działający np. jak chkdsk.exe który będzie działał w konsoli uruchamianej z CD-windows XP / 2k
Pliki exe ze starego kompilatora Turbo C++ nie mają dopisku „This program must be run under Win32” ale są najprawdopodobniej pod dosa i też niecącą chodzić (a XP NIE MA dosa). Czy może ktoś już to przerobił i wie czym kompilować takie pliki?

0

Chodzi ci o tzw Native Applications? To co uruchamia sie jeszcze przed startem systemu?

0

Chyba tak po ekranie windowsa(na czarnym tle) mozna uruchomic rozne programy PartitionMagic; chkdsk itp. O to mi chodzi, windows jest włączony ale nie całkiem.

0

No to jak ustawić kompilator Builder C++ 6 lub skąd ściągnąć kompilator do C++ żeby pisać Native Applications??

0

Nie wiem czy Borland C++ w ogóle da się ustawić dla Native Application. Można za to ściągnąć choćby darmowe Visual C++ Toolkit. Jednak do kompilacji Native Application wymagane jest dostarczenie bibliotek z (dość kosztownego) Microsoft Windows Driver Development Kit.

Więcej szczegółów: Microsoft TechNet

0

Tutaj jest do dosc przystepnie opisane: http://vmsone.com/~decuslib/vmssig/vmslt98a/nt/native.htm

0

DDK jest darmowe i można je sobie ściągnąć bez żadnego problemu.
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
othellodead link.

Pierwsza lektura
Moim pierwszym native było takie coś:
main.c

#include "ntddk.h"
NTSYSAPI NTSTATUS NTAPI NtDisplayString(UNICODE_STRING* String );
NTSYSAPI NTSTATUS NTAPI NtCreateEvent(HANDLE* EventHandle,ACCESS_MASK DesiredAccess,OBJECT_ATTRIBUTES* ObjectAttributes,EVENT_TYPE EventType,BOOLEAN InitialState);
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(HANDLE ObjectHandle,BOOLEAN Alertable,LARGE_INTEGER* TimeOut);
NTSYSAPI NTSTATUS NTAPI NtClose(HANDLE ObjectHandle);
NTSYSAPI NTSTATUS NTAPI NtTerminateProcess(HANDLE ProcessHandle,NTSTATUS  ExitStatus);

void print(__wchar_t *msg)
{
    UNICODE_STRING umsg;
    RtlInitUnicodeString (&umsg, msg);
    NtDisplayString(&umsg);
}

void sleep(long ms)
{
    LARGE_INTEGER lTime;
    HANDLE hE;
    NtCreateEvent(&hE, EVENT_ALL_ACCESS, NULL, 0, 0);
    lTime.QuadPart = ms * -10000;
    NtWaitForSingleObject(hE, 0, &lTime);
    NtClose(hE);
}

void NtProcessStartup( PVOID arg)
{
    print(L"Hello and welcome to program running in Native App mode\n\n");
    print(L"This program sucks so much.... I'm now gonna sleep for 5 seconds\n");
    sleep(5000);
    print(L"OK... well that's a sleep() function written... now we need to do\n");
    print(L"beeping, waiting for a keypress, mousepress etc... etc... just to\n");
    print(L"get a few of the basics done so we can have fun.\n\n");
    print(L"OK... well wait 10 seconds to boot into Windows....");
    sleep(10000);
    print(L"Here comes Windows.....");

    NtTerminateProcess( NtCurrentProcess(), 0 );
}

plik sources. (bez rozszerzenia! )

TARGETNAME=main
TARGETPATH=obj
TARGETTYPE=PROGRAM
INCLUDES=C:\WINDDK\3790.1830\inc\ddk\wxp
SOURCES=main.c

makefile skopiuj sobie z dowolnego folderu ddk z samplami.

Teraz najbardziej pokraczny krok: kompilacja. Uruchamiasz konsolę z menu start->programy->ddk->wersja->Build Environments->Windows * Free Build Environment.
Używając polecenia cd zmieniasz folder na ten z plikiem main.c i wpisujesz build.
Nigdy nie lubiałem tego ostatatniego kroku, dlatego napisałem sobie shell extension dla folderów, które dodaje "Build" do menu podręcznego jeśli wypatrzy plik sources.

0

Ok. super ściągnąłem odpaliłem skompilowałem i nawet działa… tyko czy zna może ktoś link do jakiejś strony (najlepiej po polsku) z opisem komend itp. albo jakieś przykładowymi programami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1