Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых) |
![]() |
eXeL@B —› Основной форум —› Лоадер меняющий время |
Посл.ответ | Сообщение |
|
Создано: 02 февраля 2005 02:33 · Личное сообщение · #1 |
|
Создано: 02 февраля 2005 06:08 · Личное сообщение · #2 |
|
Создано: 03 февраля 2005 00:27 · Личное сообщение · #3 |
|
Создано: 03 февраля 2005 04:23 · Личное сообщение · #4 |
|
Создано: 04 февраля 2005 00:14 · Личное сообщение · #5 monrus: читай дальше исходник универсального загрузчика ps: извиняюсь за стиль, некрасивые алгоритмы и корявость работы с указателями - лень дальше оптимизировать pps: размер экзешника должен получится ровно 1,5 кБ //==================================================================== ==== // uniloader.cpp // Universal loader for day-trial shareware by R0xeed // Управляется командной строкой (в ярлыке) со следующими праметрами: // 1 - имя исполняемого файла шароварной проги (в кавычках) // 2 - день (цифры) // 3 - месяц (цифры) // 4 - год (цифры) // Пример: // "E:\Uniloader.exe" "exe.exe" 15 1 2005 // -> перед запуском exe.exe будет установлена дата 15 января 2005 года //==================================================================== ==== #include <windows.h> #define MAX_ARGUMENTS_COUNT 8 //-------------------------------------------------------------------- ---- long __cdecl strtol ( const char * pstr ) { int cCurr ; long lTotal ; cCurr = *pstr++ ; lTotal = 0 ; while (cCurr!=(int)'\0') { lTotal = 10 * lTotal + (cCurr - '0') ; cCurr = *pstr++ ; } return ( lTotal ) ; } //-------------------------------------------------------------------- ---- int __cdecl strtoi (const char * pstr) { return ( (int)strtol(pstr) ) ; } //-------------------------------------------------------------------- ---- int ParseCmdLn(char* pCmdLn, char* argv[MAX_ARGUMENTS_COUNT]) { int argc = 0; char* ptr = pCmdLn; while(*ptr != '\0') { while(*ptr==' ' || *ptr=='\t') ptr++; if(*ptr=='\"') { ptr++; if (*ptr!='\"') argv[argc++] = ptr; while(*ptr!='\"' && *ptr!='\0') ptr++; } else { if(*ptr>='0' && *ptr<='9') { argv[argc++] = ptr; while(*ptr!='\0' && (*ptr>='0' && *ptr<='9') ) ptr++; } } if (*ptr=='\0') break; *ptr = '\0'; ptr++; } return argc; } //-------------------------------------------------------------------- ---- char* CutProgrPathFromArg(char* arg) { char* lastSlash; char* ptr = arg; while(*ptr != '\0') { if(*ptr=='\\' || *ptr=='/') lastSlash = ptr; ptr++; } *lastSlash = '\0'; return arg; } //-------------------------------------------------------------------- ---- void SetDate(WORD day, WORD month, WORD year) { SYSTEMTIME sysTime; GetSystemTime(&sysTime); sysTime.wDay = day ; sysTime.wMonth = month; sysTime.wYear = year; SetSystemTime(&sysTime); } //==================================================================== ==== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLn, int nCmdShow) { char* argv[MAX_ARGUMENTS_COUNT]; int argc = ParseCmdLn(GetCommandLine(), argv); if (argc<5) { MessageBox(NULL, "There is not enough arguments in a command line", "Universal loader", MB_OK); return 0; } SYSTEMTIME sysTime; GetSystemTime(&sysTime); WORD currDay = sysTime.wDay; WORD currMonth = sysTime.wMonth; WORD currYear = sysTime.wYear; SetDate( strtoi(argv[2]), strtoi(argv[3]), strtoi(argv[4]) ); int shex = (int)ShellExecute(NULL, "open", argv[1], NULL, CutProgrPathFromArg(argv[0]), SW_SHOW); if (shex<=32) { MessageBox(NULL, "ShellExecute error", "Universal loader", MB_OK); SetDate(currDay, currMonth, currYear); return 0; } Sleep(1000); SetDate(currDay, currMonth, currYear); return 1; } [FFILE=8f07_uniloader.zip] ![]() |
|
Создано: 04 февраля 2005 00:40 · Личное сообщение · #6 |
![]() |
eXeL@B —› Основной форум —› Лоадер меняющий время |