全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2940
推到 Plurk!
推到 Facebook!

請問環境變數(environment variable)?如何應用

尚未結案
eric wei
一般會員


發表:5
回覆:10
積分:3
註冊:2002-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-18 02:20:07 IP:61.225.xxx.xxx 未訂閱
各位前輩: 在平常的開發應用中,請問環境變數(environment variable)?是如何被應用,及程式要如何去讀取其值,可以說明一下程式要如何寫.給個範例
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-18 09:33:31 IP:203.217.xxx.xxx 未訂閱
environment variable主要有四個API可read, write GetEnvironmentStrings: 取得environment block之指標 FreeEnvironmentStrings: free block GetEnvironmentVariable: 由environment block中取得指定之variable SetEnvironmentVariable:設定某一環境變數 以下範例展示如何在TMemo上顯示所有環境變數 [note]每一均以null byte間隔, 最後整個block之結束也是一個null byte
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
  p,env:pchar;
begin
  Memo1.lines.clear;
  env:=GetEnvironmentStrings;
  p:=env;
  while (p^<>#0) do begin
    s:='';
    while (p^<>#0) do begin
      s:=s p^;
      inc(p);
    end;
    memo1.Lines.add(s);
    inc(p);
  end;
  FreeEnvironmentStrings(env);
end;
發表人 - ccchen 於 2002/08/18 09:34:02
eric wei
一般會員


發表:5
回覆:10
積分:3
註冊:2002-07-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-18 19:47:12 IP:61.225.xxx.xxx 未訂閱
ccchen版主:    environment variable主要有四個API可read, write GetEnvironmentStrings: 取得environment block之指標 FreeEnvironmentStrings: free block GetEnvironmentVariable: 由environment block中取得指定之variable SetEnvironmentVariable:設定某一環境變數 以下範例展示如何在TMemo上顯示所有環境變數 [note]每一均以null byte間隔, 最後整個block之結束也是一個null byte    procedure TForm1.Button1Click(Sender: TObject); var s:string;     p,env:pchar; begin   Memo1.lines.clear;   env:=GetEnvironmentStrings;   p:=env;   while (p^<>#0) do begin //紅色的部份是什麼意思; s:=''; //是指p的指標不等於空白嗎? while (p^<>#0) do begin s:=s p^; inc(p); end; memo1.Lines.add(s); inc(p); end; FreeEnvironmentStrings(env); end; 我在Form1拉了一個Tmemo1和TButton1,並執行卻出現Unable to Create Process是我那做錯了,可以請您再指導小弟。
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-18 21:58:16 IP:203.217.xxx.xxx 未訂閱
1. p^ 由於p是一個指標, 指向字串, p^表示dereference, 即是取出指標內容之char. 因為Environmemt block每一值均以null byte間隔, 故判斷若其內容是否為0 p^ <> #0 2. Unable to Create Process是否在程式一起始就有問題? 還是在click Button1之後, 我想應與這些程式碼無關, 我測試過應無問題. 若還是不行, post整個程式到"會員求助程式檔案上傳區" 我看看
David
一般會員


發表:13
回覆:26
積分:7
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-17 14:55:41 IP:61.221.xxx.xxx 未訂閱
引言: environment variable主要有四個API可read, write GetEnvironmentStrings: 取得environment block之指標 FreeEnvironmentStrings: free block GetEnvironmentVariable: 由environment block中取得指定之variable SetEnvironmentVariable:設定某一環境變數 以下範例展示如何在TMemo上顯示所有環境變數 [note]每一均以null byte間隔, 最後整個block之結束也是一個null byte
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
  p,env:pchar;
begin
  Memo1.lines.clear;
  env:=GetEnvironmentStrings;
  p:=env;
  while (p^<>#0) do begin
    s:='';
    while (p^<>#0) do begin
      s:=s p^;
      inc(p);
    end;
    memo1.Lines.add(s);
    inc(p);
  end;
  FreeEnvironmentStrings(env);
end;
發表人 - ccchen 於 2002/08/18 09:34:02
版主您好: 有關您提供的這幾個API是提供CURRENT PROCESS的設定讀取[我是從delphi6 win32 development's references查閱],能否進一步請問,如何設定永久環境變數...也就是設定變數後,在win95/98就會改變autoexec.bat,在nt/2k/xp就放入環境變數中,我是想做個安裝檔安裝後就能設定環境變數,系統便能使用,如果是暫時的便恐怕不符需求... 在win95/98我可以進行修改autoexec.bat然後重新開機===OK 在winnt/2k/xp我原本做法是增加register內的機碼,後來發現雖然從 系統>進階>環境變數 中有出現,但似乎沒真正設定好導致程式並未抓到變數內容,需要我logout再login後才能辨識,不知我還少了哪個initial 指令.... 我在win32 help中有查到一個指令 BOOL SetEnvVariable(LPSTR szName, LPSTR szValue, CMO cmo) 依說明看,似乎能95-2k通吃適用,可是在delphi中無法辨識,也找不到該use哪個檔,不知版主知道這指令嗎... 還是有其他方法作得到...
系統時間:2024-04-20 18:18:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!