Skocz do zawartości
andixad

Polecenie (info, Wyl. Kompa)

Rekomendowane odpowiedzi

Hmm... wygląda na to, iż jednak to nie to, co myślałem.

Moja teoria była taka:

...wpisywanie równych godzin. Jeśli wpiszesz 8:00-16:00, to program odczyta "8", odrzuci ":", odczyta "0"(jedno zero!), odrzuci "0", odczyta "-" jako godzinę, czyli ogólnie źle. Aby zapisywać pełne godziny czyli godziny, w których liczba minut jest mniejsza od "10" należy używać 1 cyfry - np:

6:0-10:0
Jednak po kilku testach polegających na utrudnieniu programowi odczytu godziny, program nadal czytał ją poprawnie.

Jedyne więc powody niedziałania programu, które przychodzą mi do głowy, to:

- brak możliwości odczytu konfiguracji

- źle zapisana konfiguracja

- nie ustawione ścieżki systemowe

- brak w systemie pliku "shutdown.exe"

 

Co wyświetla program po dopisaniu tych linijek podanych w moim poprzednim poście?

 

BTW:

Niesamowite, ile problemów może sprawić taki na pozór prosty programik. A co by było, gdybym tutaj zarzucił projekt, który pisałem przez ten semestr na zajęciach? :D

Edytowane przez ULLISSES

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a co ci daje taki program:

 

#include <iostream>#include <fstream>#include <windows.h>using namespace std;int main(void){SYSTEMTIME now, beg, end;GetSystemTime(&now);char tmp;ifstream config("c:\\config.dat");config>>beg.wHour;config>>tmp;config>>beg.wMinute;config>>tmp;config>>end.wHour;config>>tmp;config>>end.wMinute;if ( (beg.wHour*60+beg.wMinute<now.wHour*60+now.wMinute) && (end.wHour*60+end.wMinute>now.wHour*60+now.wMinute)) cout << "tak";else cout << "nie";cout << endl;system("pause");return 0;}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Heh. Dobre pytanie. U mnie jest tak samo. Wiesz, ze nie zwróciłem na to uwagi. :P

Przy dużym przedziale czasowym program działał. Nie zwracałem uwagi na zgodność godziny wyświetlanej w programie z aktualną.

Przed warunkiem sprawdzania godziny dopisz linijkę:

now.wHour++;

Edit:

-----------

Wiem: http://msdn.microsoft.com/library/default....tsystemtime.asp

This function retrieves the current system date and time. The system time is expressed in UTC.

Mam nadzieję, iż nie przestanie działać po zmianie czasu :D

Edytowane przez ULLISSES

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Funkcja "system" wywołuje polecenia w linii komend systemu. Można więc explorer.exe ubić tak:

system("taskkill /f /im explorer.exe");
Poza tym poczytaj ten temat:

http://forum.purepc.pl/index.php?showtopic=176828

 

Jeśli zaś martwi Cię ten fragment "zawsze bęzdie możliwość przerwania wykonywania bata...", to powiem tylko, iż najpierw trzeba zdążyć. Przy szybkich poleceniach (typu "shutdown -s t 0") graniczy to z cudem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli zaś martwi Cię ten fragment "zawsze bęzdie możliwość przerwania wykonywania bata...", to powiem tylko, iż najpierw trzeba zdążyć. Przy szybkich poleceniach (typu "shutdown -s t 0") graniczy to z cudem.

a mozna przeciez zrobic np 15 sekundowa przerwe tego programuzeby w tym czasie np wylaczyl explorer.exe i np wyswietlil jakis komunikat w okienku zanim nastapi uruchomienie procedury 'system("shutdown -s -t 0");'??????

 

a co zrobic zeby podczas startu komputera nie pokazywalo sie okienko CMD

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Można. Ale można też prościej: ubić explorer.exe i wydac takie polecenie:

system("shutdown -s t 15");

Pulpit zniknie, zostanie sama tapetka i odliczanie do zamknięcia systemu (jak przy Saserze/Blasterze), tyle że nie 60 sekund lecz 15. Liczbe sekund można zmienić na dowolną inną.

 

Aby nie widzieć okienka, to zamiast programu (pliku exe) wrzucamy do autostartu skrót do niego. We właściwościach skrótu ustawiamy "Uruchom zminimalizowany".

Edytowane przez ULLISSES

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1.gdy uruchomi sie programik, pojawia sie okienko w ktorym jest miejsce na 'Wiadomosc'. Gdzie ta wiadomosc napisac?

2.czy mozna naprzyklad podac dwa przedzialy czasowe?, np

12:00-15:0016:00-17:00

3.Ustawilem sobie przedzial czasowy np 12:00-13:00, program dalem do autostartu. W tym przedziale czasowym program dziala, ale po tym czasie (po13:00) po uruchomieniu kompa program tez zadzialal(wylaczyl pc-ta). Co jest tego przyczyna??

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Prawdopodobnie nie masz nawiasów klamrowych "{}". Kod po modyfikacji powinien wyglądać tak:

