Windows下的api 以及 C语言的一些api

目录

ZwWaitForSingleObject

Syntax

Parameters

iswpunct()——判断一个宽字符是不是标点符号

signal()——设置一个函数来处理信号

qsort——排序函数

memset——对某个地址开始的连续字节设置

memmove——字节拷贝

字符数组和字符指针和const 字符指针

GetProcessMemoryInfo 函数——进程对内存的使用情况

MoveFileExA函数——延迟删除

RegisterClass 宏  

DefWindowProc 宏

 IsIconic 函数

HWND和HDC和HINSTANCE

PathFileExists——不精确判断文件和目录是否存在的

CreateFile——以何种模式创建文件

生成dump

TranslateMessage


windows下的,参考文档msdn

c语言标准库中的,https://en.cppreference.com

ZwWaitForSingleObject

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-zwwaitforsingleobject

Syntax

NTSYSAPI NTSTATUS ZwWaitForSingleObject(
  HANDLE         Handle,
  BOOLEAN        Alertable,
  PLARGE_INTEGER Timeout
);

Parameters

Handle

[in] A handle to the object.

Alertable

[in] A boolean value that specifies whether the wait is alertable.

Timeout

[in, optional] An optional pointer to a time-out value that specifies the absolute or relative time at which the wait is to be completed. A negative value specifies an interval relative to the current time. The value should be expressed in units of 100 nanoseconds. Absolute expiration times track any changes in the system time. Relative expiration times are not affected by system time changes.

Note  If the call to the ZwWaitForSingleObject function occurs in user mode, you should use the name "NtWaitForSingleObject" instead of "ZwWaitForSingleObject".

iswpunct()——判断一个宽字符是不是标点符号

 <cwctype>

https://en.cppreference.com/w/cpp/string/wide/iswpunct

signal()——设置一个函数来处理信号

C 库函数 

https://www.runoob.com/cprogramming/c-function-signal.html

qsort——排序函数

头文件:

<cstdlib>(stdlib.h)

函数签名:

void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));

排序原则(老记不住怎么判断排序是升序还是降序):

int compar (const void* p1, const void* p2);

返回值

意味着

<0

p1指向的元素排在p2指向的元素前面

=0

p1指向的元素与 p2指向的元素相等

>0

p1指向的元素排在p2指向的元素后面

源码:

第一个参数没有强制转为(void*)

qsort(region.holes, region.nholes, sizeof(rcContourHole), compareHoles);

注意比较函数的函数签名

static int compareHoles(const void* va, const void* vb)
{
	const rcContourHole* a = (const rcContourHole*)va;
	const rcContourHole* b = (const rcContourHole*)vb;
	if (a->minx == b->minx)
	{
		if (a->minz < b->minz)
			return -1;
		if (a->minz > b->minz)
			return 1;
	}
	else
	{
		if (a->minx < b->minx)
			return -1;
		if (a->minx > b->minx)
			return 1;
	}
	return 0;
}

memset——对某个地址开始的连续字节设置

对memset函数的感觉是,就像某些人见了很多次也还很陌生一样。

头文件:

<cstring>(string.h)

函数签名:

void * memset ( void * ptr, int value, size_t num );

函数功能:

将ptr中的前num个字节用,每个字节都设置成value (转化为unsigned char)。注意是字节字节!

通常为新申请的内存做初始化工作。在一段内存块中填充某个给定的值,它是对较大的结构体或者数组进行清零操作的一种最快方法。

源码:

unsigned short tmp[MAX_VERTS_PER_POLY*2];
memset(tmp, 0xff, sizeof(unsigned short)*MAX_VERTS_PER_POLY*2);

memmove——字节拷贝

头文件

<cstring>(string.h)

函数签名

    void * memmove ( void * destination, const void * source, size_t num );

函数功能

拷贝num个字节 从 source到destination。允许有重叠。为了防止溢出,source和destination指向的内存均至少包含num个字节。

源码

	if (size)
		memmove(path+req, path+orig, size*sizeof(dtPolyRef));

http://www.cplusplus.com/reference/cstdlib/qsort/?kw=qsort

http://www.cplusplus.com/reference/cstring/memset/?kw=memset

strcmp——比较字符串

https://www.cplusplus.com/reference/cstring/strcmp/

int strcmp ( const char * str1, const char * str2 );

字符数组和字符指针和const 字符指针

https://www.cnblogs.com/GODYCA/archive/2013/01/31/2888331.html

1.内存存储位置

2.初始化规则

GetProcessMemoryInfo 函数——进程对内存的使用情况

https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-getprocessmemoryinfo

见 https://blog.csdn.net/u012138730/article/details/90055485 中例子怎么使用的。

MoveFileExA函数——延迟删除

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefileexa

MoveFileEx()函数的第三个参数使用MOVEFILE_DELAY_UNTIL_REBOOT, 在系统里面注册一个延迟删除/重命名操作——放在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\PendingFileRenameOperations

RegisterClass 宏  

winuser.h 

#ifdef UNICODE
#define RegisterClass  RegisterClassW
#else
#define RegisterClass  RegisterClassA
#endif // !UNICODE

https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-registerclassw

注册一个窗口类,在随后的CreateWindow 或者 CreateWindowEx 中调用。(Registers a window class for subsequent use in calls to the CreateWindow or CreateWindowEx function.)

