VC中利用API函数获取系统信息

合集下载

[C#]使用API获取设置系统热键和快捷键

[C#]使用API获取设置系统热键和快捷键

[C#]使⽤API获取设置系统热键和快捷键⼩颗⾖的思路是:想要编⼀个⼩窗⼝程序,功能是打开某游戏后,按某个键然后⿏标⾃动重复点击游戏某个地⽅,再按某个键⿏标停⽌点击,这个问题涉及到全局键盘的捕获和释放,然后才是模拟⿏标(或键盘)按键第⼀部分:先说捕获键盘某键,即获取设置系统热键和快捷键⾸先引⽤空间为using System.Runtime.InteropServices;(⼀)第⼀种⽅法:先导⼊API://注册热键的api[DllImport("user32")]public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);//注册热键的api(注意这⾥是返回逻辑值,参数为句柄,热键ID,组合键,键符)//解除注册热键的api[DllImport("user32")]public static extern bool UnregisterHotKey(IntPtr hWnd, int id);调⽤API:下边这段⽤于注册热键的两句可以放到某⼦程序先运⾏RegisterHotKey(this.Handle, 8888, 0, Keys.F4);//注册热键RegisterHotKey(this.Handle, 9999, 0, Keys.F5);//捕获键盘事件protected override void WndProc(ref Message m){switch (m.Msg){case 0x0312: //这个是window消息定义的注册的热键消息if (m.WParam.ToString().Equals("8888")) //这是我们注册的那個热键{action();//开始⼯作⾃⼰去写......}if (m.WParam.ToString().Equals("9999")){stop();//停⽌⼯作⾃⼰去写......}break;}base.WndProc(ref m);}释放热键的语句可以放到formleaveg事件中去处理private void Form1_Leave(object sender, EventArgs e){UnregisterHotKey(this.Handle, 888);//释放热键UnregisterHotKey(this.Handle, 999);}(⼆)第⼆种⽅法:导⼊API跟上边有点不同:[DllImport("user32.dll")]private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk);(注意这⾥返回的是整数,参数略有不同:要定义热键的窗⼝的句柄,热键ID不能与其它ID重复,组合键(没有时为0),热键值)[DllImport("user32.dll")]private static extern int UnregisterHotKey(IntPtr hwnd, int id);调⽤API:/// <summary>/// 注册热键/// </summary>/// <param name="hwnd">窗⼝句柄</param>/// <param name="hotKey_id">热键ID</param>/// <param name="fsModifiers">组合键(没有为0)</param>/// <param name="vk">热键</param>public bool RegKey(IntPtr hwnd, int hotKey_id, int fsModifiers, int vk){bool result;if (RegisterHotKey(hwnd, hotKey_id, fsModifiers, vk) == 0)//注册失败返回0{result = false;}else{result = true;}return result;}注销热键:public void UnRegKey(IntPtr hwnd, int hotKey_id){UnregisterHotKey(hwnd, hotKey_id);}热键编号VK_ESCAPE = 27;//escVK_UP = 38;//↑VK_DOWN = 40;//↓VK_LEFT = 37;//←VK_RIGHT = 39;//→......组合键码:private const int MOD_ALT = 0x1; //ALTprivate const int MOD_CONTROL = 0x2; //CTRLprivate const int MOD_SHIFT = 0x4; //SHIFTprivate const int MOD_WIN = 0x8;//windows⼩结:感觉第⼆种还不如第⼀种⽅法⽅便.第⼆部分:模拟⿏标点击导⼊API:[DllImport("user32")]private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);const int MOUSEEVENTF_MOVE = 0x0001;const int MOUSEEVENTF_LEFTDOWN = 0x0002;const int MOUSEEVENTF_LEFTUP = 0x0004;const int MOUSEEVENTF_RIGHTDOWN = 0x0008;const int MOUSEEVENTF_RIGHTUP = 0x0010;const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;const int MOUSEEVENTF_MIDDLEUP = 0x0040;const int MOUSEEVENTF_ABSOLUTE = 0x8000;在某个⼦程序中调⽤即可(本例当然是放到时钟周期事件中即可)mouse_event(MOUSEEVENTF_MOVE, 0, 0, 0, 0); //移动⿏标,mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//⿏标左键按下mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//⿏标左键抬起,注意按下,抬起才算⼀次单击 //mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);//⿏标右键按下//mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);//⿏标右键抬起第三部分:模拟键盘就没这么复杂了,差不多就象下边这些语句了:textBox1.Focus(); //某控件得到焦点SendKeys.Send("^a"); //Ctrl+ASendKeys.Send("+(ab)"); //Shift+"ab"SendKeys.Send("+ab"); //Shift+'a'+'b'SendKeys.Send("{DEL}"); //DeleteSendKeys.Send("{ENTER}"); //EnterSendKeys.Send("{a 10}"); //"aaaaaaaaaa"...其它的慢慢去查.。

VC函数大全

VC函数大全

VC 函数大全1.API之网络函数WNetAddConnection创建同一个网络资源的永久性连接WNetAddConnection2创建同一个网络资源的连接WNetAddConnection3创建同一个网络资源的连接WNetCancelConnection结束一个网络连接WNetCancelConnection2结束一个网络连接WNetCloseEnum结束一次枚举操作WNetConnectionDialog启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource枚举网络资源WNetGetConnection获取本地或已连接的一个资源的网络名称WNetGetLastError获取网络错误的扩展错误信息WNetGetUniversalName获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称WNetGetUser获取一个网络资源用以连接的名字WNetOpenEnum启动对网络资源进行枚举的过程2.API之消息函数BroadcastSystemMessage将一条系统消息广播给系统中所有的顶级窗口GetMessagePos取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime取得消息队列中上一条消息处理完毕时的时间PostMessage将一条消息投递到指定窗口的消息队列PostThreadMessage将一条消息投递给应用程序RegisterWindowMessage获取分配给一个字串标识符的消息编号ReplyMessage答复一个消息SendMessage调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback将一条消息发给窗口SendMessageTimeout向窗口发送一条消息SendNotifyMessage向窗口发送一条消息3.API之文件处理函数CloseHandle关闭一个内核对象。

vc++ 参考API函数

vc++ 参考API函数
vc++ 参考API函数
Windows API
1.控件与消息函数
AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小
AnyPopup 判断屏幕上是否存在任何弹出式窗口
ArrangeIconicWindows 排列一个父窗口的最小化子窗口
AttachThreadInput 连接线程输入函数
GetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID
GetWindowLong 从指定窗口的结构中取得信息
GetWindowPlacement 获得指定窗口的状态及位置信息
GetWindowRect 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
SetWindowText 设置窗口的标题文字或控件的内容
SetWindowWord 在窗口结构中为指定的窗口设置信息
ShowOwnedPopups 显示或隐藏由指定窗口所有的全部弹出式窗口
ShowWindow 控制窗口的可见性 ShowWindowAs来自nc 与ShowWindow相似
GetCommandLine 获得指向当前命令行缓冲区的一个指针
GetComputerName 取得这台计算机的名称
GetCPInfo 取得与指定代码页有关的信息
GetCurrencyFormat 针对指定的“地方”设置,根据货币格式格式化一个数字
GetCursor 获取目前选择的鼠标指针的句柄
SetRectEmpty 将矩形设为一个空矩形
SetWindowContextHelpId 为指定的窗口设置帮助场景(上下文)ID

vC++ 获取cpu信息,硬盘ID,网卡MAC地址_内部资料

vC++ 获取cpu信息,硬盘ID,网卡MAC地址_内部资料

目录摘要 (I)获取系统信息程序的开发1.设计目的 (1)2. 设计基本要求 (1)3. 设计内容 (1)4. 设计步骤 (1)5. 程序代码5.1头文件SysinfoView.h (5)5.2头文件Registry.h (6)5.3源文件SysinfoView.cpp (7)5.4源文件MainFrm.cpp (21)5.5源文件Registry.cpp (23)5.6源文件Sysinfo.cpp (26)6.设计成果 (26)总结 (27)参考文献 (28)摘要计算机系统信息包括硬件系统信息和软件系统信息。

硬件系统直接决定了软件系统运行的可行性,同时软件系统又反过来影响着硬件系统的运行。

因此,及时掌握计算机系统信息对于计算机用户来说尤其重要。

本课程设计介绍了如何利用Visual C++这一编程工具进行程序设计来获取计算机的系统信息。

关键词:Visual C++;计算机系统信息;程序设计获取系统信息程序的开发1.设计目的在学习了“VC++程序设计基础”课程的基础上,通过本编程设计练习,旨在加深对相关知识的理解,初步掌握VC++程序设计的基本设计方法,提高程序设计的基本技能及分析、解决编程问题的能力。

2. 设计基本要求计算机系统信息包括硬件系统信息和软件系统信息。

硬件系统直接决定了软件系统运行的可行性,同时软件系统又反过来影响着硬件系统的运行。

因此,及时掌握计算机系统信息对于计算机用户来说尤其重要。

本程序的主要功能如下:1)获取操作系统信息,显示该操作系统的版本号。

2)获取CPU运行速度3)获取内存大小,计算剩余内存大小和百分率4)获取网卡地址和本机机器的IP地址5)操作系统的操作(关闭系统、重启系统、快速重启系统)6)注册表的操作7)程序界面的鼠标拖动操作8)弹出菜单的应用3. 设计内容1)计算机安装操作系统后,操作系统将版本信息存放于注册表的特定位置:HKEY_LOCAL_MACHINE->”Software\\Microsoft\\Windows\\CurrentVersion\\Run\\”.因此只需要进行注册表的访问操作就可以得到相关的操作。

