讀registry內"預設值"的內容 |
尚未結案
|
cwh
一般會員 發表:4 回覆:9 積分:2 註冊:2002-10-02 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
引言: 謝謝大家的回答, 我想知道的是每個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 發送簡訊給我 |
|
cwh
一般會員 發表:4 回覆:9 積分:2 註冊:2002-10-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |