Site hosted by Angelfire.com: Build your free website today!


Win32 API函数(部分)


ExitWindowsEx()函数
 功能∶关闭Windows
 用法∶ExitWindowsEx(1,1);

FreeLibrary32W()函数
 原形:DWORD FAR PASCAL FreeLibrary32W(HINSTANCE hLibModule)
 功能:在16位程序中释放32位的DLL

GetProcAddress32W()函数
 原形:LPVOID FAR PASCAL GetProcAddress32W(HMODULE hModule,LPCSTR lpszProc)
   其中∶hModule=handle of DLL module
      lpszProc=name of function
 功能:在16位程序中获得32位DLL中函数的地址(32位)

LineTo()函数
 在BC++Buider中的用法:
  LineTo((HDC)Image1->Canvas->Handle,横坐标,纵坐标);
  其中使用了TImage构件。

LoadLibraryEx32W()函数
 原形:HINSTANCE FAR PASCAL LoadLibraryEx32W(LPCTSTR lpLibFileName,HANDLE hFile,DWORD dwFlags)
 功能:在16位代码中调用32位的DLL
 用法:HINSTANCE hInstance=LoadLibraryEx32W("***.DLL",NULL,0);

lstrlen()函数
 功能∶获取字符串的长度
 用法∶int lenth=lstrlen("字符串");

MessageBeep()函数
 用法:MessageBeep(0);

MessageBox()函数
 用法:MessageBox((HWND)Application->Handle,"内容","标题",方式);
    其中方式有:MB_OK,MB_OKCANCEL,MB_YESNOCANCEL,MB_RETRYCANCEL等。
 返回值:未创建返回0,成功则返回IDOK,IDYES,IDNO,IDCANCEL,IDABORT等。

MoveToEx()函数
 在BC++Buider中的用法:
  MoveToEx((HDC)Image1->Canvas->Handle,横坐标,纵坐标,NULL);
  其中使用了TImage构件。
 注:最后一个参数是返回原先位置的指针结构。

PostMessage()函数
 功能∶向指定窗口发送消息,立刻返回。消息放到窗口的应用程序对列中。
 用法∶PostMessage(窗口句柄,消息,wParam参数,lParam参数);
 在BC++Builder中,窗口句柄=GetWindow((HWND)Application->Handle,GW_HWNDPREV);
 返回值∶0(失败)

RegCloseKey()函数
 功能∶释放注册表中指定关键字的句柄
 原形∶LONG RegCloseKey(HKEY hkey)

RegDeleteKey()函数
 功能:在注册表中删除一个键
 原形:LONG RegDeleteKey(HKEY hkey,LPCTSTR lpszSubKey)

RegDeleteValue()函数
 功能:在注册表中从一个键中删除一个值
 原形:LONG RegDeleteValue(HKEY hkey,LPCTSTR lpszValue)
    (hkey=键句柄;lpszValue=要删除的值名)

RegOpenKeyEx()函数
 功能:获得一个键的句柄
 原形:LONG RegOpenKeyEx(HKEY hkey,LPCTSTR lpszSubKey,DWORD dwReserved,REGSAM samDesired,PHKEY phkResult)
 参数:键句柄(可以是预定义的句柄,也可以是一个以前打开的句柄),要打开的子键,0,安全性访问屏蔽码,要打开键的句柄
  安全性访问屏蔽码(常量):
  KEY_CREATE_LINK:允许创造一个符号链接  1
  KEY_CREAT_SUB_KEY:允许创造子键     2
  KEY_ENUMERATE_SUB_KEYS:允许列举子键   3
  KEY_EXECUTE:允许读访问         4
  KEY_NOTIFY:允许改变通知         5
  KEY_QUERY_VALUE:允许查询子键数据    6
  KEY_SET_VALUE:允许设置子键数据     7
  KEY_WRITE: 2和7的组合
  KEY_ALL_ACCESS:6、3、5、2、1、7的组合
  KEY_READ:6、3、5的组合
  预定义的句柄(4个):HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,
            HKEY_USERS, HKEY_LOCAL_MACHINE
 返回值∶成功时 ERROR_SUCCESS
 调用:HANDLE hkey;
    RegOpenKeyEx( , ,0, ,&hkey);