用VC++6.0开发Windows网络校时软件

用VC++6.0开发Windows网络校时软件

用VC++6.0开发Windows网络校时软件王强【摘要】为解决各类计算机网络应用软件中系统时间同步的问题,需要保证服务端时间与客户端时间的一致.文章采用微软公司的软件开发工具VC++6.0,通过调用Windows套接字编程接口提供的Winsock 2.0 API函数,编写出兼容性较强的网络校时代码,再通过调用Windows系统的API函数,实现取出和设置系统时间的功能.工作过程如下:服务端软件始终监听客户端的校时请求,当客户端发送校时请求时,服务端软件根据客户端的IP地址,发送时间信息给客户端,客户端将收到的信息设置到本机,完成时间同步.由于Winsock 2.0的编程接口兼容性很强,所以该程序在各类Windows平台均能稳定运行,占用资源少,方便可靠,有较高的实用价值.【期刊名称】《江苏科技信息》【年(卷),期】2017(000)012【总页数】4页(P48-51)【关键词】校时;VC++6.0;网络编程;Winsock2.0API函数【作者】王强【作者单位】江苏有线邦联新媒体科技有限公司,江苏南京 210001【正文语种】中文在网络应用软件中,有很多软件为了协同工作,需要保证服务器时间与客户机时间的统一,例如车站的车票收费系统、学生考试系统等。

如果服务器与客户机之间的时间没有校时系统,那么客户机时间不准确,这样可能直接造成数据无法同步,数据校验出错,会导致软件不能正常运行等严重的后果。

VC++6.0是微软公司出品的软件开发工具,用VC++6.0可以很方便地调用Windows系统提供的API函数,编写出高效、稳定的Windows程序。

网络校时软件的工作流程如图1所示。

校时软件的详细步骤如下:(1)客户机向服务器IP发起连接请求校时;(2)服务器监听到客户机校时请求;(3)服务器取出本机的时间;(4)服务器根据请求客户机的IP地址向客户机发出时间字符;(5)客户机接收到时间字符后写入本机完成校时。

VC++获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法

VC++获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法

VC++获取系统时间、程序运⾏时间(精确到秒,毫秒)的五种⽅法1.使⽤CTime类(获取系统当前时间,精确到秒)CString str;//获取系统时间CTime tm;tm=CTime::GetCurrentTime();//获取系统⽇期str=tm.Format("现在时间是%Y年%m⽉%d⽇ %X");MessageBox(str,NULL,MB_OK);a,从CTimet中提取年⽉⽇时分秒CTime t = CTime::GetCurrentTime(); int d=t.GetDay(); //获得⼏号 int y=t.GetYear(); //获取年份 int m=t.GetMonth(); //获取当前⽉份 int h=t.GetHour(); //获取当前为⼏时 int mm=t.GetMinute(); //获取分钟 int s=t.GetSecond(); //获取秒 int w=t.GetDayOfWeek(); //获取星期⼏,注意1为星期天,7为星期六b,计算两段时间的差值,可以使⽤CTimeSpan类,具体使⽤⽅法如下:CTime t1( 1999, 3, 19, 22, 15, 0 );CTime t = CTime::GetCurrentTime();CTimeSpan span=t-t1; //计算当前系统时间与时间t1的间隔int iDay=span.GetDays(); //获取这段时间间隔共有多少天int iHour=span.GetTotalHours(); //获取总共有多少⼩时int iMin=span.GetTotalMinutes();//获取总共有多少分钟int iSec=span.GetTotalSeconds();//获取总共有多少秒c,获得当前⽇期和时间,并可以转化为CStringCTime tm=CTime::GetCurrentTime();CString str=tm.Format("%Y-%m-%d");//显⽰年⽉⽇2.使⽤GetLocalTime:Windows API 函数,获取当地的当前系统⽇期和时间(精确到毫秒) 此函数会把获取的系统时间信息存储到SYSTEMTIME结构体⾥边typedef struct _SYSTEMTIME{WORD wYear;//年WORD wMonth;//⽉WORD wDayOfWeek;//星期:0为星期⽇,1为星期⼀,2为星期⼆……WORD wDay;//⽇WORD wHour;//时WORD wMinute;//分WORD wSecond;//秒WORD wMilliseconds;//毫秒}SYSTEMTIME,*PSYSTEMTIME;例:SYSTEMTIME st;CString strDate,strTime;GetLocalTime(&st);strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond) ;AfxMessageBox(strDate);AfxMessageBox(strTime);3.使⽤GetTickCount:从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。

VC++API函数小全

VC++API函数小全

