• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 319, comments - 22, trackbacks - 0, articles - 11
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Qt Quick (Qt User Interface Creation Kit)

            https://developer.qt.nokia.com/wiki/QML


            Qt Quick (Qt User Interface Creation Kit)

            The key new feature of the Qt 4.7 [doc.qt.nokia.com] and Qt Creator [developer.qt.nokia.com] 2.1 releases is Qt Quick [doc.qt.nokia.com]: a high-level UI technology that allows developers and UI designers to work together to create animated, touch-enabled UIs and lightweight applications. It includes:

            1. New Tools in the Qt Creator IDE: including a visual editor that allows UI designers and developers to cooperate, working on the same code in an iterative approach
            2. QML (Qt Meta-Object Language): an easy to use, declarative language
            3. QtDeclarative: a new module in the Qt library that enables a new declarative programming approach

            And while no C++ programming skills are needed to use Qt Quick, it is 100% based on Qt and can be extended from C++ (and other languages, thanks to the bindings), limited only by your creativity.

            Scope (Qt Creator 2.1 and Quick)

            • QML project wizard and project management (new file format for pure QML applications)
            • Advanced QML editor with syntax highlighting, code completion, integrated help features and more
            • Qt Quick Designer: Visual WYSIWYG editor to create Qt Quick user interfaces (technical preview)
            • Qt Quick Components: Common UI Elements that fit into platform Look & Feel

            QML vs. Widget-based GUI

            Qt beginners often ask: What option will be the best for creating my user interface. With Qt there are 3 techniques (wich can be integrated):

            • using Qt Designer to create *.ui files, a XML-based UI description
            • coding the setup of your UI in C++ with Qt widgets classes
            • write or visually design (or modeling with Qt Creator 2.1) QML files

            The HowTo is still to be done but use the tag qml vs widget [developer.qt.nokia.com] when searching and finding, thx :)

            Links

            Categories:

            posted @ 2011-08-16 23:15 RTY 閱讀(519) | 評論 (0)編輯 收藏

            posted @ 2011-08-14 08:36 RTY 閱讀(1835) | 評論 (0)編輯 收藏

                 摘要: http://yanboo.ycool.com/post.2749491.html(來自Qt文檔)Qt有兩種與插件有關的API。一種用來擴展Qt本身的功能,如自定義數據庫驅動,圖像格式,文本編解碼,自定義分格,等等,稱為Higher-Level API。另一種用于應用程序的功能擴展,稱為Lower-Level API。前一種是建立在后一種的基礎之上的。這里討論的是后一種,即用來擴展應用程序的Low...  閱讀全文

            posted @ 2011-08-10 07:34 RTY 閱讀(2073) | 評論 (0)編輯 收藏

            http://hi.baidu.com/51634780/blog/item/6e99de041d682689e850cd2a.html

            dll中非導出函數的調用
            這幾天在學習pe,對輸出表特別興趣。程序對導出函數調用,最終是對導出
            函數入口地址的調用,非導出函數的入口地址不在導出表里,所以其他程序

            無法

            調用非導出函數。
            本人剛開始的想法是在內存里修改dll的導出表,使非導出函數變成導出函

            數,

            供自己的程序調用。后來想到可不可以直接調用非導出函數的入口地址呢?

            感覺

            應該可以,有了這個想法后就馬上開始動手試驗。

            自己寫了個簡單的dll,其中有2個導出函數a1,b1,1個內部函數c1
            先用call的方法調用導出函數:a1
            invoke LoadLibrary,CTEXT('testdll.dll')
            mov @var1,eax        ;模塊句柄(也是模塊的基址)存入@var1 
            invoke GetProcAddress,@var1,CTEXT('a1')
            mov @lpProc,eax ;導出函數的入口地址存入@lpProc
            push 5      ;函數參數3
            push 9      ;函數參數2
            push hWnd      ;函數參數1
            call @lpProc      ;函數調用
            一切正常。

            再調用非導出函數試試,在調用非導出函數c1前,必須找到c1的相對虛擬
            地址,
            先用程序裝入dll
            invoke LoadLibrary,CTEXT('testdll.dll')
            mov @var1,eax    ;模塊句柄,也是模塊的基址
            然后運行程序,用OD調試,找到c1的入口地址:1000100C
            1000100C           55            push ebp
            1000100D           8BEC          mov ebp,esp
            1000100F           8B45 08       mov eax,dword ptr ss:[ebp+8]
            10001012           0345 0C       add eax,dword ptr ss:[ebp+C]
            10001015           C9            leave
            10001016           C2 0800       retn 8

            通過 @var1獲得模塊的基址是10000000
            那末c1的相對虛擬地址就是:1000100C-10000000=100c
            做好了這一步后,就可以在自己的程序里調用非導出函數了。
            調用非導出函數:
            invoke LoadLibrary,CTEXT('testdll.dll')
            mov @var1,eax       ;模塊句柄(也是模塊的基址)存入@var1
            add @var1,100ch    ;得到c1的入口地址
            push 5      ;函數參數2
            push 9      ;函數參數1
            call @var1      ;函數調用
            得到了想要的結果,一切ok!

            用這種方法可以調用別人dll的非導出函數。


            posted @ 2011-08-10 07:08 RTY 閱讀(1230) | 評論 (0)編輯 收藏

            http://blog.csdn.net/aca_jingru/article/details/2524697

            1. 本文轉自codeprojcet  <a href="http://www.codeproject.com/kb/dll/dllease.aspx">http://www.codeproject.com/KB/DLL/dllease.aspx</a>   

            load dll也就是load dll中的函數,一般是loadlibrary,GetProcAddress,每一步都要判斷函數返回是否正確,比較繁瑣,

            該作者干脆做了個封裝,將這些重復步驟封裝到一個bool的函數中,這樣只要在if語句中調用一下可以了,具體來看代碼:這里用到了c語言的可變參數,對此俺也不是很了解

             

            1. //GetProcAddresses  
            2. //Argument1: hLibrary - Handle for the Library Loaded  
            3. //Argument2: lpszLibrary - Library to Load  
            4. //Argument3: nCount - Number of functions to load  
            5. //[Arguments Format]  
            6. //Argument4: Function Address - Function address we want to store  
            7. //Argument5: Function Name -  Name of the function we want  
            8. //[Repeat Format]  
            9. //  
            10. //Returns: FALSE if failure  
            11. //Returns: TRUE if successful  
            12. BOOL GetProcAddresses( HINSTANCE *hLibrary,   
            13.     LPCSTR lpszLibrary, INT nCount, ... )  
            14. {  
            15.     va_list va;  
            16.     va_start( va, nCount );  
            17.   
            18.     if ( ( *hLibrary = LoadLibrary( lpszLibrary ) )   
            19.         != NULL )  
            20.     {  
            21.         FARPROC * lpfProcFunction = NULL;  
            22.         LPSTR lpszFuncName = NULL;  
            23.         INT nIdxCount = 0;  
            24.         while ( nIdxCount < nCount )  
            25.         {  
            26.             lpfProcFunction = va_arg( va, FARPROC* );  
            27.             lpszFuncName = va_arg( va, LPSTR );  
            28.             if ( ( *lpfProcFunction =   
            29.                 GetProcAddress( *hLibrary,   
            30.                     lpszFuncName ) ) == NULL )  
            31.             {  
            32.                 lpfProcFunction = NULL;  
            33.                 return FALSE;  
            34.             }  
            35.             nIdxCount++;  
            36.         }  
            37.     }  
            38.     else  
            39.     {  
            40.         va_end( va );  
            41.         return FALSE;  
            42.     }  
            43.     va_end( va );  
            44.     return TRUE;  
            45. }  
            1. 使用的例子:  
            1. <pre class="csharp" name="code"><pre class="csharp" name="code">#include <windows.h></windows.h>  
            2.   
            3. typedef int ( WINAPI *MESSAGEBOX )   
            4.     ( HWND , LPCSTR, LPCSTR, DWORD );  
            5. typedef int ( WINAPI *MESSAGEBOXEX )   
            6.     ( HWND , LPCSTR, LPCSTR, DWORD , WORD );  
            7.   
            8. void main(void)  
            9. {  
            10.     MESSAGEBOX lpfMsgBox = NULL;  
            11.     MESSAGEBOXEX lpfMsgBoxEx = NULL;  
            12.     HINSTANCE hLib;  
            13.     if(GetProcAddresses( &hLib, "User32.dll", 2,  
            14.         &lpfMsgBox, "MessageBoxA",  
            15.         &lpfMsgBoxEx, "MessageBoxExA" ) )  
            16.     {  
            17.         lpfMsgBox( 0, "Test1""Test1", MB_OK );  
            18.         lpfMsgBoxEx( 0, "Test2""Test2", MB_OK,   
            19.             MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US ) );  
            20.     }  
            21.     if ( hLib != NULL )  
            22.         FreeLibrary( hLib );  
            23. }  
            1. 是不是很好用呢 囧  

            posted @ 2011-08-10 07:04 RTY 閱讀(556) | 評論 (0)編輯 收藏

            網站地址:http://www.scintilla.org/SciTE.html

            SciTE(Scintilla Text Editor)是一個體積小巧的文本編輯器。雖然它沒有像
            MS OfficeOpenOffice那樣功能強大可比且體積大的怕人的辦公軟件。但是它對文本以及源各種源文件卻擁有強大的編輯能力,甚至可把它當作Dreamweaver,因為它不僅有其他文本編輯器的語法高亮顯示功能,它支持40 種文件類型的語法高亮顯示。光這點已經非常吸引人們的眼球,而且還可以達到自動補充完成以及輸出窗口(對于編程的人來說很方便的)。這樣也能省很多事情,盡管它的界面是簡潔甚至說簡陋的,但這并不妨礙它做為一個開發環境來使用。因為它默認情況下很多功能還沒有展現,需要我們手動設置。 SciTE的標簽窗口布局使你可以同時打開多個文件,在這件文件之間拷貝,執行搜索替換的操作。語法高亮顯示的功能有助于編輯web頁面和源代碼。其它的像PDF導出,word completion,多級的撤消,代碼樹,全屏和分屏功能也是很有用的。在可設置性上,SciTE是一個相當復雜的軟件,比較適合技術人員使用。

            scite - 軟件安裝

            大家首先到它的官網的下載頁面下載軟件或者根據下面的鏈接下載。 
            如果你是Windows系統的用戶,你可以選擇安裝版本和免安裝綠色版
            推薦使用免安裝綠色版。 
            如果你是Linux系統的用戶,你需要 GTK 2.8 以上版本的支持。 
            如果你使用的Fedora Core 5系統,點這里下載。 
            如果你使用的Debian/Ubuntu系統,點這里下載。 
            最后還有RPMs,點這里下載。 
            如果你想基于此軟件再開發用戶,請看下面的下載點: 
            Windows系統 SciTE 的源代碼:下載 
            Linux系統 SciTE 的源代碼:下載 

            scite - 配置文件

            (圖)設置菜單scite
            對于新手來說,如果沒有正確的配置,它就不是那么好使,比如選擇中文時候出現亂碼,縮進也不是你想象中的樣子。 
            由于配置參數不是采用圖形界面,而且出看配置代碼會比較混亂,所以大家要睜大眼睛好好看咯~ 程序中幾個比較重要的配置文件(都在 SctTE 目錄下面): 
            SciTEGlobal.properties 全局配置文件,一般不去改動。 
            SciTEUser.properties 用戶配置文件。對全局配置要改動的地方,都寫在這個文件里。 
            SciTE.properties 本地配置文件,也就是針對當前目錄的配置文件,會覆蓋全局和用戶配置文件。 
            html.properties 特定文件類型的配置文件,比如 html.properties就是專門針對網頁文件的配置文件。 
            SciTEGlobal.properties 是程序的核心配置文件,所有的配置信息都在這個文件里面。一般情況下我們是不要改動這個文件。為什么不能在這個里面修改呢,其實也不是不可以,主要是因為yidabu網站的測試,在重裝SciTE時,全局配置文件會被覆蓋,那么不再這文件修改那在哪修改呢? 這就用到了程序為我們提供的用戶配置文件 
            SciTEUser.properties 。你可以對照SciTE文本編輯器的幫助手冊,逐條查看對照 
            SciTEGlobal.properties ,把要修改的屬性記下來,寫到sciteuser.properties中,因為在用戶配置文件的配置優先于全局配置文件。而且在在重裝SciTE之后用戶配置文件則不會覆蓋掉的。

            scite - 常用快捷鍵

            Ctrl Keypad 放大文字 
            Ctrl Keypad- 縮小文字 
            Ctrl Keypad/ 還原文字大小到默認值 
            Ctrl Tab 在最近打開的兩個文件間循環 
            Tab 縮進一個tab. 在用scite寫筆記時, 每段一般按Tab縮進, 而不是按空格。 從網上復制一篇文章到scite文本編輯器,全選,按一下tab, 首行標題頂格,二級標題頂部,就完成所用的文檔格式化。 
            Shift Tab 取消一個tab的縮進 
            Ctrl BackSpace 從光標位置刪除到一個詞的開始處, 中文由于無法斷詞, 如果用的是中文標點,就變成一直刪除到行首了。如果用的英文標點,就刪除到上一個英文標點處 
            Ctrl Delete 從光標位置刪除到一個詞的結束處 
            Ctrl Shift BackSpace 從光標位置刪除到行首 
            Ctrl Shift Delete 從光標位置刪除到行尾 
            Ctrl Home 光標移動到文檔開始處 
            Ctrl Shift Home 從光標處開始選擇文本一直到行首 
            Alt Home 到顯示的行首。按End時光標只是移到行首第一個字的前面 
            Alt Shift Home 擴展選擇到行首 Ctrl End 光標移動到文檔結束處 
            Ctrl Shift End 從光標處選擇文本一直到文檔結束處 
            Alt End 光標移動到行尾 
            Alt Shift End 擴展選擇到行尾 
            Ctrl Keypad* 展開或收縮光標所在的折疊區域。這個很好記憶,這樣理解:*號很象圓形的折疊符號 
            Ctrl F2 創建或刪除一條書簽. 在寫很長的文檔或代碼時, 加一個書簽就很方便地可以跳來跳去 F2 跳到下一條書簽 
            Alt F2 擴展選擇到下一條書簽. 有什么用呢, 創建兩條書簽, 光標移動到要選中的開始處, 按快捷鍵, 兩條書簽之間的內容就選中了 
            Ctrl F3 **向文檔結束方向查找選中字符 這個功能很好用, 要在文檔內查找, 你不需象通常的那樣要按Ctrl F, 你只需要把光標放到詞內部或前后, 按Ctrl F3就自動在文檔內查找 如果要在文檔內查找中文, 由于中文無法斷詞, 要先手動選擇要查詢的詞, 再按快捷鍵. 說點題外話,既不媚外, 也不盲目地拔高傳統文化. 漢字有漢字的優點, 英文有英文的優點, 若一定要分出高下來, 是很難辦到的事情. 曾看到一些對傳統文化(如易經)很有偏好的人非常推崇中文, 認為是最優秀的文字, 是英文遠不能比的. 但在這里, 中文斷詞的問題怎么解決, 英文可以簡單地以空格來斷詞, 中文怎么辦? 至少在這個文內查找, 英文就比中文方便多了. 
            Ctrl Shift F3 **向文檔開始方向查找選擇字符 英文是 
            Find selection backwards, 字面翻譯是向后查找選中文字, 這個”向后”是比較容易引起歧義的, 譯為”文檔開始方向”就不存在這個問題 
            Ctrl Up Scroll up Ctrl Down Scroll down 
            Ctrl L **剪切光標所在行 這個很有用. 如果用記事本來寫日記或文檔, 剪切行就麻煩多了. 用scite來寫 讀書筆記什么的, 即使不作任何優化配置, 利用scite的快捷鍵也提高一些常用操作的效率也不錯 提示: 快捷鍵中L代表Line 這樣理解了以后, 就根本不用死記, 自然記住了這個快捷鍵的用法. 一個聰明的人性化的程序, 所有快捷鍵都是可以理解而不需要記憶的, 從這里也可以看出程序作者是否別具匠心
            Ctrl Shift T **復制光標所在行. 應用時可以右手按Ctrl Shift, 左手按T 
            Ctrl Shift L **刪除光標所在行 Ctrl T **和上一行互換位置 在 SciTE4AutoIt3中, 用Ctrl T調用Tidy整理源代碼. 為避免快捷鍵撞車, 打開 au3.properties, 找到 JdeB’s Tidy formatting program for Autoit3 條, 把快捷鍵改成Ctrl Shift Alt T, 或者修改 Scite用戶配置文件sciTEUser.properties 提示: 在這里T表示transpose, 即互換位置. **Ctrl D 復制高亮選中字符. 如果沒有高亮選擇字符, 則復制光標所在行 這是一個使用頻率比較高的快捷鍵, 在用 SciTE4AutoIt3寫代碼時, 要臨時改寫調試一句代碼, 按Ctrl D復制當前行, 按小鍵盤的-注釋掉當前行. 調試好后要用回原來代碼, 只要Ctrl Shift L刪除行, 再按小鍵盤的-取消注釋符號即可, 根本用不到手動選擇復制之類. 提示: 在這里D表示duplicate, 使用快捷鍵的另一個樂處就是記住了字母所代表的單詞, 對于程序來說, 多數編程資料是英文形式的, 因此務必知道各種縮寫的原型, 一則更容易理解記憶, 二則從某種意義上來說, 英語從某種意義上是程序設計的基礎. 
            Ctrl [ 光標移動到上一段, 加Shift的話是擴展選擇
            Ctrl ] 光標移動到下一段, 加Shift的話是擴展選擇 
            Ctrl Left 光標跳到上一詞. 加Shift的話是擴展選擇 
            Ctrl Right 光標跳到下一詞. 加Shift的話是擴展選擇 
            Ctrl / 光標跳到上一詞部分. 加Shift的話是擴展選擇 
            Ctrl \ 光標跳到下一詞部分. 加Shift的話是擴展選擇

            posted @ 2011-08-10 06:41 RTY 閱讀(730) | 評論 (0)編輯 收藏

            http://hi.baidu.com/xx375/blog/item/52f5ccd6ac7671dd51da4b52.html

            GetTempPath函數

            功能 獲取為臨時文件指定的路徑

            API中函數原形為: DWORD GetTempPath(DWORD nBufferLength, LPTSTR lpBuffer)  

            參數:  

            StrLen = GetTempPath(NAME_LEN, OutPath)  

            其中:  

            OutPath是輸出臨時文件夾名稱的變量,它的初始值為NAME_LEN個空格,函數調用后,就不是空格了,它會把取得的臨時文件夾名稱存入此變量。  

            NAME_LEN是告訴函數OutPath變量的長度。  

            StrLen:是取得的臨時文件夾名稱的長度。

            返回值  Long,裝載到lpBuffer的字符數。如當前緩沖區的長度不夠,不能容下整個路徑,則返回lpBuffer需要的長度。

                       零表示失敗。會設置GetLastError

            應用小例:

            CHAR OutPath[MAX_PATH];

            int StrLen = GetTempPath(MAX_PATH, OutPath);

            printf("輸出臨時文件夾名稱  = %s\n",OutPath);

            printf("臨時文件夾名稱的長度= 0x%x\n",StrLen);

            //輸出臨時文件夾名稱  = C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ (環境變量里有)

            //臨時文件夾名稱的長度= 0x23

            注解臨時路徑是由TMP環境變量指定的一個路徑。如TMP不存在,則是由TEMP環境變量指定的路徑。

            如果這兩個環境變量都不存在,就是當前目錄

            如果查看當前用戶的臨時文件夾,可以在開始-運行里面輸入%temp%,回車即可(一般為隱藏的)

             

            GetTempFileName函數

            這個函數包含了一個臨時文件的名字,它可由應用程序使用

            UINT GetTempFileName(

              PChar lpPathName:;     {路徑}

              PChar lpPrefixString:;   {前綴}

              UINT uUnique:;         {指定生成文件名的數字,文件名將根據參數2、參數3來生成}

              PChar   lpTempFileName: {文件名需要的緩沖區}

            ) {指定生成文件名的數字,如果參數30,則返回文件名長度}

            應用舉例:

            CHAR OutPath[MAX_PATH];

            int StrLen = GetTempPath(MAX_PATH, OutPath);

            CHAR Name[100];

            GetTempFileNameA(OutPath,"~xx",16,Name);

            printf("自定義唯一臨時文件夾名稱  = %s\n",Name);

            //因為16的十六進制是10,文件名會是: ~xx10.tmp

            //Name = C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\~xx10.tmp

             

            GetWindowsDirectory函數GetSystemDirectory函數用法一樣

            GetWindowsDirectory獲取Windows文件夾的路徑。GetSystemDirectory是獲取systrm32文件夾的路徑

            下面是講解GetSystemDirectory函數

            GetSystemDirectory 函數

            獲取systrm32文件夾的路徑。系統文件夾包含了諸如動態鏈接庫和驅動的系統文件。

            該函數最初是為了兼容問題而提供的。應用程序應該在Program File文件夾內存儲代碼和常駐數據。

            UINT WINAPI GetSystemDirectory(

            __out  LPTSTR lpBuffer,

            __in   UINT uSize

            );

            參數  

            lpBuffer String,用于裝載系統目錄路徑名的一個字串緩沖區。它應事先初始化成“路徑”字符串的長度+1。

                          通常至少要為這個緩沖區分配MAX_PATH個字符的長度  

            nSize LonglpBuffer字串的最大長度

            返回值

            如果函數成功,返回值是緩沖內容副本的長度,但該長度不包含結尾的NULL字符。如果該長度大于給定的長度,則返回值是所需的緩沖大小,且包含結尾的NULL字符。

            如果函數失敗,返回零值。

            備注

            應用程序不應該在系統目錄內創建文件。如果用戶運行在一個共享版本的Windows操作系統上,應用程序是不能訪問系統目錄的

            應用小例:

            string str;

            UINT size=GetSystemDirectory(NULL,0);

            CHAR *path=new CHAR[size];

            if (GetSystemDirectory(path,size) != 0)

            {

                   str = path;

            }

            delete[] path;



            posted @ 2011-08-09 07:32 RTY 閱讀(3547) | 評論 (0)編輯 收藏

            API太多(C++版) -- GetDriveType GetVolumeInformation 講解

            GetDriveType 函數

            頭文件在“winbase.hGetDriveType Kernel32.dll中的一個函數,   

            UINT GetDriveType (   LPCTSTR lpRootPathName    // root directory  );  

             

            函數功能  判斷磁盤類型  

            參數說明  lpRootPathName包含了根目錄路徑的字符串指針  

            返回值 (返回到EAX中為0 1 2 3 4 5 6) 

            0     DRIVE_UNKNOWN未知的磁盤類型  

            1     DRIVE_NO_ROOT_DIR說明lpRootPathName是無效的  

            2     DRIVE_REMOVABLE可移動磁盤  

            3     DRIVE_FIXED固定磁盤  

            4     DRIVE_REMOTE網絡磁盤  

            5     DRIVE_CDROM光驅  

            6     DRIVE_RAMDISKRAM

            應用小例

            #include <windows.h>

            int main()

            {

                   if(GetDriveType("C:\\") = = DRIVE_FIXED)  (DRIVE_FIXED或者是3 )

                   {

                       MessageBox(NULL,"固定磁盤","",MB_OK);

                   }

                   system("pause");

                   return 0;

            }

            GetVolumeInformation函數

            GetVolumeInformation函數返回有關文件系統和其根目錄調用中指定的卷的信息。在存在幾個常見的文件系統(如NTFSFATCDFS新的文件系統可能會影響存儲要求為應用程序,等,以便調用GetVolumeInformation可能會提供有價值的信息,您可以在您的應用程序中使用的開發中。若要計算磁盤空間和文件大小),也可以使用的某些信息此調用返回。

            函數功能  獲取與一個磁盤卷有關的信息  

            返回值    Long,非零表示成功,零表示失敗。會設置GetLastError

            GetVolumeInformation(

              PChar  lpRootPathName:;       {磁盤驅動器代碼字符串}

              PChar  lpVolumeNameBuffer:;          {磁盤驅動器卷標名稱}

              DWORD  nVolumeNameSize:;         {磁盤驅動器卷標名稱長度}

              PDWORD  lpVolumeSerialNumber:;       {磁盤驅動器卷標序列號}

              DWORD  var lpMaximumComponentLength:;  {系統允許的最大文件名長度}

               DWORD var lpFileSystemFlags:;         {文件系統標識}

              PChar  lpFileSystemNameBuffer:;          {文件操作系統名稱 FATNTFS}

              DWORD nFileSystemNameSize:            {文件操作系統名稱長度}

            )

            lpFileSystemFlags Long,用于裝載一個或多個二進制位標志的變量。

            對這些標志位的解釋如下:  

            FS_CASE_IS_PRESERVED文件名的大小寫記錄于文件系統  

            FS_CASE_SENSITIVE文件名要區分大小寫

            FS_UNICODE_STORED_ON_DISK文件名保存為Unicode格式  FS_PERSISTANT_ACLS文件系統支持文件的訪問控制列表(ACL)安全機制  FS_FILE_COMPRESSION文件系統支持逐文件的進行文件壓縮  FS_VOL_IS_COMPRESSED整個磁盤卷都是壓縮的  

            應用小例:

            #include <stdio.h>

            #include <windows.h>

            int main()

            {

                   char Root[] = "C:\\";

                   char Volumelabel[20];

                   DWORD SerialNumber;

                   DWORD MaxCLength;

                   DWORD FileSysFlag;

                   char FileSysName[10];

                   GetVolumeInformation( "C:\\",Volumelabel,255,&SerialNumber,&MaxCLength,&FileSysFlag,FileSysName,255);

                   printf("卷標名稱(Volumelabel) = %s\n",Volumelabel);

                   printf("卷標序列號(SerialNumber) = 0x%x\n",*(&SerialNumber));

                   printf("系統允許最大文件名長度(MaxCLength) = 0x%x\n",*(&MaxCLength));

                   printf("文件系統標識(FileSysFlag) = 0x%x\n",*(&FileSysFlag));

                   printf("文件系統名稱(FileSysName) = %s\n",FileSysName);

                   system("pause");

                   return 0;

            }

            posted @ 2011-08-09 07:29 RTY 閱讀(2578) | 評論 (0)編輯 收藏

            摘抄了部分網站的文章,主要還是用到Windows的API  GetVolumeInformation 這個函數主要用途是獲得文件系統信息

            1. 摘抄原文地址:
            http://tech.ddvip.com/2008-11/122655520092169.html
            http://hackdiy.com/I-214009.html

            2
            . 以下是源碼說明:
            聲明:

            GetVolumeInformation(
             lpRootPathName: PChar;        {磁盤驅動器代碼字符串}
             lpVolumeNameBuffer: PChar;      {磁盤驅動器卷標名稱}
             nVolumeNameSize: DWORD;       {磁盤驅動器卷標名稱長度}
             lpVolumeSerialNumber: PDWORD;    {磁盤驅動器卷標序列號}
             var lpMaximumComponentLength: DWORD; {系統允許的最大文件名長度}
             var lpFileSystemFlags: DWORD;    {文件系統標識}
             lpFileSystemNameBuffer: PChar;    {文件操作系統名稱}
             nFileSystemNameSize: DWORD      {文件操作系統名稱長度}
            ): BOOL;
            //舉例:procedure TForm1.FormCreate(Sender: TObject);
            var
             RootPath: array[0..20] of Char;
             VolName: array[0..255] of Char;
             SerialNumber: DWORD;
             MaxCLength: DWORD;
             FileSysFlag: DWORD;
             FileSysName: array[0..255] of Char;
            begin
             RootPath := 'C:';
             GetVolumeInformation(
              RootPath,
              VolName,
              255,
              @SerialNumber,
              MaxCLength,
              FileSysFlag,
              FileSysName,
              255
             );
             Memo1.Clear;
             with Memo1.Lines do
             begin
              Add(Format('磁盤驅動器代碼字符串:'+ #9#9 +'%s',[RootPath]));
              Add(Format('磁盤驅動器卷標名稱:'+ #9#9 +'%s',[VolName]));
              Add(Format('磁盤驅動器卷標序列號:'+ #9#9 +'%s',[IntToHex(SerialNumber,8)]));
              Add(Format('系統允許的最大文件名長度:'+ #9 +'%d',[MaxCLength]));
              Add(Format('文件系統標識:'+ #9#9#9 +'%d',[FileSysFlag]));
              Add(Format('文件系統名稱:'+ #9#9#9 +'%s',[FileSysName]));
             end;
            end;
            //效果圖:

            WinAPI: GetVolumeInformation - 讀取文件系統信息

            posted @ 2011-08-09 07:25 RTY 閱讀(366) | 評論 (0)編輯 收藏

            原創:

          1. 淺議Qt的事件處理機制 一

          2. 淺議Qt的事件處理機制 二

          3. Qt的內省機制剖析

          4. 夢工廠動畫與Qt

          5. QML與C++混合編程使用

          6. Qt/Qt Quick宏淺議

          7. Q_INVOKABLE與invokeMethod用法全解

          8. Qt 在symbian^3, windows 7 phone的用戶體驗

          9. Qt資源鏈接收藏

          10. Qt 好書好文推薦

          11. 諾基亞手機開發相關論壇網站推薦

          12. 創建Qt quick (qml) 應用程序

          13. Thread affinity與跨線程信號槽

          14. Qt的智能指針使用指南

          15. Qt的字符集編碼以及轉換

          16. QImage, QPixmap 的官方解釋摘錄

          17. Qt 認證考試有用鏈接

          18.  

          19. 譯文:

          20. 事件循環與線程 一   (Event,Thread and QObject)

          21. 事件循環與線程 二   (推薦)

          22. QML與現有Qt UI代碼的整合

          23.  

            轉帖:

          24. Qt源碼分析之信號和槽機制

          25. Qt源碼分析之QObject

          26. Qt事件和事件過濾器

          27. Qt版權介紹:GPL, LGPL 以及 Commercial 授權

          28. KDE/QT 與 GNOME/GTK 之爭

              


            請尊重原創作品和譯文。轉載請保持文章完整性,并以超鏈接形式注明原始作者主站點地址,方便其他朋友提問和指正。

          29. posted @ 2011-08-05 07:28 RTY 閱讀(583) | 評論 (0)編輯 收藏

            僅列出標題
            共31頁: First 8 9 10 11 12 13 14 15 16 Last 
            色狠狠久久AV五月综合| 97精品伊人久久久大香线蕉| 国产成人精品综合久久久久| 久久婷婷五月综合97色| 国产91色综合久久免费| 久久久久久极精品久久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 国产91久久精品一区二区| 国产精品九九久久免费视频| 伊人久久五月天| 国产精品久久久久影视不卡| 久久久久亚洲AV成人网| 亚洲欧美成人综合久久久| 青青草原1769久久免费播放| 伊人久久大香线蕉AV一区二区| 亚洲精品乱码久久久久久按摩 | 久久精品国产精品亚洲人人| 久久AV高潮AV无码AV| 婷婷久久综合九色综合98| 久久国产欧美日韩精品免费| 国内精品人妻无码久久久影院| 精品久久久久久国产三级| 久久久久久国产精品无码下载 | 性做久久久久久久久久久| 久久久久亚洲精品无码蜜桃| 久久久精品国产Sm最大网站| 人妻无码αv中文字幕久久琪琪布| 精品久久久无码中文字幕| 日韩av无码久久精品免费| 思思久久99热免费精品6| 人人狠狠综合久久亚洲婷婷| 狠狠色狠狠色综合久久| 思思久久99热免费精品6| 亚洲一区二区三区日本久久九| 中文字幕久久精品无码| 久久久青草青青国产亚洲免观| 72种姿势欧美久久久久大黄蕉| 伊人久久大香线蕉AV色婷婷色| 怡红院日本一道日本久久| 国产精品久久久久久吹潮| 一本一道久久综合狠狠老|