Delphi (7.) - Syst. repro a autodestrukce souboru
Nashromáždil jsem pro Vás zase nějaké zajímavé zdrojáky. Dnes budu psát o tom jak využít systémový reproduktor, tzv. beeper. Pokud jste zvyklí z Pascalu na funkci sound(), tak asi máte smůlu, protože ta v Delphi nefunguje. Teď vám poradím, jak na to...
Systémový reproduktor
1) Využití přímých vstupů na port:
procedure AsmShutUp; pascal; begin asm MOV AL, 0 OUT $61, AL end; end; procedure AsmBeep (Freq: Word); pascal; begin asm MOV AL, 3 OUT $61, AL MOV AL, $B6 OUT $43, AL MOV AX, Freq OUT $42, AL MOV AL, AH OUT $42, AL end; end;
Tohle jsou procedury v assembleru a jejich volání je jednoduché. Stačí jen napsat:
AsmBeep(Word(1193181 Div LongInt(Freq)));Tento program je ale použitelný jen pro Win9x a WinME. Windows NT, 2k a XP přímé psaní na porty z důvodu bezpečnosti prostě ignorují.
2) K využítí Windowsovského "cinknutí", slouží procedura
Windows.Beep(frekvence,trvání);
Autodestrukce *.exe souboru
Tato procedura vytvoří dávkový soubor, který smaže aplikaci a ukončí program. Našel jsem to někde v diskusi na netu a napadlo mě, že by to mohlo někomu ušetřit spoustu přemýšlení nad autodestrukcí exe souboru...
procedure DeleteMe;
var
BatchFile:TextFile;
BatchFileName:String;
ProcessInfo:TProcessInformation;
StartUpInfo:TStartupInfo;
begin
// vytvořit dávkový soubor
BatchFileName:=ExtractFilePath(application.exename)+'$$336699.bat';
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, ':try');
Writeln(BatchFile, 'del "' + application.exename + '"');
Writeln(BatchFile, 'if exist "' + application.exename + '"' + ' goto try');
Writeln(BatchFile, 'del "' + BatchFileName + '"');
CloseFile(BatchFile);
FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil, PChar(BatchFileName), nil, nil,False, IDLE_PRIORITY_CLASS,
nil, nil, StartUpInfo, ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
Close;
end;
Vyšlo 15.12.2001, v blogu: 0 1 2 3 4 5 6 7 8
Děkuji, že jste se rozhodl(a) přečíst tento článek. Budu rád i za komentář. Pokud Vás tento článek zaujal a rádi byste jej doporučili ostatním, podpořte mně prosím tím, že věnujete minutku svého času a uděláte mi reklamu na linkuj.cz, vybrali.sme.sk či jagg.cz. Přeji příjemné čtení
Poslední články
- OpenGL (9.) - Generování textur a vylepšení FarClip Distance
- Zoner Callisto (1.) - Export do GIFu
- 3D Studio MAX (9.) - Vytváření odlesků vodní hladiny
- OpenGL (8.) - Slovníček pojmů v OpenGL
- OpenGL (7.) - Detekce kolizí, načtení mapy a textury v jpg souboru
- OpenGL (6.) - Co je to MiniGL
- OpenGL (5.) - Urychlení pomocí glDrawElements
- Delphi (7.) - Syst. repro a autodestrukce souboru
- OpenGL (4.) - FullScreen
- 3D Studio MAX (8.) - Tvorba hořící zápalky
- 'DOOM' 3D Engine techniques
- OpenGL (3.) - Procházení scénou
- 3D Studio MAX (7.) - 3D text
- 3D Studio MAX (6.) - Vznášející se dým
- Adobe Photoshop (3.) - Textura vodní hladiny