博客站点这是第一篇文章通过ADO操作Access数据库»VC++API函数小全VC++/gy8396 发表于2005-10-26, 20:10VC++API小查窗口处理2.1 窗口简介2.2.1 创建普通窗口(CreateWindow、CreateWindowEx)2.2.2 关闭窗口(CloseWindow)2.2.3 销毁窗口(DestroyWindow)2.3 窗口之间的关系2.3.1 父子关系(SetParent、GetParent、IsChild)2.3.2 遍历窗口(EnumWindow、EnumWindowProc、EnumChildWindows、En umChildProc)2.3.3 获取指定的子窗口(ChildWindowFromPoint、ChildWindowFromPointEx) 2.3.4 获得特定的窗口(GetWindow、GetTopWindow、GetNextWindow、GetD esktopWindow)2.4 窗口的大小、位置和布局2.4.1 获取窗口大小(GetWindowRect、GetClientRect)2.4.2 调整窗口大小(AdjustWindowRect、AdjustWindowRectEx)2.4.3 设置和获取窗口位置(SetWindowPos)2.4.4 移动窗口位置(MoveWindow)2.4.5 设置一组窗口位置(BeginDeferWindowPos、DeferWindowPos、EndDefe rWindowPos)2.4.6 设置和获取窗口布局(SetWindowPlacement、GetWindowPlacement) 2.4.7 设置和获得视口坐标起点(SetViewportOrgEx、GetViewportOrgEx)2.4.8 设置和获取视口坐标范围(SetViewportExtEx、GetViewportExtEx)2.4.9 设置和获取窗口坐标起点(SetWindowOrgEx、GetWindowOrgEx)2.4.10 设置和获取窗口坐标范围(SetWindowExtEx、GetWindowExtEx)2.4.11 坐标起点的偏移操作(OffsetViewportOrgEx、OffsetWindowOrgEx) 2.5 显示窗口2.5.1 显示单个窗口(ShowWindow、ShowWindowAsync、OpenIcon)2.5.2 弹出式窗口(ShowOwnedPopups、GetLastActivePopup)2.5.3 显示子窗口(CascadeWindows、TileWindows、ArrangeIconicWindows) 2.5.4 判断各种显示状态(IsIconic、IsWindowVisible、IsZoomed)2.6 窗口属性2.6.1 设置和获取窗口名(SetWindowText、GetWindowText、GetWindowText Length)2.6.2 设置和获取窗口标记长字(SetWindowLong、GetWindowLong)2.6.3 设置和获取前台窗口(SetForegroundWindow、GetForegroundWindow)2.7 对话框2.7.1 创建对话框(DialogBox、CreateDialog、CreateDialogIndirect、Message Box、MessageBoxEx、MessageBoxIndirect)2.7.2 获取控件及其ID(GetDlgItem、GetDlgCtrlID)2.7.3 设置获取控件的显示文本(SetDlgItemText、SetDlgItemInt、GetDlgIte mText、GetDlgItemInt)2.7.4 获取下一个TAB控件(GetNextDlgTabItem)2.7.5 对话框过程(DefDlgProc、DialogProc)2.7.6 对话框坐标和屏幕坐标间的转换(MapDialogRect)2.7.7 撤销对话框(EndDialog)2.8 其他2.8.1 查找窗口(FindWindow、FindWindowEx)2.8.2 设置窗口Z坐标(BringWindowToTop)2.8.3 确定窗口属性(IsWindow、IsWindowUnicode)2.8.4 设置和获取激活态窗口(SetActiveWindow、GetActiveWindow)2.8.5 窗口闪烁(FlashWindow)2.8.6 获取指定点处的窗口(WindowFromPoint)2.8.7 遍历线程所有窗口(EnumThreadWindows、EnumThreadWndProc)设备上下文——DC3.2.1 创建DC(CreateDC、CreateCompatibleDC)3.2.2 撤销DC(ReleaseDC、DeleteDC)3.2.3 获得窗口DC(GetWindowDC、GetDC、GetDCEx)3.2.4 保存和恢复DC(SaveDC、RestoreDC)3.3 设置和获取DC的各种属性3.3.1 获得DC起始点坐标(GetDCOrgEx)3.3.2 设置显示配置(ChangeDisplaySettings、ChangeDisplaySettingsEx) 3.3.3 遍历显示设备和其配置(EnumDisplayDevices、EnumDisplaySettings) 3.3.4 设置和获取DC画刷颜色(SetDCBrushColor、GetDCBrushColor)3.3.5 设置和获取DC画笔颜色(SetDCPenColor、GetDCPenColor)3.3.6 设置和获取DC中各种对象(SelectObject、GetCurrentObject)3.3.7 获取DC中对象的信息(GetObject、GetObjectType、GetStockObject) 3.4 区域操作3.4.1 新建椭圆区域(CreateEllipticRgn、CreateEllipticRgnIndirect)3.4.2 新建多边形区域(CreatePolygonRgn、CreatePolyPolygonRgn)3.4.3 新建矩形区域(CreateRectRgn、CreateRectRgnIndirect)3.4.4 新建圆矩形区域(CreateRoundRectRgn)3.4.5 区域之间的操作(EqualRgn、ExcludeUpdateRgn)3.4.6 区域上绘图操作(FillRgn、FrameRgn、InvertRgn、PaintRgn)3.5 裁剪操作3.5.1 设置和获取裁剪区域(SelectClipRgn、SelectClipPath、GetClipRgn、Ext SelectClipRgn)3.5.2 裁剪区域间的运算(ExcludeClipRect、IntersectClipRect、OffsetClipRgn) 3.6 坐标变换3.6.1 客户区坐标与屏幕坐标的变换(ClientToScreen、ScreenToClient)3.6.2 设备坐标与逻辑坐标的变换(DPtoLP、LPtoDP)3.6.3 窗口间的坐标变换(MapWindowPoints)3.7 颜色和调色板3.7.1 创建新调色板(CreatePalette)3.7.2 启用调色板(SelectPalette、RealizePalette)3.7.3 设置和获取调色板颜色条目(SetPaletteEntries、GetPaletteEntries)3.7.4 设置系统调色板的工作方式(SetSystemPaletteUse)3.7.5 设置和获取颜色调整(SetColorAdjutstment、GetColorAdjustment)3.7.6 获取匹配颜色(GetNearestColor、GetNearestPaletteIndex)3.8 其他3.8.1 滚动窗口(ScrollDC)3.8.2 偏移操作(OffsetRect、OffsetRgn)3.8.3 点、矩形和区域的关系(PtInRegion、PtVisible、RectInRegion、RectVisi ble)3.8.4 缩放视口和窗口大小(ScaleViewportExtEx、ScaleWindowExtEx)3.8.5 由给定DC获取相联系的窗口(WindowFromDC)3.8.6 获取特定设备的信息(GetDeviceCaps)3.8.7 撤销DC中的对象(DeleteObject)基本画图函数4.1.1 点(SetPixel、SetPixelV、GetPixel)4.1.2 线(LineTo、LineDDA、LineDDAProc、MoveToEx、Polyline、PolylineT o)4.1.3 曲线(PolyBezier、PolyBezierTo、PolyDraw)4.1.4 弧(AngleArc、Arc、ArcTo、SetArcDirection、GetArcDirection)4.1.5 椭圆(Ellipse)4.1.6 弦(Chord)4.1.7 矩形(Rectangle、Roundrect、DrawEdge、DrawFocusRect、FillRect) 4.1.8 多边形(Polygon、PolyPolygon、PolyPolyline)4.1.9 饼图(Pie)4.2 路径相关函数4.2.1 启动和终止路径绘图(BeginPath、EndPath)4.2.2 曲线到直线(FlattenPath)4.2.3 填充路径(FillPath、StrokeAndFillPath)4.2.4 边界处理(StrokePath、WidenPath)4.2.5 封闭路径(CloseFigure)4.2.6 获取路径区域(PathToRegion)4.2.7 获取路径(GetPath)4.2.8 撤销路径(AbortPath)处理DC对象4.3.1 新建画笔(CreatePen、CreatePenIndirect、ExtCreatePen)4.3.2 新建画刷(CreateBrushIndirect、CreateHatchBrush、CreateDIBPatter nBrushPt、CreatePatternBrush、CreateSolidBrush、GetSysColorBrush) 4.3.3 设置和获取背景颜色和模式(GetBkColor、GetBkMode、SetBkColor、Set BkMode)4.4 图元文件4.4.1 创建图元文件(CreateEnhMetaFile、CreateMetaFile)4.4.2 复制图元文件(CopyEnhMetaFile、CopyMetaFile)4.4.3 打开图元文件(GetEnhMetaFile)4.4.4 关闭图元文件(CloseEnhMetaFile、CloseMetaFile)4.4.5 撤销图元文件(DeleteEnhMetaFile、DeleteMetaFile)4.4.6 绘制图元文件(PlayEnhMetaFile)4.5 其他4.5.1 启动和终止绘图(BeginPaint、EndPaint)4.5.2 获取需更新区域(GetUpdateRect、GetUpdateRgn)4.5.3 绘图操作生效(InvalidateRect、InvalidateRgn、ValidateRect、Validate Rgn)4.5.4 设置和获取最大绘图缓冲(GdiSetBatchLimit、GdiGetBatchLimit)4.5.5 刷新缓冲(GdiFlush)4.5.6 设置和获取窗口可绘图区域(SetWindowRgn、GetWindowRgn)4.5.7 禁止在窗口绘图(LockWindowUpdate)4.5.8 绘制桌面(PaintDesktop)4.5.9 更新窗口(RedrawWindow)4.5.10 撤销绘图操作(CancelDC)4.5.11 描绘标准控件(DrawFrameControl)4.5.12 设定画图效果(DrawState、DrawStateProc)4.5.13 设置和获取系统颜色(SetSysColors、GetSysColor)位图和图标5.2.1 创建位图(CreateBitmap、CreateBitampIndirect、CreateCompatible、Bitmap、CreateDIBitmap、CreateDIBSection、LoadBitmap、LoadImage) 5.2.2 创建图标(CreateIcon、LoadIcon、LoadCursorFromFile)5.2.3 撤销图标(DestoryIcon)5.3 设置和获得位图和图标的各种属性5.3.1 设置和获取位图的位数据(SetBitmapBits、GetBitmapBits)5.3.2 设置和获取DIB(SetDIBits、GetDIBits)5.3.3 设置和获取DIB颜色表(SetDIBColorTable、GetDIBColorTable)5.3.4 设置和获取位图的大小(GetBitmapDimensionEx、SetBitmapDimension Ex)5.3.5 获取图标信息(GetIconInfo)5.4 位块操作5.4.1 各种位块操作方式(BitBlt、PatBlt、PlgBlt、StretchBlt、MaskBlt、Trans parentBlt)5.4.2 设置和获取位操作模式(SetROP2、GetROP2、SetStretchBltMode、GetS tretchBltMode)5.5 其他5.5.1 复制位图和图标(CopyImage、CopyIcon)5.5.2 从文件中搜寻图标(ExtractIcon、ExtractIconEx、ExtractAssociatedIcon) 5.5.3 显示图标(DrawIcon、DrawIconEx)菜单处理6.1 菜单的简单操作6.1.1 生成新菜单(CreateMenu、CreatePopupMenu)6.1.2 装载菜单(LoadMenu、LoadMenuIndirect)6.1.3 撤销菜单(DestoryMenu、DeleteMenu、RemoveMenu)6.1.4 获取菜单(GetMenu、GetSubMenu、GetSystemMenu)6.1.5 增添菜单(AppendMenu)6.2 菜单项处理6.2.1 设置和获取菜单项信息(SetMenuItemInfo、GetMenuItemInfo)6.2.2 设置和获取缺省菜单项(SetMenuDefautlItem、GetMenuDefaultItem) 6.2.3 获取菜单项的ID(GetMenuItemID)6.2.4 获取菜单项数(GetMenuItemCount)6.2.5 获取菜单项的范围大小(GetMenuItemRect)6.2.6 高亮显示菜单项(HiliteMenuItem)6.2.7 菜单项属性(CheckMenuItem、EnableMenuItem、CheckMenuRadioIte m)6.2.8 添加菜单项(InsertMenuItem)6.2.9 获取某点处的菜单项(MenuItemFromPoint)6.3 其他6.3.1 设置窗口的菜单(SetMenu)6.3.2 判定句柄是否指向菜单(IsMenu)6.3.3 上下文菜单(TrackPopupMenu、TrackPopupMenuEx)6.3.4 显示菜单条(DrawMenuBar)6.3.5 图形菜单项(SetMenuItemBitmaps)文件处理7.1 创建、读写和撤销文件7.1.1 创建文件(CreateFile、lcreat、GetTempFileName)7.1.2 设置文件读写位置(SetFilePointer、_llseek、_lseek)7.1.3 写入文件(WriteFile、lwrite、hwirte)7.1.4 异步写入文件(WriteFileEx、FileIOCompletionRoutine)7.1.5 读入文件(ReadFile、_lread、_hread)7.1.6 异步读入文件(ReadFileEx)7.1.7 复制文件(CopyFile、CopyFileEx、CopyProgressRoutine)7.1.8 更改文件名(MoveFile、MoveFileEx)7.1.9 关闭文件(CloseHandle、_lclose)7.1.10 删除文件(DeleteFile)7.2 设置和获得文件的各种信息7.2.1 获取文件大小(GetFileSize)7.2.2 获取文件类型(GetFileType)7.2.3 设置和获取文件时间信息(SetFileTime、GetFileTime)7.2.4 获取文件版本信息(GetFileVersionInfo、GetFileVersionInfoSize、VerQu eryValue)7.2.5 是否可执行文件(GetBinaryType)7.2.6 长文件名和短文件名的转换(GetFullPathName、GetShortPathName) 7.2.7 由文件句柄获取文件信息(GetFileInformationByHandle)7.2.8 设置文件结束标志(SetEndOfFile)7.2.9 设置和获取文件属性(SetFileAttributes、GetFileAttributes)7.3 目录处理7.3.1 创建新目录(CreateDirectory、CreateDirectoryEx)7.3.2 删除目录(RemoveDirectory)7.3.3 获取系统路径(GetSystemDirectory)7.3.4 获取临时路径(GetTempPath)7.3.5 获取Windows完整目录(GetWindowsDirectory)7.3.6 设置和获取当前目录(SetCurrentDirectory、GetCurrentDirectory)7.4 文件查找7.4.1 查找第一个文件(FindFirstFile)7.4.2 查找下一个文件(FindNextFile)7.4.3 查找指定文件(SearchPath)7.4.4 查找结束(FindClose)7.5 磁盘信息7.5.1 获取可用逻辑驱动器(GetLogicalDrives)7.5.2 获取可用逻辑驱动器信息(GetLogicalDriveStrings)7.5.3 设置和获取卷标信息(SetVolumeLabel、GetVolumeInformation)7.5.4 获取磁盘空闲空间(GetDiskFreeSpace、GetDiskFreeSpaceEx)7.5.5 获取磁盘类型(GetDriveType)7.6 压缩文件7.6.1 初始化内部缓冲区(LZInit)7.6.2 打开压缩文件(LZOpenFile)7.6.3 读入压缩文件(LZRead)7.6.4 压缩文件指针定位(LZSeek)7.6.5 获取压缩文件大小(GetCompressedFileSize)7.6.6 获取压缩文件全名(GetExpandedName)7.6.7 复制和解压缩文件(LZCopy)7.6.8 关闭压缩文件(LZClose)7.7 其他7.7.1 设置和获取字符集(SetFileApisToANSI、SetFileApisToOEM、AreFileApi sANSI)7.7.2 联系文件和I/O端口(CreateIoCompletionPort、PostQueuedCompletion Status、GetQueuedCompletionStatus)7.7.3 更新文件缓冲区(FlushFileBuffers)7.7.4 加锁和解锁文件(LockFile、LockFileEx、UnlockFile、UnlockFileEx)7.7.5 撤销文件IO(CancelIO)7.7.6 比较文件时间信息(CompareFileTime)7.7.7 设备IO操作(DeviceIoControl)7.7.8 DOS时间转换为Win32时间(DosDateTimeToFileTime)7.7.9 Win32时间转换为Dos时间(FileTimeToDosDateTime)7.7.10 Win32时间转换本地时间(FileTimeToLocalFileTime)同步8.1 同步对象8.1.1 生成同步对象(CreateEvent、CreateMutex、CreateSemaphore、Create WaitableTimer)8.1.2 打开同步对象(OpenEvent、OpenMutex、OpenSemaphore、OpenWait able Timer)8.1.3 关键段(EnterCriticalSection、LeaveCriticalSection、DeleteCritiaclSec tion)8.2 关键区段8.2.1 初始化关键区段(InitializeCriticalSection、InitializeCriticalSectionAnd SpinCount)8.2.2 非阻塞进入关键区段(TryEnterCriticalSection)8.2.3 设置关键区段的计数(SetCriticalSecitonSpinCount)8.3 原子性访问变量8.3.1 原子性比较(InterlockedCompareExchange)8.3.2 原子性交换(InterlockedExchange)8.3.3 原子性增加(InterlockedIncrement、InterlockedExchangeAdd)8.3.4 原子性减少(InterlockedDecrement)8.4 等待事件发生8.4.1 触发一个事件并等待另一个事件(SignalObjectAndWait)8.4.2 等待单个事件发生(WaitForSingleObject、WaitForSingleObjectEx)8.4.3 等待多个事件发生(WaitForMultipleObjects、WaitForMultipleObjectsEx) 8.4.4 等待消息(MsgWaitForMultipleObjects、MsgWaitForMultipleObjectsEx) 8.5 其他8.5.1 设置事件状态(SetEvent、ResetEvent、PulseEvent)8.5.2 释放互斥量(ReleaseMutex)8.5.3 释放信号灯(ReleaseSemaphore)8.5.4 设置可等待定时器状态(SetWaitableTimer、CancelWaitableTimer)处理文本和字体9.1 文本9.1.1 显示文本(DrawText、DrawTextEx、TextOut、ExTextOut、TabbedText Out、GrayString、OutputProc、PolyTextOut)9.1.2 设置和获取文本属性(SetTextAlign、GetTextAlign、SetTextColor、GetT extColor)9.1.3 调整和获取字符间距(SetTextCharacterExtra、GetKerningPairs)9.1.4 获得字符串的宽和高(GetTextExtentPoint32、GetTabbedTextExtent) 9.1.5 获取字符串的信息(GetCharacterPlacement)9.1.6 调整字符串(SetTextJustification)9.3 字体9.3.1 创建新字体(CreateFont、CreateFontIndirect、CreateScalableFontRes ource)9.3.2 在系统中添加和删除字体(AddFontResource、RemoveFontResource) 9.3.3 获取字体的宽度(GetCharABCWidths、GetCharWidth、GetCharWidth32、GetCharWidthFloat、GetCharaABCWidthsFloat)9.3.4 获取字体的各种信息(GetTextMetric、GetFontLanguageInfo)9.3.5 字体的宽高比( GetAspectRatioFilterEx、SetMapperFlags)9.3.6 获取字体的字型名(GetTextFace)9.3.7 遍历系统字体(EnumFontFamiliesEx、EnumFontFamiExProc)第10章硬件和系统10.1 键盘10.1.1 设置和获取键盘布局(ActivateKeyboardLayout、GetKeyboardLayout、GetKey boardLayoutList、GetKeyboardLayoutName)10.1.2 装载和卸载键盘布局(LoadKeyBoardLayout、UnloadKeyBoardLayout) 10.1.3 获得和设置键盘状态(GetKeyboardState、SetKeyboardState)10.1.4 获得键盘类型(GetKeyboardType)10.1.5 获得按键名(GetKeyNameText)10.1.6 获得按键状态(GetKeyState、GetAsyncKeyState)10.1.7 虚拟按键到扫描码(MapVirtualKey、MapVirtualKeyEx)10.1.8 虚拟按键到ASCII码(ToAscii、ToAsciiEx)10.1.9 虚拟按键到Unicode(ToUnicode、ToUnicodeEx)10.1.10 字符到虚拟按键(VkKeyScan、VkKeyScanEx)10.1.11 OEM码到扫描码(OemKeyScan)10.1.12 注册和撤销系统热键(RegisterHotKey、UnregisterHotKey)10.1.13 插入键盘事件(SendInput、keybd_event)10.2 鼠标10.2.1 获得鼠标输入点序列(GetMouseMovePoints)10.2.2 获得和设置双击间隔(GetDoubleClickTime、SetDoubleClickTime) 10.2.3 鼠标左右键设置(SwapMouseButton)10.2.4 鼠标捕获和释放(SetCapture、GetCapture、ReleaseCapture)10.2.5 捕获离开和滑过事件(TrackMouseEvent)10.2.6 插入鼠标事件(mouse_event)10.2.7 探测拖动(DragDetect)10.3 光标10.3.1 新建和撤销光标(CreateCursor、LoadCursorFromFile、DestroyCursor) 10.3.2 设置和获取光标(SetCursor、GetCursor)10.3.3 设置和获取光标位置(SetCursorPos、GetCursorPos)10.3.4 设置和获取光标活动范围(ClipCursor、GetClipCursor)10.3.5 显示光标(ShowCursor)10.3.6 设置系统光标(SetSystemCursor)10.4 时钟10.4.1 设置和获取系统时间(SetSystemTime、GetSystemTime、GetSystemTi meAsFileTime)10.4.2 设置和获取当地时间(SetLocAltime、GetLocAltime)10.4.3 获取自启动以来的微秒数(GetTickCount)10.4.4 获取和设置系统调整时间( GetSystemTimeAdjustment、SetSystemTi meAdjustment)10.4.5 设置和获取时区信息(SetTimeZoneInformation、GetTimeZoneInforma tion)10.4.6 获取高精度时间(QueryPerformanceCounter、QueryPerformance Fre quency)10.4.7 设置定时器(SetTimer)10.4.8 设置定时器回调函数(TimerProc)10.4.9 撤销定时器(KillTimer)10.5 系统信息10.5.1 获取系统各种度量信息(GetSystemMetrics)10.5.2 设置和获取系统参数(SystemParametersInfo)10.5.3 确定处理器的特性(IsProcessorFeaturePresent)10.5.4 获取和设置计算机名(GetComputerName、SetComputerName)10.5.5 获取用户名(GetUserName)10.5.6 获取操作系统版本信息(GetVersionEx)10.5.7 获取系统信息(GetSystemInfo)第11章Windows 消息11.1 消息系统概述11.2 消息处理11.2.1 发送消息(SendMessage、SendMessageCallback、SendNotifyMessage、SendMessageTimeout、PostThreadMessage、PostMessage、PostQutiMe ssage、BroadcastSystemMessage)11.2.2 回复消息(ReplyMessage)11.2.3 获取消息(GetMessage、WaitMessage、PeekMessage)11.2.4 处理消息(TranslateMessage、DispatchMessage)11.2.5 设置和获取消息的附加信息(SetMessageExtraInfo、GetMessageExtra Info)11.2.6 获取消息的伴随信息(GetMessagePos、GetMessageTime)11.2.7 注册新窗口消息(RegisterWindowMessage)11.3 消息队列11.3.1 获取队列状态(GetQueueStatus)11.3.2 获取队列中输入消息状态( GetInputState)11.4 其他11.4.1 是否重入(InSendMessage、InSendMessageEx)进程和线程12.1 进程和线程概述12.2 进程12.2.1 创建新进程(CreateProcess、CreateProcessAsUser)12.2.2 获取进程对象(OpenProcess)12.2.3 获取进程起始信息(GetStartupInfo)12.2.4 设置和获取工作集大小(SetProcessWorkingSetSize、GetProcessWorki ngSetSize)12.2.5 设置和获取进程的优先级(SetPriorityClass、GetPriorityClass)12.2.6 进程的动态优先级(SetProcessPriorityBoost、GetProcessPriorityBoost) 12.2.7 设置和获取退出参数(SetProcessShutdownParameters、GetProcessSh utdownParameters)12.2.8 获取进程的退出代码(GetExitCodeProcess)12.2.9 设置和获取环境参数(GetEnvironmentStrings、SetEnvironmentVariable、GetEnvironmentVariable、FreeEnvironmentVariable)12.2.10 获取进程的时间信息(GetProcessTime)12.2.11 获取进程的版本信息(GetProcessVersion)12.2.12 获取当前进程(GetCurrentProcess、GetCurrentProcessID)12.2.13 等待进程空闲(WaitForInputIdle)12.2.14 结束进程(ExitProcess、TerminateProcess)12.2.15 获取命令参数(GetCommandLine、CommandLineToArgvW)12.3 线程12.3.1 创建新线程(CreateThread)12.3.2 设置和获得线程优先级(SetThreadPriority、GetThreadProority)12.3.3 线程的调度(SuspendThread、SwitchToThread、ResumeThreadExitT hread 、TerminateThread、Sleep、SleepEx)12.3.4 设置线程的输入队列(AttachThreadInput)12.3.5 线程的动态优先级( SetThreadPriorityBoost、GetThreadPriorityBoost)12.3.6 获取线程的时间信息(GetThreadTimes)12.3.7 获取线程的退出码(GetExitCodeThread)12.4 调试12.4.1 调试指定进程(DebugActiveProcess)12.4.2 设置断点(DebugBreak)12.4.3 等待异常发生(WaitForDebugEvent)12.4.4 重新启动线程(ContinueDebugEvent)12.4.5 设置调试级别(SetDebugErrorLevel)12.4.6 发送一串字符给调试器(OutputDebugString)12.4.7 是否处于被调试态(IsDebuggerPresent)12.4.8 控制转移到调试器(FatalExit)12.4.9 设置和获取线程上下文(SetThreadContext、GetThreadContext) 12.4.10 获取线程选择子的描述符(GetThreadSelectorEntry)12.4.11 读写进程内存(WriteProcessMemory、ReadProcessMemory) 12.5 线程局部数据区12.5.1 分配(TlsAlloc)12.5.2 释放(TlsFree)12.5.3 设置和获取变量值(TlsSetValue、TlsGetValue)12.6 进程间通信12.6.1 创建映射文件(CreateFileMapping)12.6.2 打开映射文件(OpenFileMapping)12.6.3 映射文件到内存(MapViewOfFile、MapViewOfFileEx)12.6.4 撤销映射(UnmapViewOfFile)。

