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 阅读(498) | 评论 (0)编辑 收藏

posted @ 2011-08-14 08:36 RTY 阅读(1819) | 评论 (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 阅读(2034) | 评论 (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 阅读(1191) | 评论 (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 阅读(542) | 评论 (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 阅读(704) | 评论 (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 阅读(3517) | 评论 (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 阅读(2540) | 评论 (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 阅读(344) | 评论 (0)编辑 收藏

原创:

  • 浅议Qt的事件处理机制 一

  • 浅议Qt的事件处理机制 二

  • Qt的内省机制剖析

  • 梦工厂动画与Qt

  • QML与C++混合编程使用

  • Qt/Qt Quick宏浅议

  • Q_INVOKABLE与invokeMethod用法全解

  • Qt 在symbian^3, windows 7 phone的用户体验

  • Qt资源链接收藏

  • Qt 好书好文推荐

  • 诺基亚手机开发相关论坛网站推荐

  • 创建Qt quick (qml) 应用程序

  • Thread affinity与跨线程信号槽

  • Qt的智能指针使用指南

  • Qt的字符集编码以及转换

  • QImage, QPixmap 的官方解释摘录

  • Qt 认证考试有用链接

  •  

  • 译文:

  • 事件循环与线程 一   (Event,Thread and QObject)

  • 事件循环与线程 二   (推荐)

  • QML与现有Qt UI代码的整合

  •  

    转帖:

  • Qt源码分析之信号和槽机制

  • Qt源码分析之QObject

  • Qt事件和事件过滤器

  • Qt版权介绍:GPL, LGPL 以及 Commercial 授权

  • KDE/QT 与 GNOME/GTK 之争

      


    请尊重原创作品和译文。转载请保持文章完整性,并以超链接形式注明原始作者主站点地址,方便其他朋友提问和指正。

  • posted @ 2011-08-05 07:28 RTY 阅读(566) | 评论 (0)编辑 收藏

    仅列出标题
    共31页: First 8 9 10 11 12 13 14 15 16 Last