線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1595
推到 Plurk!
推到 Facebook!

讀registry內"預設值"的內容

尚未結案
cwh
一般會員


發表:4
回覆:9
積分:2
註冊:2002-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-22 08:48:32 IP:210.243.xxx.xxx 未訂閱
我想不同語系中讀取某一registry的"預設值" 例:中文中我的電腦為 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\(預設值) 有沒有在各語系中通行的讀取方法。 謝謝
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-22 18:07:45 IP:221.169.xxx.xxx 未訂閱
cwh:不知你要的是怎麼?但各語系中通行的讀取方法不見得是
使用registry!
舉例看看是不是你要的:
拉一個Button,Label,Memo。
#include "ShlObj.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //取得系統環境變數
  PItemIDList pidl;
  char FavPath[255];
  int temp[11];
  temp[0] = CSIDL_DESKTOP; // 桌面
  temp[1] = CSIDL_DESKTOPDIRECTORY; // 桌面目錄
  temp[2] = CSIDL_FONTS; // 字體目錄
  temp[3] = CSIDL_NETHOOD; // 網路芳鄰
  temp[4] = CSIDL_PERSONAL; // My Documents 目錄
  temp[5] = CSIDL_PROGRAMS; // 開始選單程序目錄
  temp[6] = CSIDL_RECENT; // 存放最近開啟文件快捷方式的目錄
  temp[7] = CSIDL_SENDTO; // "傳送至" 目錄
  temp[8] = CSIDL_STARTMENU; // 開始選單目錄
  temp[9] = CSIDL_STARTUP; // 開始選單啟動項目錄
  temp[10] = CSIDL_FAVORITES; // 我的最愛目錄
  int i=3;  // 我要找網路芳鄰
  SHGetSpecialFolderLocation(Handle, temp[i], &pidl);
  SHGetPathFromIDList(pidl, FavPath);
  Label1->Caption=FavPath;
  Memo1->Clear();
  // 顯示所有目錄於Memo1上。
  FindFilesInDirectory (Label1->Caption "\\","*.");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FindFilesInDirectory (AnsiString &directory,AnsiString fileext)
{
  AnsiString SFileName;
  WIN32_FIND_DATA filedata ;  // Structure for file data
  HANDLE filehandle ;         // Handle for searching
  // Pass 1 - Search for the files within the directory.
  filehandle = FindFirstFile ((directory   fileext).c_str (), &filedata) ;
  if (filehandle != INVALID_HANDLE_VALUE)
  {
    do  {
      SFileName=filedata.cFileName;
      if ( SFileName!= "." && SFileName != "..") {
        Memo1->Lines->Add(directory   SFileName);
      }        } while (FindNextFile (filehandle, &filedata)) ;
    FindClose (filehandle) ;
  }
  // 找子目錄
  String dir = directory   fileext ;
  filehandle = FindFirstFile ((directory   fileext).c_str (), &filedata) ;
  if (filehandle != INVALID_HANDLE_VALUE)
  {
    do  {
      if ((filedata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0
           && String (filedata.cFileName) != "."
           && String (filedata.cFileName) != "..") {
        FindFilesInDirectory (directory   filedata.cFileName   "\\","*.") ;
      }
    } while (FindNextFile (filehandle, &filedata)) ;
    FindClose (filehandle) ;
  }    //  Application->ProcessMessages () ;
  return ;
}    
Andy Chang
------
Andy Chang
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-23 09:57:53 IP:210.69.xxx.xxx 未訂閱
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders 左邊中 Desktop 為桌面 Startup 為啟動 Start Menu 為開始功能表 它們指向的路徑會依照不同語系 Windows 而不同 但是都是透過相同機碼 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders 相同名稱而存取 所以應該不會有不同語系, 要存取不同機碼的問題, 只是機碼的值可能不同
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
cwh
一般會員


發表:4
回覆:9
積分:2
註冊:2002-10-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-23 10:08:13 IP:210.243.xxx.xxx 未訂閱
謝謝大家的回答, 我想知道的是每個registry的建立時都有個 "(預設值)"這個欄位, 在中文它叫"(預設值)",在其他語系我不知道要如何去讀它的內容 謝謝
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-23 10:26:14 IP:221.169.xxx.xxx 未訂閱
引言: 謝謝大家的回答, 我想知道的是每個registry的建立時都有個 "(預設值)"這個欄位, 在中文它叫"(預設值)",在其他語系我不知道要如何去讀它的內容 謝謝
我提供的方式你就不要煩惱這問題,如DESKTOP,繁體顯示桌面,其他系統 ?尤其是雙語系統!網路芳鄰,不同系統顯示稱呼也不同。 朝簡單的道路走吧!你再找找CSIDL_的定義,我的方式應該 可以。 Andy Chang
------
Andy Chang
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-23 12:58:25 IP:61.221.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50258 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37382 發表人 - conundrum 於 2004/09/23 13:01:20
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-27 11:16:20 IP:210.69.xxx.xxx 未訂閱
引言: 謝謝大家的回答, 我想知道的是每個registry的建立時都有個 "(預設值)"這個欄位, 在中文它叫"(預設值)",在其他語系我不知道要如何去讀它的內容 謝謝
double click 就可以看到, (預設值) 實際上沒有值, 用 Registry.ReadString('') 讀取即可 (這是兩個一撇, 不是一個兩撇)

// Delphi 7
// 顯示 Registry 中 Service 的狀態
// 請先放上 Memo1 元件, 再貼上本文
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  Registry, WinSvc;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
 
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}    procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
  Registry: TRegistry;
  RegistryKeyCount : Integer;
 
  RootKey : String;
  Key : String;
 
  KeyName : String;
  default : String;      SubKey: TStringList;
  ValueName: TStringList;    begin    // HKEY_CLASSES_ROOT\.DeskLink
    RootKey := 'HKEY_CLASSES_ROOT';
    Key := '\.DeskLink';        Memo1.Text:= RootKey   Key   '\';
    Memo1.Lines.Add('--------------------------------------------------------------------');
    Registry:=TRegistry.Create;
    Subkey := TStringList.Create;
    ValueName := TStringList.Create;        Registry.RootKey:=HKEY_CLASSES_ROOT;
    Registry.OpenKey(Key   '\', False);
    Registry.GetKeyNames(SubKey);        RegistryKeyCount := SubKey.Count-1;
    for I:=0 to RegistryKeyCount do
    begin
      if Registry.OpenKey(Key   '\' SubKey[I], False) then
      begin
        KeyName := SubKey[i];
        Registry.GetValueNames(ValueName);            default := Registry.ReadString('');            Memo1.Lines.Add('預設值: '  default);
        Registry.CloseKey;
      end;
    end;  //for I:=0 to Val.Count-1 do
 
    SubKey.Clear;
    ValueName.Clear;
    Registry.Free;
end;
 
end.
發表人 - pcboy2 於 2004/09/27 11:22:16
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
cwh
一般會員


發表:4
回覆:9
積分:2
註冊:2002-10-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-27 11:22:56 IP:210.243.xxx.xxx 未訂閱
謝謝pcboy2, 這就是我的問題。
cwh
一般會員


發表:4
回覆:9
積分:2
註冊:2002-10-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-29 09:37:21 IP:210.243.xxx.xxx 未訂閱
在conundrum回答的問題中雖未直接點出我要的答案, 但在看他給的資料時,讓我想到解決的方法, 所以把分數給了conundrum。 而pcboy2貼上時我已經結案了,不好意思。 就此說明一下pcboy2的疑問.
系統時間:2024-05-04 21:38:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!