ReQueryValueEx()函数
 功能∶检索与打开的注册表关键字有关的指定值名字的类型和数据
 原形∶ReQueryValueEx(HKEY hkey,LPCTSTR lpszValueName,LPDWORD lpdwReserved,LPDWORD lpdwType,LPBYTE lpbData,LPDWORD lpcbData)
 参数∶要检索的键句柄,要检索的键名地址,保留,值类型存储区地址,数据存储区地址,数据长度存储区地址
 返回值∶成功时 ERROR_SUCCESS

RegSetValueEx()函数
 功能:向一个打开的注册表的键中存储数据
 原形:LONG RegSetValueEx(HKEY hkey,LPCTSTR lpszValueName,DWORD dwReserved,DWORD fdwType,CONST BYTE *lpbData,DWORD cbData)
 参数:键,值,NULL,值类型,值数据,值数据长度

SendMessage()函数
 功能∶向指定窗口发送消息,等到消息被处理后才返回。
    消息不放到窗口的应用程序对列中。
 用法∶SendMessage(窗口句柄,消息,wParam参数,lParam参数);
    在BC++Builder中
    窗口句柄=GetWindow((HWND)Application->Handle,GW_HWNDPREV);
 返回值∶接收消息的窗口的窗口函数的返回值。

SetPixel()函数
 功能:在指定坐标画点。
 在BC++Buider中的用法:
  SetPixel((HDC)Image1->Canvas->Handle,横坐标,纵坐标,RGB(红色值,绿色值,蓝色值));

ShellExecute()函数
 原形:ShellExecute(HWND hwnd,LPCSTR lpOperation,LPCSTR lpFile,LPCSTR lpParameters,LPCSTR lpDirectory,INT nShowCmd)
 参数说明:父窗口句柄(调用GetDesktopWindow()函数得到);"open"或"print";"文件名";"参数字串";"缺省目录";打开方法(SW_SHOWNORMAL)。
 头文件:shellapi.h?
 注:ShellExecute()函数可以通过关联执行程序(文件名用如"**.txt")。

SystemParametersInfo()函数
 用法∶SystemParametersInfo(97,true,NULL,0);锁定功能键
    SystemParametersInfo(97,false,NULL,0);解锁功能键

WinExec()函数
 用法:WinExec("文件名.exe",窗口状态);
 其中常用的窗口状态有 SW_SHOWMAXIMIZED
 注意∶这是一个过时的函数。

wsprintf()函数
 功能:把字符串,数字等合并成字符串(char *类型,而不是AnsiString类型)
 用法:wsprintf(字符串名,"%[-][#][0][最小字符数][.最小字符数]类型",变量);
 其中: - 表示填充输出右端并左对齐,
    # 表示在16进制值前加0x,
    0 表示输出值应用0填充字符段中未使用的宽度,
   类型有s((LPSTR)字符串),u(无符号十进制整型数),
      x(无符号16进制整型数),c(字符变量),d(有符号十进制整型数),
      lu(无符号十进制长整型数),lx(无符号16进制长整型数)
 例如:wsprintf(String1,"%s%d",(LPSTR)"窗口宽度为:",Form1->Width);
  或:wsprintf(String1,"窗口宽度为:%d",Form1->Width);



从16位程序到32位程序应注意的问题:

1.Win32平台中的基本类型的长度:
char 8位;    short 16;    int  32;
long 32;     float 32(IEEE);  double 64(IEEE);
ULONG 32;     USHORT 16;     UCHAR 8;
DWORD 32;     BOOL  32;     BYTE  8;
WORD 16;     LONGLONG 64;   DWORDLONG 64;
LARGE_INTEGER 64。

2.函数和常数
GetWindowWord()、GetClassWord()等函数不能用了(因为句柄是32位的),
可用GetWindowLong()、GetClassLong()等函数。
把GWW_*常数改成GWL_*常数,把GCW_*常数改成GCL_*常数(GCW_ATOM例外)。

3.消息参数
wParam为32位;
在Win16中,有的lParam中储存了一个句柄(16位)和一个变量(16位,可能在HIWORD),
在Win32中,lParam就只能存放一个句柄(32位)。

用条件编译的方法编写可移植的C代码示例:
switch(message)
 {
 case WM_COMMAND:
  #if defined(_WIN32)||defined(WIN32)
  wmId=LOWORD(wParam); wnEvent=HIWORD(wParam);
  #else
   wmId=wParam; wnEvent=HIWORD(lParam);
  #endif
 }