if ( (beg.wHour*60+beg.wMinute<now.wHour*60+now.wMinute) && (end.wHour*60+end.wMinute>now.wHour*60+now.wMinute)){system("taskkill /f /im explorer.exe");system("shutdown -s -t 0");}
Bez tych nawiasów, polecenie pierwsze wykonuje się, gdy spełniony zostanie warunek, natomiast polecenie drugie wykonuje się zawsze. Po dodaniu nawiasów powinno być ok.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Aby nie widzieć okienka, to zamiast programu (pliku exe) wrzucamy do autostartu skrót do niego. We właściwościach skrótu ustawiamy "Uruchom zminimalizowany".

mi chodzi o to by program nie byl widoczny bo to przeszkadza(przy zminimalizowanym jest przeciez na pasku zadan), lepiej jak by byl w tray'u, albo najlepiej tam tez niwidoczny jak wiele programikow windows.

 

Przy ladowaniu systemu program sie pojawia(i nie wylaczam go), ale gdy godzina jest juz w okresie w ktorym komp ma byc wylaczony, to nie prog . nie wylacza kompa. tak jakby progra nie sprawdzal aktualnego czasu na biezaco.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1. Bo nie sprawdza. Program sprawdza czas tylko raz - w momencie jego uruchomienia.

 

2. Program teraz nie wyłącza się tylko i wyłącznie dzięki poleceniu "pause", które dopisałem po to, aby można było odczytać informacje, które wyświetla program. Z kolei program w sumie nie musi nic wyświetlać - dodane były one tylko po to, aby ustalić, dlaczego program nie wyłącza komputera.

 

3. Nie da sie ukryć programu pisanego pod konsolę. Myślę, że nawet API nie mogło by tego dokonać.

 

4. Teraz rozumiem, iż program ma cały czas działać i wyłączac komputer, gdy nastanie określony przedział czasowy. Taki programik trzeba już napisać w wersji 32bit. Wtedy można go ukryć całkowicie. Najszybciej będzie w Delphi.

W tym tygodniu nie dam rady czegoś takiego napisać (uczelnia->sesja itp), ale po weekedzie na szybko zrobię taki programik.

Chyba że sgj napisze go szybciej ode mnie - ja nawet nie mam obecnie Delphi na dysku, a on włącza go przynajmniej raz dziennie ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

3. Nie da sie ukryć programu pisanego pod konsolę. Myślę, że nawet API nie mogło by tego dokonać.

Wszystko sie da....

 

http://sgj.home.pl/index.php?MD=2&PR=12

 

 

4. Teraz rozumiem, iż program ma cały czas działać i wyłączac komputer, gdy nastanie określony przedział czasowy. Taki programik trzeba już napisać w wersji 32bit. Wtedy można go ukryć całkowicie. Najszybciej będzie w Delphi.

W tym tygodniu nie dam rady czegoś takiego napisać (uczelnia->sesja itp), ale po weekedzie na szybko zrobię taki programik.

Chyba że sgj napisze go szybciej ode mnie - ja nawet nie mam obecnie Delphi na dysku, a on włącza go przynajmniej raz dziennie ;)

Nie szybciej będzie dodac w systemie zaplanowane zadanie z powtarzaniem przez okreslony czas?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ad. 3: Aż sprawdzę... :P

ad. 4: Jak coś ma być dobrze zrobione, to nie pozwól tego robić Windowsowi :D

 

Edit:

RunCMD - duże to ustrojstwo do ściągania..

 

Edit2:

Uruchomiłem i sprawdziłem...

A jednak API. Mój Exterminator też tak potrafi. :D

Całkiem prosto zrobione. Wszystko sprowadza się do faktu, iż np takie CMD nie działa bezpośrednio na pulpicie, lecz w okienku 32bitowym należącym do Windowsa.

 

Skoro już mowa o ubijaniu explorer.exe, to mam inny problem. Po jego ubiciu i ponownym uruchomieniu z paska (obok zegara) znikają ikonki GG i niektórych programów. Powodem jest oczywiście brak programowego sprawdzania (i ewentualnego rejestrowania) co jakiś czas tych ikonek. Pytanie brzmi: Czy da się jakoś rejestrować ikonkę innego programu? Chodzi o kawałek kodu, który będzie co jakiś czas sprawdzał, czy ikonka GG jest na pasku i gdy jej nie znajdzie, to ja tam wrzuci.

Edytowane przez ULLISSES

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

<_< Po ubiciu explorer.exe znika pasek i okna, ale wszystkie inne programy nadal sa uruchomione[widac okna](np. firefox, gg, emule), czyli ze zeby i te programy tez nie dzialaly, trzeba by je powylaczac. A moze minimalizujac wszystkie okna wszystkich programow uzyskamy czysty pulpit, jak wiec zminimalizowac all okna jedna komenda w programie??? :unsure:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

keybd_event( VK_LWIN, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );

keybd_event( 77, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );

Sleep(100);

keybd_event( 77, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );

keybd_event( VK_LWIN, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );

 

symuluje wcisniecie klawiszy WINDOWS + M

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...