c# 调用API获取本机登录用户信息

c# 调用API获取本机登录用户信息

using System;//---引用using System.Runtime.InteropServices;using System.Text;/// <summary>/// Windows 任务管理器登录用户信息/// author:Stone_W/// date:2011.1.14/// </summary>public static class ComputerLoginUserInfo{#region 本机连接用户信息API封装public class TSControl{[DllImport("wtsapi32", CharSet = CharSet.Auto, SetLastError = true)]private static extern bool WTSEnumerateSessions(int hServer, int Reserved,int V ersion, ref long ppSessionInfo, ref int pCount);[DllImport("wtsapi32.dll")]public static extern void WTSFreeMemory(System.IntPtr pMemory);[DllImport("wtsapi32.dll")]public static extern bool WTSLogoffSession(int hServer, long SessionId, bool bWait);[DllImport("Wtsapi32.dll")]public static extern bool WTSQuerySessionInformation(System.IntPtr hServer, int sessionId, WTSInfoClass wtsInfoClass,out StringBuilder ppBuffer, out int pBytesReturned);public enum WTSInfoClass{WTSInitialProgram,WTSApplicationName,WTSWorkingDirectory,WTSOEMId,WTSSessionId,WTSUserName,WTSWinStationName,WTSDomainName,WTSConnectState,WTSClientBuildNumber,WTSClientName,WTSClientDirectory,WTSClientProductId,WTSClientHardwareId,WTSClientAddress,WTSClientDisplay,WTSClientProtocolType}public enum WTS_CONNECTSTA TE_CLASS{WTSActive,WTSConnected,WTSConnectQuery,WTSShadow,WTSDisconnected,WTSIdle,WTSListen,WTSReset,WTSDown,WTSInit,}public struct WTS_SESSION_INFO{public int SessionID;[MarshalAs(UnmanagedType.LPTStr)]public string pWinStationName;public WTS_CONNECTSTA TE_CLASS state;}public static WTS_SESSION_INFO[] SessionEnumeration(){//Set handle of terminal server as the current terminal serverint hServer = 0;bool RetV al;long lpBuffer = 0;int Count = 0;long p;WTS_SESSION_INFO Session_Info = new WTS_SESSION_INFO();WTS_SESSION_INFO[] arrSessionInfo;RetV al = WTSEnumerateSessions(hServer, 0, 1, ref lpBuffer, ref Count);arrSessionInfo = new WTS_SESSION_INFO[0];if (RetV al){arrSessionInfo = new WTS_SESSION_INFO[Count];int i;p = lpBuffer;for (i = 0; i < Count; i++){arrSessionInfo[i] = (WTS_SESSION_INFO)Marshal.PtrToStructure(new IntPtr(p),Session_Info.GetType());p += Marshal.SizeOf(Session_Info.GetType());}WTSFreeMemory(new IntPtr(lpBuffer));}else{//Insert Error Reaction Here}return arrSessionInfo;}}#endregionpublic static System.Collections.Generic.List<ComputerLoginUserInfoModel> ComputerLoginUserInfoList;public static void initComputerLoginUserInfo(){#region 查询代码TSControl.WTS_SESSION_INFO[] pSessionInfo = TSControl.SessionEnumeration();ComputerLoginUserInfoModel cum = null;ComputerLoginUserInfoList = new System.Collections.Generic.List<ComputerLoginUserInfoModel>();for (int i = 0; i < pSessionInfo.Length; i++){if ("RDP-Tcp" != pSessionInfo[i].pWinStationName){try{int count = 0;IntPtr buffer = IntPtr.Zero;StringBuilder userName = new StringBuilder(); // 用户名StringBuilder clientUser = new StringBuilder(); // 客户端名StringBuilder stateType = new StringBuilder(); // 会话类型bool userNameBool = TSControl.WTSQuerySessionInformation(IntPtr.Zero,pSessionInfo[i].SessionID,TSControl.WTSInfoClass.WTSUserName,out userName, out count);bool clientUserBool = TSControl.WTSQuerySessionInformation(IntPtr.Zero,pSessionInfo[i].SessionID,TSControl.WTSInfoClass.WTSClientName,out clientUser, out count);bool stateTypeBool = TSControl.WTSQuerySessionInformation(IntPtr.Zero,pSessionInfo[i].SessionID,TSControl.WTSInfoClass.WTSWinStationName,out stateType, out count);if (userNameBool && clientUserBool && stateTypeBool){cum = new ComputerLoginUserInfoModel();erName = userName.ToString();cum.ClientUserName = clientUser.ToString();cum.SessionType = stateType.ToString();}if (!string.IsNullOrEmpty(erName))ComputerLoginUserInfoList.Add(cum);}catch (Exception ex) { }}}#endregion}}public class ComputerLoginUserInfoModel{#region 用户信息字段private string userName;private string clientUserName;private string sessionType;/// <summary>/// 会话类型/// </summary>public string SessionType{get { return sessionType; }set { sessionType = value; }}/// <summary>/// 客户端名/// </summary>public string ClientUserName{get { return clientUserName; }set { clientUserName = value; }}/// <summary>/// 登录用户名 /// </summary>public string UserName{get { return userName; }set { userName = value; }}#endregion。

