Pokaż wyniki od 1 do 11 z 11
C++ shutdown
  1. #1
    Użytkownik
    Dołączył
    15.08.2008
    Posty
    24
    Wątków
    4
    Siła reputacji
    8

    Domyślnie C++ shutdown

    Jak napisać prosty programik aby wyłączał komputer ?
    Uwaga: To jest stary temat
    Ta dyskusja jest starsza niż 90 dni. Informacje w niej zawarte mogą już nie być aktualne

  2. #2
    Aktywny Użytkownik Awatar matek3005
    Dołączył
    19.10.2008
    Posty
    363
    Wątków
    3
    Siła reputacji
    11

    Domyślnie Odp: C++ shutdown

    zależy pod jakim systemem operacyjnym...
    w windows np:
    Kod:
    #include <iostream>
    using namespace std;
    int main(){
       cout<<"wcisnij enter aby wylaczyc komputer...";
       cin.get();
       system("shutdown -s");
       return 0;
    }
    w windows możesz skorzystać z funkcji system() i wywoływać w niej komendy wiersza poleceń albo wykorzystać winapi, który posiada ciekawe funkcje w tym do wyłączania systemu,
    a w linuxie to nie wiem więc się nie wypowiem
    Ostatnio edytowane przez matek3005 ; 16.02.2009 o 23:12

  3. #3
    Mgr. Inż. Uploadu Awatar dj_mafiozo
    Dołączył
    08.10.2008
    Mieszka w
    Wrocław
    Posty
    674
    Wątków
    119
    Siła reputacji
    21

    Domyślnie Odp: C++ shutdown

    Shutdown to nie WinAPI tylko polecenie zewnętrzne Windows (shutdown.exe) wpisz w "Trybie MS-DOS" lub "Wierszu polecenia" (zależy jakiego masz Windowsa): "shutdown /?" a uzyskasz dość wyczerpującą i często zadziwiającą informacje na temat tego, co można zrobić w ten sposób (na przykłąd wykręcić komuś numer, iż dajecie komuś usiąść przed własnym kompem, oczywiście ohasłowanym, a idziecie sobie gdzieś, albo do WC, czy pod prysznic a nagle komp sam z siebie się wyłącza/restartuje/wylogowuje)


    Mój upload dla Precyl.pl: 569 190,4 MB (555,86 GB)

  4. #4
    Użytkownik
    Założyciel Tematu

    Dołączył
    15.08.2008
    Posty
    24
    Wątków
    4
    Siła reputacji
    8

    Domyślnie Odp: C++ shutdown

    dzięki za info, i jeszcze jedno pytanie jak zrobić aby wyłączenie nastąpiło po porównaniu tego co napiszemy na klawiaturze z tym co mamy w bazie programy ?
    sygnaturka nieregulaminowa

  5. #5
    Mgr. Inż. Uploadu Awatar dj_mafiozo
    Dołączył
    08.10.2008
    Mieszka w
    Wrocław
    Posty
    674
    Wątków
    119
    Siła reputacji
    21

    Domyślnie Odp: C++ shutdown

    Nie do końca rozumiem, ale wszelkie takie operacje musisz wykonać za pomocą instrukcji warunkowej if. Jeżeli masz kilka rzeczy do porównania możesz wykorzystać instrukcję wyboru switch:
    Kod:
    switch(zminenna)
    {
         case pierwsza_wartość: instrukcja; (lub blok - { } )
         case druga wartość: instrukcja;
         (...)
         default: instrukcja; // to co zostanie wykonane, jeżeli wartość zmienna (lub wartość zwracana przez funkcje, którą tak samo można użyć) nie odpowiada żadnej z powyższych opcji
    }
    Kod:
    if (wyrażenie_logiczne) instrukcja;
    Pamiętaj, że 0 ma wartość logiczną false, a wszystko pozostałe true, często (ponieważ w C/C++ nie istnieje coś takiego jak pascalowe Repeat - Until) twoży się pętle której nagłówek wygląda tak:

    Kod:
    while (1) { ... }
    Zazwyczaj używa się 1 aby zapewnić kompatybilność z C, gdzie nie występuje typ logiczny, więc nie istnieje coś takiego jak true/false...

    wejście z klawiatury załatwiasz albo w sposób z ANSI C - scanf(), fgets(), albo w sposób C++ - domyślny strumień wejściowy - cin >> zmienna
    pamiętaj, że to nie są funkcje języka, a bibliotek (musisz na początku dać #include <stdio.h> dla scanf, fgets albo #include <iostream.h>). W praktyce wygląda to tak (dla napisów - w C/C++ nie istnieje string!!!):

    Kod:
    char lancuch[60]; //deklaracja tablicy 60 elementów typu char do której można zapisać 59 liter - tablica ASCIIZ - ostatni znak zawsze musi być znakiem o kodzie ascii 0
    printf("Podaj ciąg znaków: ");
    scanf("%s", &lancuch);
    Kod:
    char lancuch[60];
    cout << "Podaj ciąg znaków: ";
    cin >> lancuch;
    Kod:
    char lancuch[60];
    printf("Podaj ciąg znaków: ");
    fgets(lancuch);
    !!! Za równo cin jak i scanf() zapisują do zmiennej ciąg do pierwszego wystąpienia ENTER lub SPACJI!!! Dalsza część dalej zostaje w buforze klawiatury!!! Tylko fgets() czyta całość!!!

    Jeżeli masz tablicę z wartościami, które chcesz porównywać i jeżeli wartość wprowadzona znajdzie się w tablicy ma być wykonana ta sama akcja proponowałbym coś takiego:

    Kod:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
         char tablica[25][50]; //tablica 25 elementów typu tablica typu char
         //(...) // tu przypisać wartośći poszczególnym elementom tablicy (tej 25-cio elementowej)
         int i;
         char lancuch [50];
         printf("Podaj łańcuch znaków: ");
         fgets(lancuch);
         for (i=0;i<25;i++)
              if (lancuch==tablica[i][]) system("shutdown -s > nul"); //jeżeli wprowadzony łańcuch jest równy z i-tym elementem tablicy tablica wykonaj system(...)
         return(0);
    }
    Nie testowałem tego, pisałem wprost na forum, ale w załorzeniu (pomijam deklaracje zmiennych i przypisanie im wartości startowych):

    1. poproś o podanie łańcucha znaków i zapisz go do tablicy typu char o identyfikatorze lancuch;
    2. w pentli sprawdź czy lancuch jest jedną z wartości przechowywanych w tablica - tablicy 25 takich tablic jak lancuch
    3. jeżeli tak, zamknij system (" > nul" powoduje brak jakiegokolwiek komunikatu - jeżeli bawiłeś się już z shutdown.exe to wiesz, że jest to program konsolowy, który przy użyciu wyświetla nieco komunikatów)
    4. jeżeli wartość nie została znaleziona wykonaj return(0) - kończy program i przekazuje jako kod wyjściowy do systemu operacyjnego (jeszcze z MS-DOS - zmienna środowiskowa %errorlevel%) wartość 0 (zero)
    Ostatnio edytowane przez dj_mafiozo ; 17.02.2009 o 14:53


    Mój upload dla Precyl.pl: 569 190,4 MB (555,86 GB)

  6. #6
    Aktywny Użytkownik Awatar matek3005
    Dołączył
    19.10.2008
    Posty
    363
    Wątków
    3
    Siła reputacji
    11

    Domyślnie Odp: C++ shutdown

    Cytat Zamieszczone przez dj_mafiozo Zobacz posta
    Shutdown to nie WinAPI
    a kto twierdzi, że winapi? bo nie rozumiem

  7. #7
    Mgr. Inż. Uploadu Awatar dj_mafiozo
    Dołączył
    08.10.2008
    Mieszka w
    Wrocław
    Posty
    674
    Wątków
    119
    Siła reputacji
    21

    Domyślnie Odp: C++ shutdown

    Cytat Zamieszczone przez matek3005 Zobacz posta
    a kto twierdzi, że winapi? bo nie rozumiem
    Nikt nie twierdzi, ale moje wrodzone cechy jak perfekcjonizm i chęć niesienia pomocy kazały mi sprostować niedopowiedzenie autora poprzedniego postu, aby autor wątku, początkujący programista nie wyciągnął z tego błędnych wniosków


    Mój upload dla Precyl.pl: 569 190,4 MB (555,86 GB)

  8. #8
    Aktywny Użytkownik Awatar matek3005
    Dołączył
    19.10.2008
    Posty
    363
    Wątków
    3
    Siła reputacji
    11

    Domyślnie Odp: C++ shutdown

    z całym szacunkiem Panie Magistrze ale trudno dopatrzeć się w moim poście jakiegokolwiek niedopowiedzenia... jak dla mnie to po prostu Pana post był zdublowaniem mojego bo niczego nowego on nie wniósł. Oczywiście szanuje, że był Pan na tyle miły aby pofatygować się przeczytać moją skromną wypowiedź i jak to na człowieka wyższych sfer przystało skorygować ją pomimo, że nie wymagała tego jej treść. Być może słowo "albo" zawarte w moim poście umknęło Pana perfekcyjnej i jakże skromnej osobie

    żeby nie robić za dużego OT autorowi tematu radzę zaglądnąć na poniższe strony:
    Kod:
    http://www.intercon.pl/~sektor/cbx/
    http://kondel.ko.funpic.de/
    http://www.ithelpdesk.pl/
    no i najlepszą
    google.pl (gdzie jest bardzo dużo informacji oraz kursów na temat c++)
    pozdrawiam serdecznie

  9. #9
    Użytkownik Awatar Abradaba
    Dołączył
    08.01.2009
    Mieszka w
    Głuchołazy
    Posty
    146
    Wątków
    21
    Siła reputacji
    8

    Domyślnie Odp: C++ shutdown

    mozesz takze napisac w zywlym notatniku i zapisac z rozszezeniem *.bat:
    shutdown -s -t 10 -c "wiadomosc "

  10. #10
    Mgr. Inż. Uploadu Awatar dj_mafiozo
    Dołączył
    08.10.2008
    Mieszka w
    Wrocław
    Posty
    674
    Wątków
    119
    Siła reputacji
    21

    Domyślnie Odp: C++ shutdown

    Cytat Zamieszczone przez Abradaba Zobacz posta
    mozesz takze napisac w zywlym notatniku i zapisac z rozszezeniem *.bat:
    shutdown -s -t 10 -c "wiadomosc "
    Ja bym jeszcze dodał na początku małpę ("@") a na końcu coś takiego: ">nul".

    Małpa wyłącza "echo" dla danego polecenia (dla całości "@echo off" jako pierwsza linijka), ">nul" sprawia, iż system DOS (bo wieszcie lub nie, ale .bat, czyli plik wsadowy to jest DOS, a nie Windows, łatwo się przekonać próbując coś takiego na 64-bitowym Windowsie - brak wirtualnej maszyny MS-DOS) nie wyświetla nic. Technicznie rzecz biorąc jest to przekierowanie wyjścia na puste urządzenie, ale każdy programista powinien wiedzieć to wszystko, co tu poruszam...


    Mój upload dla Precyl.pl: 569 190,4 MB (555,86 GB)

  11. #11
    Zbanowany
    Dołączył
    28.11.2008
    Posty
    23
    Wątków
    7
    Siła reputacji
    0

    Domyślnie Odp: C++ shutdown

    Nie wiem jakiego środowiska używasz, być może potrafię pomóc, jeżeli korzystasz ze środowiska C++ Builder, lub podobnych bibliotek.
    W moim serwisie http://cyfbar.republika.pl w dziale: porady -> API znajdziesz poradę: Zamykanie windows z wyłączeniem zasilania za pomocą funkcji ExitWindowsEx.

    Gdyby kogoś interesował mirror i nie chce mu się zaglądać do serwisu Cyfrowy Baron, to wygląda to tak:

    Kod:
    void __fastcall TForm1::Button3Click(TObject* Sender)
    {
     HANDLE hToken;
     TOKEN_PRIVILEGES tkp;
     OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
     tkp.PrivilegeCount = 1;
     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
     AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
    
     ExitWindowsEx(EWX_FORCE | EWX_POWEROFF, 0);
    }