Q&A

  • Re: 부팅시점 알아내려면?
장은석 wrote:

> 컴퓨터가 부팅되는 시점에서 응용프로그램을 실행시키고자 합니다.

> 컴퓨터가 부팅되었는지 알려면 어찌해야할지..?

> 그리고 실행 이후에는 다시 프로그램을 실행시킬수 없고

> 다시 재부팅 했을때만 실행시키고 싶은데 어떤 방법이 있을지..?

>

>



아래 코드를 참고 해 보세요.

부팅시에 원하는 프로그램을 실행시킬수 있을 겁니다.

그럼, 즐거운 프로그래밍 되시길~

procedure TForm1.Button1Click(Sender: TObject);

var

reg: TRegistry;



begin

reg := TRegistry.Create;



with reg do begin

RootKey := HKEY_LOCAL_MACHINE;

LazyWrite := false;

OpenKey('SoftwareMicrosoftWindowsCurrentVersionRunOnce',

false);

WriteString('데몬','데몬프로그램 실행화일 ');

CloseKey;

free;

end;

end;

2  COMMENTS
  • Profile
    장은석 2000.02.23 00:19
    답변 주셔서 감사합니다.



    그러나 레지스트리에 시작프로그램을 등록하면 부팅시에 자동 실행은 되지만

    그 이후에 그러니까 가령 프로그램이 부팅과 동시에 실행이 된후

    임의로 종료 했다고 하면 다시 exe파일을 실행해도 재 실행이 안되고

    오직 부팅시에 한번만 실행하길 바라는거거든요..



    제가 잘못 알고있는 건가요?

    질문이 다소 엉뚱한것 같은데 그래도 방법이 있을지요?



    레지스트리 키를 생성해서 실행시에 값을 집어넣고 종료시에 바꾸는 방법도

    생각해 봤는데 그것 말고 컴퓨터가 방금 부팅되었는지를 알아내는 함수 같은건

    없는건지요?



    즐거운 프로그래밍 하시길..

  • Profile
    구창민 2000.02.23 00:59
    장은석 wrote:

    > 답변 주셔서 감사합니다.

    >

    > 그러나 레지스트리에 시작프로그램을 등록하면 부팅시에 자동 실행은 되지만

    > 그 이후에 그러니까 가령 프로그램이 부팅과 동시에 실행이 된후

    > 임의로 종료 했다고 하면 다시 exe파일을 실행해도 재 실행이 안되고

    > 오직 부팅시에 한번만 실행하길 바라는거거든요..

    >

    > 제가 잘못 알고있는 건가요?

    > 질문이 다소 엉뚱한것 같은데 그래도 방법이 있을지요?

    >

    > 레지스트리 키를 생성해서 실행시에 값을 집어넣고 종료시에 바꾸는 방법도

    > 생각해 봤는데 그것 말고 컴퓨터가 방금 부팅되었는지를 알아내는 함수 같은건

    > 없는건지요?

    >

    > 즐거운 프로그래밍 하시길..





    은석님 구창민입니다.

    구지 시작시점을 아실 필요가 없을 듯 합니다.

    말씀하신 건 파라메타를 주셔서 윈도우가 처음 시작시 한번만 실행되게

    하시면 되구요.

    그리고, 윈도우 시작이후에 그냥 그 어플을 실행시키려 한다면

    특정 파라메타를 주고 시작하지 않았으니 실행이 안되도록

    파라메타를 검사해 주시면 되죠.

    파라멧타 사용하실 줄은 아시죠? 아래 형태로 되어있습니다.

    // ParamCount : 명령행 인자의 수

    // ParamStr : 명령행 인자의 각각의 문자열, 공백이나 tab으로 분리

    그럼, 즐거운 프로그래밍 하세요~



    참고로 부팅시 한번만 실행되는 예제를 올려드릴께요.



    -윈도우 부팅시 프로그램을 매번(한번) 실행

    // 윈도우가 처음 기동할때 실행되는 프로그램을 등록하는 예제입니다

    // 아래 OnStartup() 의 RunOnce 파라미터는 한번만 실행할지 매번 실행할지의

    // 여부를 지정합니다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Registry;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure OnStartup(const PgmTitle, CmdLine: String; RunOnce: boolean);

    var

    Key: String;

    Reg: TRegIniFile;

    begin

    if RunOnce then // 원도우즈 구동시 한번만 실행할때

    Key := 'Once'+#0

    else

    Key := #0;



    Reg := TRegIniFile.Create('');

    Reg.RootKey := HKEY_LOCAL_MACHINE;

    // WriteString()의 두번째 파라미터는 Ident로서 RunOnce 키에 등록되는 값(Value)들을

    // 구분하기 위한 이름입니다

    Reg.WriteString('SoftwareMicrosoftWindowsCurrentVersionRun' + Key,

    PgmTitle, CmdLine);

    Reg.Free

    End;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    // 여기서는 Ident 로서 임의의 숫자(GetTickCount)를 사용해서

    // "test.exe" 실행파일을 윈도우 부팅시 매번 실행하게 지정합니다

    OnStartup(IntToStr(GetTickCount), 'c:test.exe', False);

    end;



    end.