VC++获得局域网中计算机的ip

VC++获得局域网中计算机的ip
{
m_grid.InsertItem(j,0);
CString sName=nRes2->lpRemoteName;
sName=sName.Right(sName.GetLength()-2);
m_grid.SetItemText(j,0,sName);
CString str="";
struct hostent * pHost;
(3)WnetCloseEnum函数
WnetCloseEnum函数用于结束一次枚举操作。
语法:
DWORD WnetCloseEnum( HANDLE hEnum );
hEnum:由WnetOpenEnum函数的参数lphEnum传入。
(4)gethostbyname函数
gethostbyname函数能够通过计算机的名称返回其网络信息,这个信息中包括IP地址。
(1)WnetOpenEnum函数
WnetOpenEnum函数用于启动对网络资源进行枚举的过程。
语法:
DWORD WnetOpenEnum( DWORD dwScope,DWORD dwType,DWORD dwUsage,
LPNETRESOURCE lpNetResource,LPHANDLE lphEnum );
nRes=(NETRESOURCE*)Buf;
for(DWORD n=0;n<Count;n++,nRes++)
{
DWORD Count1=0xFFFFFFFF;
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,nRes,&lphEnum);

VC编程实现控制其他应用程序

VC编程实现控制其他应用程序

VC编程实现控制其他应用程序VC编程可以实现控制其他应用程序的功能,可以通过编写代码来实现对其他应用程序的自动化操作、窗口控制、数据交互等。

下面将介绍VC编程实现控制其他应用程序的一般步骤和方法。

首先,要控制其他应用程序,首先需要了解被控制应用程序的接口和功能。

可以使用Windows API、COM等方式获取被控制应用程序的相关信息,并定义好需要使用的函数和数据类型。

在VC编程中,可以使用MFC (Microsoft Foundation Class)库、Windows API等来实现对应的功能。

一般而言,控制其他应用程序的主要方法有以下几种:1. Shell执行:VC编程可以使用Shell命令来执行其他应用程序的命令行操作。

可以使用ShellExecute函数来调用其他应用程序并传递相关参数。

例如,可以使用ShellExecute(NULL, "open", "notepad.exe", "myfile.txt", NULL, SW_SHOW)来打开记事本,并打开指定的文件。

2. 窗口控制:控制其他应用程序的窗口可以使用Windows API函数,如FindWindow、GetWindow、SetWindowPos等函数来实现。

可以通过FindWindow函数来通过窗口标题或类名找到其他应用程序的窗口句柄,然后使用GetWindow函数获取窗口的信息,并通过SetWindowPos函数来调整窗口的位置、大小等。

3. 模拟按键和鼠标操作:VC编程可以使用Windows API函数来模拟按键和鼠标操作。

例如,可以使用keybd_event函数来模拟键盘按键操作,使用mouse_event函数来模拟鼠标点击和移动操作。

通过这些函数,可以实现在其他应用程序中输入文本、点击按钮等操作。

4. 进程控制:VC编程可以通过Windows API函数来控制其他应用程序的进程。

vb api函数使用手册

vb api函数使用手册

vb api函数使用手册VB(Visual Basic)是一种易于学习和使用的编程语言,广泛应用于Windows操作系统的开发中。

在VB中,API(应用程序编程接口)函数提供了访问操作系统底层功能的途径。

本手册旨在帮助开发者熟悉和正确使用VB中的API函数。

一、什么是API函数API(Application Programming Interface)函数是一组操作系统或应用程序提供的功能接口。

通过调用API函数,开发者可以访问操作系统底层功能,实现更为高级和复杂的功能需求。

VB中的API函数主要用于实现与操作系统进行交互,如读取系统信息、控制系统行为等。

二、API函数的声明和使用VB中使用API函数需要进行以下四个步骤:声明、加载、调用和释放。

1.声明在VB代码中声明API函数,需要使用Declare语句。

具体的语法如下:Declare Function 函数名 Lib "库名" Alias "函数别名" (参数列表) As 返回值类型其中,- 函数名表示API函数的名称;- 库名表示包含API函数的动态链接库(DLL)文件名;- 函数别名是可选的,用于给API函数指定一个不同于其在DLL中定义的名称;- 参数列表表示API函数的参数,多个参数之间使用逗号分隔;- 返回值类型表示API函数的返回值类型。

2.加载在VB代码中加载API函数所在的DLL,需要使用LoadLibrary函数。

具体的语法如下:Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long其中,- LoadLibrary是一个Windows API函数,用于加载指定的DLL文件;- "kernel32"表示包含LoadLibrary函数的动态链接库文件;- "LoadLibraryA"是LoadLibrary函数的别名,其中A表示使用ANSI字符集。

C#调用API函数获取系统信息

C#调用API函数获取系统信息

★C#调用API函数获取系统信息API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。

每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法,或者是调用Windows API函数的接口,也就是说具备调用动态连接库的能力。

Visual C#和其它开发工具一样也能够调用动态链接库的API函数。

本文中笔者就结合实例向大家介绍在Visual C#中如何调用各种返回值的API,该实例就是一个通过API函数调用获取系统信息的程序。

首先,在调用API之前,你必须先导入System.Runtime.InteropServices这个名称空间。

该名称空间包含了在Visual C#中调用API的一些必要集合,具体的方法如下:using System.Runtime.InteropServices;在导入了名称空间后,我们要声明在程序中所要用到的API函数。

我们的程序主要是获取系统的相关信息,所以用到的API函数都是返回系统信息的。

先给出在Visual C#中声明API 的方法:[DllImport("kernel32")]public static extern void GetWindowsDirectory(StringBuilder WinDir,int count);其中,"DllImport"属性用来从不可控代码中调用一个方法,它指定了DLL的位置,该DLL 中包含调用的外部方法;"kernel32"设定了类库名;"public"指明函数的访问类型为公有的;"static"修饰符声明一个静态元素,而该元素属于类型本身而不是指定的对象;"extern"表示该方法将在工程外部执行,同时使用DllImport导入的方法必须使用"extern"修饰符;最后GetWindowsDirectory函数包含了两个参数,一个为StringBuilder类型的,另一个为int类型的,该方法返回的内容存在于StringBuilder类型的参数中。

用vc如何获取某个动态链接库的版本信息

用vc如何获取某个动态链接库的版本信息

用vc如何获取某个动态链接库的版本信息我如何获得安装在我的系统上的某个特定的DLL 的版本信息我尝试着确定系统安装了哪个版本的comctl32.dll。

我见过有些代码调用GetProcAddress 来获取各种函数如InitCommonControlsEx以确定基于不同版本的函数调用。

对于我来说这是一个坎儿到底用什么方法获得版本号有两种方法容易的和难的。

容易的方法是调用一个专门用于此目的的函数DllGetVersion。

问题是虽然comctl32.dll 支持该函数但并不是所有的DLLs 都具备它。

如果不具备DllGetVersion那么就得用难的方法——使用FileVersion API这可能是你要遭遇到的最为暧昧的API 之一。

我写了一个类CModuleVersion 来封装两种方法同时还写了一个Demo程序VersionDlg 来示范CModuleVersion 的使用方法。

程序画面如Figure 1 所示。

你可以在编辑框中敲入任何系统模块的名字VersionDlg 将用DllGetVersion 如果具备这个函数的话和FileVersion API 两种方法显示版本信息。

源代码参见Figure 2。

Figure 1 运行中的VersionDlg 程序让我们先看容易的方法。

DllGetVersion 用DLL 版本信息填写一个DLLVERSIONINFO 结构。

该结构定义在Win32 SDK 的showapi.h 头文件中。

许多人可能都没有安装Platform SDK 那么就得自己定义这个结构了译者注实际上早期的Developer Studio 不包含这个头文件。

后来的Visual Studio 6.0 安装已经包含该头文件路经参见Driver:Program FilesMicrosoft Visual StudioVC98Include就像我在VersionDlg 所做的那样。

typedef struct _DllVersionInfo DWORD cbSizeDWORD dwMajorVersionDWORD dwMinorVersionDWORD dwBuildNumberDWORD dwPlatformID DLLVERSIONINFO 这个结构中的字段基本不用怎么说明就知道是什么意思dwPlatformID 为DLLVER_PLATFORM_WINDOWS value 1指Windows 9x而DLLVER_PLATFORM_NT value 2用于Windows NT。

vc中读取配置文件的方法[资料]

vc中读取配置文件的方法[资料]

在Visual C++ 6.0下对Windows配置设置文件的存取访问方法的详细介绍。

一、引言0不论是对于程序开发人员还是软件应用人员,一定不会对扩展名为"ini"的文件感到陌生,不仅Windows操作系统将大名鼎鼎的win.ini作为记录当前系统状态,并根据其记录内容对系统进行配置的一种便捷的方法,而且众多的应用软件也广泛地使用该类型的配置文件来对软件进行记录、配置。

本文就针对配置设置文件的使用展开讨论,以期能为软件状态的记录与设置寻求一种方便简洁的实现方法。

0二、配置设置文件概述0配置设置文件是Windows操作系统下的一种特殊化的ASCII文件,以"ini"为文件扩展名。

该文件也被称做是初始化文件(initialization file)和概要文件(profile),通常应用程序可以拥有自己的配置设置文件来存储自己的状态信息,一般来说私有的配置设置文件比较小,可以减少程序在初始化时读取配置文件时的信息量,从而可以提高程序的启动速度、提高应用程序和系统的性能。

但如待存取的信息涉及到Windows 系统环境或是其他的应用程序时才必须在Windows系统的配置文件win.ini中记录并在访问的同时发送出消息WM_WININICHANGE给所有的顶层窗口,通知其他的程序系统的配置文件已做了更改。

但由于win.ini中不仅记录了系统的有关信息,也存储着许多其他应用软件的一些配置数据,所以访问的数据量要远比私有的配置文件大的多。

0配置文件里的信息之所以能为系统和众多的软件所读取并识别,是由于其内部对数据的存取采用了预先约定好的"项-值对(entry-value pairs)"存储结构来对待存取的数据进行分门别类地进行条理清晰的存储。

我们可以打开系统目录下的win.ini文件:0[windows]load=run=NullPort=None0[Desktop]WallpaperStyle=2Pattern=(无)0[intl]s2359=PMiCountry=86 0可见,配置文件把信息分成若干"节",节标题放在方括号中,如[Desktop]就是Desktop节,在一个节内包含了一些与之相关相近的"项",并通过等号对其进行赋值。

C++通过WIN32API获取逻辑磁盘详细信息

C++通过WIN32API获取逻辑磁盘详细信息

C++通过WIN32API获取逻辑磁盘详细信息众所周知,在微软的操作系统下编写应用程序,最主要的还是通过Windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件。

今天我们主要介绍的是几个常用的api函数,通过它我们可以获取用户磁盘的相关信息。

示例程序:请点击附件下载。

其主要函数原型说明如下:1.获取系统中逻辑驱动器的数量The GetLogicalDrives function retrieves a bitmask representing the currently available disk drives.DWORD GetLogicalDrives(void);2.获取所有驱动器字符串信息The GetLogicalDriveStrings function fills a buffer with strings that specify valid drives in the system.DWORD GetLogicalDriveStrings(DWORD nBufferLength,LPTSTR lPBuffer);3.获取驱动器类型The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.UINT GetDriveType(LPCTSTR lpRootPathName);4. 获取驱动器磁盘的空间状态,函数返回的是个BOOL类型数据The GetDiskFreeSpaceEx function retrieves information about the amount of space available on a disk volume: the total amount of space, the total amount of free space, and the total amount of free space available to the user associated with the calling thread.BOOL GetDiskFreeSpaceEx(LPCTSTR lpDirectoryName,PULARGE_INTEGER lpFreeBytesAvailable,PULARGE_INTEGER lpTotalNumberOfBytes,PULARGE_INTEGER lpTotalNumberOfFreeBytes);以下是完整的示例程序代码:#include#includeusing namespace std;int main(){int DiskCount = 0;DWORD DiskInfo = GetLogicalDrives();//利用GetLogicalDrives()函数可以获取系统中逻辑驱动器的数量,函数返回的是一个32位无符号整型数据。

VC操作INI

VC操作INI

用VC操作ini配置文件2009年02月13日星期五 10:27Windows操作系统专门为此提供了6个API函数来对配置设置文件进行读、写:GetPrivateProfileInt() 从私有初始化文件获取整型数值GetPrivateProfileString() 从私有初始化文件获取字符串型值GetProfileInt 从win.ini 获取整数值GetProfileString 从win.ini 获取字符串值WritePrivateProfileString 写字符串到私有初始化文件WriteProfileString 写字符串到win.ini我们可以把视图类的:OnInitialUpdate() 函数作为程序启动时读取配置文件的入口,配置文件的存储格式如下:[SECTION 1]XPos=300YPos=200[SECTION 2]Text=Hello仅有两个节,XPos和YPos标明了待显示信息的坐标,而待显示的信息存储在第二节的Text项中,用读取访问私有配置设置文件的API函数将其分别读入到变量m_nXPos,m_nYPos和m_strText中,并通过Invalidate()调用OnDraw()函数,在其内用TextOut函数将该信息在读取的坐标位置显示出来:m_nXPos=GetPrivateProfileInt("SECTION 1", //节名"XPos", //项名0, //没找到此项时的缺省返回值"C:\test\debug\test.ini"); //配置文件的准确路径m_nYPos=GetPrivateProfileInt("SECTION 1","YPos",0,exeFullPath);char buf[256];len=GetPrivateProfileString("SECTION 2", //节名"Text", //项名"No Text", //没找到此项时的返回值buf, //目标缓冲区地址256, //目标缓冲区长度"C:\test\debug\test.ini"); //配置文件的准确路径for(int i=0;i<len;i++){CString str;str.Format("%c",buf[i]);m_strText+=str;}Invalidate();一般配置文件是和应用程序存放在同一个目录中的如果用"C:\test\debug\test.ini"的绝对路径进行设置就会出现路径改变后找不到配置文件的问题,所以应动态搜寻配置文件的存放地址:Tchar exeFullPath[MAX_PATH]; // MAX_PATH在API中有定义,为128int len=GetModuleFileName(NULL,exeFullPath, //应用程序的全路径存放地址MAX_PATH);CString path="\test.ini"; //配置文件名::strcpy(exeFullPath+len-13,path); //组合出配置文件的全路径写配置文件也基本类似,只是需要把数值类型的变量格式化成字符串再行存储:str.Format("%d",m_nXPos);WritePrivateProfileString("SECTION 1","XPos",str,exeFullPath);str.Format("%d",m_nYPos);WritePrivateProfileString("SECTION 1","YPos",str,exeFullPath); WritePrivateProfileString("SECTION 2","Text",m_strText,exeFullPath);我们一定遇到过这样的程序:在执行过一遍以后,重启系统会自动加载该程序,其实除了在启动菜单和注册表添加信息外,也可以用 WriteProfileString()函数向win.ini的"windows"节的"run"项目添加应用程序的全路径来实现,这要比其它两种方法简便的多,而且也比较安全。

C# API大全

C# API大全

C# API 大全(一)C# APIC:\ProgramFiles\MicrosoftVisual Studio .NET\ FrameworkSDK\Samples\ Technologies\ Interop\PlatformInvoke\ WinAPIs\CS目录下有大量的调用API 的例子。

一、调用格式using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码//使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。

[DllImport("user32.dll")]public static extern ReturnType FunctionName(type arg1,type arg2,...); //调用时与调用其他方法并无区别可以使用字段进一步说明特性,用逗号隔开,如:[ DllImport( "kernel32", EntryPoint="GetVersionEx" )] DllImportAttribute特性的公共字段如下:1、CallingConvention 指示向非托管实现传递方法参数时所用的CallingConvention 值。

CallingConvention.Cdecl : 调用方清理堆栈。

它使您能够调用具有 varargs 的函数。

CallingConvention.StdCall : 被调用方清理堆栈。

它是从托管代码调用非托管函数的默认约定。

2、CharSet 控制调用函数的名称版本及指示如何向方法封送 String 参数。

此字段被设置为 CharSet 值之一。

如果 CharSet 字段设置为 Unicode,则所有字符串参数在传递到非托管实现之前都转换成 Unicode 字符。

这还导致向DLL EntryPoint 的名称中追加字母“W”。

VC++获得当前系统日期和时间问题汇总

VC++获得当前系统日期和时间问题汇总

VC++获得当前系统⽇期和时间问题汇总ref: https:///taifei/article/details/54847825Ⅰ.得到时间的⽅法⼀般都是得到从1900年0点0分到现在的秒数,然后转为年⽉⽇时分秒的形式得到当前的时间(时分秒)。

主要⽅法如下:1)使⽤CRT函数C++代码1. char szCurrentDateTime[32];2. time_t nowtime;3. struct tm* ptm;4. time(&nowtime);5. ptm = localtime(&nowtime);6. sprintf(szCurrentDateTime, "M-%.2d-%.2d %.2d:%.2d:%.2d",7. ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday,8. ptm->tm_hour, ptm->tm_min, ptm->tm_sec);2)使⽤SYSTEMTIMEC++代码1. char szCurrentDateTime[32];2. SYSTEMTIME systm;3. GetLocalTime(&systm);4. sprintf(szCurrentDateTime, "M-%.2d-%.2d %.2d:%.2d:%.2d",5. systm.wYear, systm.wMonth, systm.wDay,6. systm.wHour, systm.wMinute, systm.wSecond);3)使⽤CTimeC++代码1. char szCurrentDateTime[32];2. CTime nowtime;3. nowtime = CTime::GetCurrentTime();4.5. sprintf(szCurrentDateTime, "M-%.2d-%.2d %.2d:%.2d:%.2d",6. nowtime.GetYear(), nowtime.GetMonth(), nowtime.GetDay(),7. nowtime.GetHour(), nowtime.GetMinute(), nowtime.GetSecond());Ⅱ.A:1 使⽤time_t time( time_t * timer ) 精确到秒 计算时间差使⽤double difftime( time_t timer1, time_t timer0 )2 使⽤clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3 使⽤DWORD GetTickCount() 得到的是系统运⾏的时间精确到毫秒4 如果使⽤MFC的CTime类,可以⽤CTime::GetCurrentTime() 精确到秒5 要获取⾼精度时间,可以使⽤BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值然后⽤两次计数器的差除以Frequency就得到时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我们所编写的每一个程序,都会有一个运行环境的最低需求。