(Note  The RegisterClass function has been superseded by the RegisterClassEx function. You can still use RegisterClass, however, if you do not need to set the class small icon.

set the class small icon 这个什么玩意 )
 

    WNDCLASS    wc;                        // Windows Class Structure
    memset(&wc, 0, sizeof(WNDCLASS));
    // 设置一堆值
    wc.style            =
    wc.lpfnWndProc        =
    wc.cbClsExtra        =
    wc.cbWndExtra        =
    wc.hInstance        =
    wc.hIcon            =
    wc.hCursor            =
    wc.hbrBackground    =
    wc.lpszMenuName        =
    wc.lpszClassName    =

    if (!RegisterClass(&wc))                                    // Attempt To Register The Window Class
    {
        return false;                                            // Return FALSE
    }
    //.....中间一堆值的设置以后 调用CreateWindow
    // Create The Window
    HWND _hWnd=CreateWindow(		L"OpenGL",							  // Class Name
							title,									// Window Title
							dwStyle,
							window_x, window_y,					// Window Position
							width,	// Calculate Window Width
							height,	// Calculate Window Height
							NULL,								// No Parent Window
							NULL,								// No Menu
							_hInstance,						// Instance
							NULL);							   // Dont Pass Anything To WM_CREATE
	if(_hWnd == NULL)
	{
		return false;
	}

重要变量:wc.lpfnWndProc 

这个RegisterClass是为了可以创建自己的窗口类,虽然windows也有很多预设的窗口类。

DefWindowProc 宏

#ifdef UNICODE
#define DefWindowProc  DefWindowProcW
#else
#define DefWindowProc  DefWindowProcA
#endif // !UNICODE

https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-defwindowproca

调用默认的窗口过程处理函数。一般都是自定义的一个窗口过程处理函数,最后没有处理的再调用这个。窗口过程处理函数在 窗口类 的一个成员变量中设置  wc.lpfnWndProc

(Calls the default window procedure to provide default processing for any window messages that an application does not process. This function ensures that every message is processed. DefWindowProc is called with the same parameters received by the window procedure.)

 IsIconic 函数

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-isiconic

窗口是不是最小化(Determines whether the specified window is minimized (iconic).)

BOOL IsIconic( HWND hWnd );

HWND和HDC和HINSTANCE

HWND和HDC都是句柄,不过前者是HWND是窗口句柄,HDC是设备描述表的句柄。

hWnd(Handle of Window,也可以这么说:h是类型描述,表示句柄;wnd是变量对象描述,表示窗口)是窗口句柄,其中包含窗口的属性。例如,窗口的大小、显示位置、父窗口。

hDC(Handle to Device Context)是图像的设备描述表,窗口显示上下文句柄,其中可以进行图形显示。

利用hDC=GetDC(hWnd),可以获得一个窗口的图形设备描述表。可以通过ReleaseDC()函数释放。

hWnd句柄是描述一个窗口的形状、位置、大小、是否显示、它的父窗口、兄弟窗口、等等的一组数据结构;  
hDC句柄是一个实实在在的用于具体表现这个窗口时,需要对这个窗口有个场合来实现的地方。

hWnd是窗体句柄;hDC是设备场景句柄。
hWnd与窗口管理有关;hDC与绘图API(GDI函数)有关。
hWnd是windows给窗口发送消息(事件)用的;hDC是把窗口绘制在屏幕上用的。
有了hWnd,可以使用API的GetDC()函数得到与其相关的hDC:hDC=GetDC(hWnd)。

PathFileExists——不精确判断文件和目录是否存在的

      access()                     (C ,  Windows and Linux)

      PathFileExists()         (Windows API ,  Windows)——https://docs.microsoft.com/zh-cn/windows/win32/api/shlwapi/nf-shlwapi-pathfileexistsa

CreateFile——以何种模式创建文件

CreateFile 函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。 
  文件 
 pipes
  邮槽 
  通信资源 
  磁盘驱动器(仅适用于 windowsNT ) 
  控制台 
  文件夹(仅用于打开)

HANDLE CreateFile(
 LPCTSTR lpFileName,    // 指向文件名的指针 
 DWORD dwDesiredAccess,    // 访问模式(写 / 读) 
 DWORD dwShareMode,    // 共享模式 
 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全属性的指针 
 DWORD dwCreationDisposition,   // 如何创建 
 DWORD dwFlagsAndAttributes,   // 文件属性 
 HANDLE hTemplateFile    // 用于复制文件句柄 
);

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea

DWORD dwCreationDisposition,   // 如何创建 值常用有:——获取上一个错误 用GetLastError() 函数

生成dump

//创建DBGHLEP所需要的dmp信息
BOOL CreateDumpHelpFile(PEXCEPTION_POINTERS pException, PTCHAR szDumpFile)
{
 MINIDUMP_EXCEPTION_INFORMATION M;
 M.ThreadId = GetCurrentThreadId();
 M.ExceptionPointers = pException;
 M.ClientPointers = 0;
 HANDLE hDump_File = CreateFile(szDumpFile,
  GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
 if (hDump_File == INVALID_HANDLE_VALUE)
 {
  if (GetLastError() == ERROR_FILE_EXISTS)
  {
  }
  else
  {
  }
 }
 else
 {
  MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDump_File,
   MiniDumpNormal, (pException) ? &M : NULL, NULL, NULL);
  CloseHandle(hDump_File);

 }
 return TRUE;
}

TranslateMessage

https://zouzhongliang.com/index.php/2018/06/08/translatemessage/

https://blog.csdn.net/yaotuzhi/article/details/80069671

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值