如何获取用户机器的配置信息呢?其实,我们可以利用API 函数轻松实现。

我们利用Visual C++ 向导生成一个单文档界面的窗口程序框架。

生成一个新的对话框,这个对话框用于显示我们所取得的机器的配置信息。

为这个对话框生成一个新类,命名为CSystemInfoDialog 类。

修改这个类的主要代码如下:
//对话框的初始化函数
BOOL CSystemInfoDialog::OnInitDialog()
{
CString DisplayString;
SYSTEM_INFO SystemInfo;
//检测CPU 的类型
::GetSystemInfo(&SystemInfo);
//WinAPI函数,用以取得系统信息
if (SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
{
switch (SystemInfo.wProcessorLevel)
{
//本程序只演示取得Intel系列CPU的方法
……
//省略对386及486机器的检测
case 5:
DisplayString= "Pentium";
break;
case 6:
DisplayString ="Pentium (II/Pro)";
break;
}
}
m_CpuType.SetWindowText(DisplayString);
//变量m_CpuType是一个CStatic框
//检测内存状态
MEMORYSTATUS MemoryStatus;
//内存的现行状态结构
MemoryStatus.dwLength=sizeof(MEMORYSTATUS);
//填充结构的大小
::GlobalMemoryStatus(&MemoryStatus);
//取得内存的状态
char buffer[20];
wsprintf(buffer,"%d bytes",MemoryStatus.dwTotalPhys);
//dwTotalPhys指示物理内存字节
m_Memory.SetWindowText(buffer);
//变量m_Memory是一个CStatic框
//检测操作系统版本
OSVERSIONINFO versionInfo;
//操作系统版本信息结构
versionInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
::GetVersionEx (&versionInfo);
//取得当前操作系统信息
if (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
//如果操作系统是Windows NT
……
//本文略过对NT系统的检测操作
}
else if (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
//如果操作系统是Windows 9X系统
DisplayString="Windows 95";
if ((versionInfo.dwMajorVersion >= 4)&&(versionInfo.dwMinorVersion > 0))
{
//版本4.1以上系统为Windows98系列
DisplayString="Windows 98";
char VersionBuffer[20];
//取得操作系统的版本号
wsprintf(VersionBuffer,"%d.%d",versionInfo.dwMajorVersion,versionInfo.dwMinorVersion); m_Version.SetWindowText(VersionBuffer);
//在对话框上显示版本信息
}
}
m_System.SetWindowText(DisplayString);
//在对话框上显示操作系统类
//检测鼠标
int MouseInstall=::GetSystemMetrics(SM_MOUSEPRESENT);
if(MouseInstall!=0)
m_Mouse.SetWindowText("有");
int cx,cy;
//取得当前显示分辨率
cx=::GetSystemMetrics(SM_CXSCREEN);
//水平分辨率
cy=::GetSystemMetrics(SM_CYSCREEN);
//垂直分辨率
char Display[20];
wsprintf(Display,"%d %d",cx,cy);
m_Display.SetWindowText(Display);
//在对话框上显示分辨率信息
//取得当前系统的颜色设置
CDC * DC=this->GetDC();
int nColors=DC->GetDeviceCaps(NUMCOLORS);
if(nColors!=-1)
wsprintf(Display,"%d 色",nColors);
else wsprintf(Display,"高彩或真彩");
m_ColorDeep.SetWindowText(Display);
//取得系统时间
SYSTEMTIME SystemTime;
::GetSystemTime(&&SystemTime);
wsprintf(Display,"%d-%d-%d",SystemTime.wMonth,SystemTime.wDay,SystemTime.wYear);
m_SystemDate.SetWindowText(Display);
//取得Windows系统的路径
::GetWindowsDirectory(Display,20);
m_SystemPath.SetWindowText(Display);
return TRUE;
}
当我们要显示系统的配置情况,只需调用这个类的DoModal() 函数将对话框显示出来就行了。

相关文档
最新文档