windows API
yangyang031213
QQ:1325989310
微信:18792430347
C++/QT/C/linux/MFC...
展开
-
使用 ShellExecute 打开文件或执行程序
使用 ShellExecute 打开文件或执行程序可以使用 ShellExecute 打开文件或执行程序。原型:HINSTANCE ShellExecute( _In_opt_ HWND hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL _In_opt_ LPCTSTR lpOperation,//操作 _In_ LPCTSTR lpFile,//要打原创 2017-03-20 09:55:56 · 17501 阅读 · 0 评论 -
添加、移除托盘图标以及气泡提示
添加、移除托盘图标以及气泡提示在头文件中声明NOTIFYICONDATA类型的m_tray结构,然后再类向导中添加WM_NOTIFYICON消息的处理函数,使用 Shell_NotifyIcon 操作托盘图标。 .hpublic: BOOL AddRemoveTray(BOOL flag); NOTIFYICONDATA m_tray; BOOL ShowBubbleTip原创 2017-07-09 23:54:16 · 2011 阅读 · 0 评论 -
socket TCP 通信
socket TCP 通信SOCKET可用于主机间或者进程间通信等。 TCP/UDP通信流程: 代码(本机TCP): Server://启动监听线程void CSocketDlg::OnBnClickedStart(){ m_run = TRUE; if (!AfxBeginThread(CSocketDlg::StartRecvThread, this, THREAD原创 2017-07-10 13:05:42 · 367 阅读 · 0 评论 -
异步socket TCP 通信
异步socket TCP 通信使用 WSAAsyncSelect 可实现异步 socket 通信,原型:WSAAsyncSelect( SOCKET s, //套接字 HWND hWnd, //接收网络事件的窗口句柄 unsigned int wMsg,//网络事件通知消息 long lWvent //套接字需原创 2017-07-10 13:09:01 · 640 阅读 · 0 评论 -
守护进程
守护进程WaitForMultipleObjects 可以等待进程、线程、事件、信号、mutex等,可以用它实现进程保护,在需要保护的进程被结束时,重新启动保护进程,可以达到普通用户无法正常结束进程的目的,如保护进程和被保护进程互相保护,那就更难结束了。代码: stdafx.h#define WM_PROCESSEND WM_USER+1typedef struct PROCESS_STRUCT原创 2017-07-10 13:14:29 · 218 阅读 · 0 评论 -
控制服务程序
控制服务程序枚举、启动、停止服务程序,使用OpenSCManager、EnumServicesStatus、OpenService、ControlService、StartService等API。 CEnumServiceDlg.cppBEGIN_MESSAGE_MAP(CEnumServiceDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRA原创 2017-07-10 13:19:12 · 395 阅读 · 0 评论 -
获取特殊路径
获取特殊路径获取windows下的一些特殊路径,如桌面、我的文档、收藏等路径,使用 SHGetSpecialFolderPath 获取。 原型:BOOL SHGetSpecialFolderPath( HWND hwndOwner, _Out_ LPTSTR lpszPath, _In_ int csidl, _In_ BOOL fCreate)原创 2017-07-25 17:54:48 · 479 阅读 · 0 评论 -
windows下线程同步
windows下线程同步windows下的一些同步方法,volatile、Interlocke函数、CRITICAL_SECTION、SRWLOCK、Mutex。 - volatile: 变量声明未 volatile 变量,如:volatile int num = 0;Interlocke函数: 该系列函数能实现原子操作:LONG __cdecl InterlockedIncrement(原创 2017-07-19 16:17:17 · 382 阅读 · 0 评论 -
压缩access数据库
遇到一个问题,使用的是accesss数据库,在加载数据库中的信息的时候,速度特别慢,有时候一次查询最终会卡15秒左右,然后才能得到结果,跟踪发现卡的地方在SQLExecDirect中,已经是odbc api了。打开数据库看也没发现啥问题,后来点了access上边的 压缩和修复数据库 工具,数据库从原来的 8M 瞬间变成了 800k ,使用压缩后的数据库时速度就特别快了,不知道是不是access数据库原创 2017-11-21 15:46:48 · 2362 阅读 · 0 评论 -
CEdit换行和GetLine乱码
CEdit换行和GetLine乱码CEdit换行: 继承自CEdit的类中处理PreTranslateMessage可换行,类似于:BOOL CNewEdit::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { if (pMsg->wParam == VK_RETURN)原创 2017-11-21 16:00:19 · 793 阅读 · 0 评论 -
windows截图保存为文件
用到MFC的版本: for(int i = 0;i < 30; ++i) { HDC hdcSrc = GetDC(NULL); int nBitPerPixel = GetDeviceCaps(hdcSrc,BITSPIXEL); int nWidth = GetDeviceCaps(hdcSrc,HORZRES);原创 2017-11-21 15:49:05 · 768 阅读 · 0 评论 -
获取硬盘、U盘数量和名称
获取硬盘、U盘数量和名称,使用 SetupDiEnumDeviceInfo 枚举磁盘设备,再通过 SetupDiGetDeviceRegistryProperty 获取 SPDRP_REMOVAL_POLICY 属性,确认是不是可移动设备,然后再获取名字就好了。#include "SetupAPI.h"#pragma comment(lib,"Setupapi.lib")INT GetHardD原创 2017-11-21 15:45:05 · 2944 阅读 · 3 评论 -
MFC程序字符集改变后界面风格改变
VS2015 MFC 界面程序字符集由 Unicode 变为多字节后,界面风格变成了 VC6 MFC控件的风格了,如下图: 解决方法: 修改 stdafx.h 中自动生成的代码,去掉 #ifdef _UNICODE,如下://#ifdef _UNICODE#if defined _M_IX86#pragma comment(linker,"/manifestdependency:原创 2018-01-10 14:21:00 · 960 阅读 · 0 评论 -
MFC 程序限制窗口最小、最大大小
窗口大小改变时窗口会接收到 WM_GETMINMAXINFO 消息获取窗口最小、最大的限制信息,处理该消息就能限制窗口大小。 可以通过 类向导 处理,也可以手动添加消息处理,在消息映射时:BEGIN_MESSAGE_MAP(CPaperEditorDlg, CDialogEx) ON_WM_GETMINMAXINFO()END_MESSAGE_MAP()头文件:void OnGetMin原创 2018-01-10 14:21:58 · 1695 阅读 · 0 评论 -
MFC 添加tooltip
在消息映射中:BEGIN_MESSAGE_MAP(CPaperEditorDlg, CDialogEx) ON_NOTIFY_EX(TTN_NEEDTEXT,0, SetToopTipText)END_MESSAGE_MAP()SetToopTipText 是消息回调函数。 头文件中: //tooltip BOOL SetToopTipText(UINT id, NMHDR原创 2018-01-10 14:22:31 · 719 阅读 · 0 评论 -
JS将表格导出excel
需要使用activex,如下代码将 score_table 导出,似乎不用指定版本,任意版本的excel都可以导出。function SaveAsExcel(){ var objTab=document.getElementById("score_table"); try { var xls = new ActiveXObject("Excel.Applic原创 2018-01-10 14:28:46 · 626 阅读 · 0 评论 -
关机、注销、登录、锁屏、资源管理器重启等消息
关机、注销、登录、锁屏、资源管理器重启等消息关机、重启消息 WM_QUERYENDSESSION: 关机、重启时windows会广播一个WM_QUERYENDSESSION 消息,接收到该消息后,应用可以做一些清理退出动作,如果未处理返回,win10等会出现应用程序组织关机、重启的提示,win7等则会等待5s左右,然后强行关闭应用。使用时直接在 WindowProc 中处理 WM_QUERYEN原创 2017-07-07 13:34:23 · 6459 阅读 · 0 评论 -
异步命名管道
异步命名管道命名管道可以用于进程间通信。 client 端: // 打开管道 HANDLE hPipe = CreateFile("\\\\.\\Pipe\\NamedPipe", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hPipe == I原创 2017-07-07 16:52:51 · 2333 阅读 · 0 评论 -
使用 ShellExecuteEx 打开文件或执行程序
使用 ShellExecuteEx 打开文件或执行程序可以使用 ShellExecuteEx 打开文件或执行程序,与 ShellExecute 比较,ShellExecuteEx 提供了更多的控制,但是看起来使用也更复杂。 原型:BOOL ShellExecuteEx( _Inout_ SHELLEXECUTEINFO *pExecInfo);输入输出参数都是 SHELLEXECUTEINF原创 2017-03-20 09:56:30 · 20686 阅读 · 9 评论 -
使用 CreateProcess 执行程序
使用 CreateProcess 执行程序CreateProcess 创建新进程和它的主进程,新进程运行指定可执行文件。 函数原型:BOOL WINAPI CreateProcess( _In_opt_ LPCTSTR lpApplicationName, _Inout_opt_ LPTSTR lpCommandLine,原创 2017-03-20 09:56:54 · 2986 阅读 · 0 评论 -
枚举进程
枚举进程通过CreateToolhelp32Snapshot创建快照,遍历之即可得到。原型:HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, //指定需要返回的快照类型 DWORD th32ProcessID //指定快照要获取的进程,设置为0可获取系统进程列表 );dwFlags可以是:TH32CS_SNAPALL原创 2017-03-12 18:43:40 · 225 阅读 · 0 评论 -
windows下进程单例
windows下进程单例有时候需要让进程单例执行,以防止多个实例导致异常,windows下可以使用系统事件来实现,比如Event、Mutex等,Event和Mutex在创建的时候如果对象已存在, GetLastError会返回ERROR_ALREADY_EXISTS,可以以此实现进程单例:1、CreateEvent方法: 原型:HANDLECreateEvent( LPSECURITY原创 2017-03-12 18:40:58 · 2357 阅读 · 0 评论 -
获取当前目录
获取当前目录1、GetCurrentDirectory()获取: 函数原型:DWORD GetCurrentDirectory( DWORD nBufferLength, // buffer长度 LPTSTR lpBuffer // buffer ); 函数调用成功会返回目录装到buffer中的长度。2、使用GetModuleFileName()获取完整路径: 原型DW原创 2017-03-12 18:37:03 · 431 阅读 · 0 评论 -
枚举进程模块
枚举进程模块使用 CreateToolhelp32Snapshot 创建进程快照,第一个参数为 TH32CS_SNAPMODULE 时创建进程模块快照,类似枚举进程时使用的 Process32First、Process32Next,枚举进程模块时使用 Module32First、Module32Next 枚举进程模块。代码: CEnumModuleDlg:BEGIN_MESSAGE_MAP(CEn原创 2017-07-11 21:27:25 · 1023 阅读 · 0 评论 -
暂停和恢复进程
暂停和恢复进程CreateToolhelp32Snapshot创建线程快照,枚举线程,判断线程PID与选中的PID一致,则使用SuspendThread、ResumeThread暂停和恢复线程,进程的所有线程暂停或恢复,则进程也将会被暂停和恢复。进程被暂停后包括GUI都完全无响应。代码:BEGIN_MESSAGE_MAP(CSuspendProcessDlg, CDialogEx) ON_W原创 2017-07-16 18:17:03 · 1413 阅读 · 0 评论 -
DLL导出
DLL导出DllMain 类似于main函数或者winmain等入口函数,当加载、卸载、线程启动、线程终止时会调用,可在此申请资源或清理资源等。DLL可以配合头文件和lib使用,或者使用LoadLibrary+GetProcAddress动态加载。代码: DLL: dllmain.cpp 生成DLL项目时会自动生成.#include "stdafx.h"BOOL APIENTRY DllMai原创 2017-07-16 18:36:58 · 294 阅读 · 0 评论 -
使用 GetAdaptersInfo 或 GetAdaptersAddresses 获取网络相关参数
使用 GetAdaptersInfo 或 GetAdaptersAddresses 获取网络相关参数GetAdaptersInfo 和 GetAdaptersAddresses 都能获取网络相关信息,如网卡名称、MAC 地址、IP、DNS、网关等信息,但是两个函数感觉都有一些问题,GetAdaptersInfo 获取不到 IPV6 地址信息,使用起来较为简单,GetAdaptersAddresses原创 2017-03-22 11:15:53 · 20776 阅读 · 8 评论 -
关机、重启
关机、重启可以使用ExitWindowsEx函数实现重启、关机、注销等: 原型:BOOL ExitWindowsEx( UINT uFlags, // 关闭参数 DWORD dwReserved // 系统保留,一般取0);uFlags参数 EWX_FORCE强制终止进程。当此标志设置,Windows不会发送消息WM_QUERYENDSESSION和WM_ENDSESSION的消息原创 2017-03-12 18:42:45 · 407 阅读 · 0 评论 -
枚举窗口
枚举窗口FindWindow: windows中可以使用FindWindow查找指定窗口:HWND WINAPI FindWindow( _In_opt_ LPCTSTR lpClassName,//窗口类名 _In_opt_ LPCTSTR lpWindowName//窗口名,标题);lpClassName为注册窗口时的类名,如果为NULL,则匹配标题,返回值为句柄。类名窗口名可以原创 2017-03-12 18:46:24 · 2646 阅读 · 0 评论 -
结束进程
结束进程使用TerminateProcess直接结束进程,如果结束不了,则修改token获取SE_DEBUG_NAME特权,再次TerminateProcess结束进程。//请求获取特权BOOL CKillPSDlg::SetPrivilege(LPCTSTR lpszPrivilege, BOOL bEnable){ OutputDebugString(lpszPrivilege);原创 2017-07-07 13:18:34 · 294 阅读 · 0 评论 -
Windows下特权获取
Windows下特权获取Windows下部分操作需要特权才能执行,如下代码示例通过修改token获取SE_DEBUG_NAME特权,其他特权与此类似,只需要将SE_DEBUG_NAME换成其他特权即可,如下代码类似于MSDN的示例: https://msdn.microsoft.com/en-us/library/windows/desktop/aa446619(v=vs.85).aspx wi原创 2017-07-07 13:20:14 · 3968 阅读 · 0 评论 -
微秒级延时
微秒级延时windows下Sleep()函数提供毫秒级延时,但是没有微秒级延时,以下代码可以微秒级延时:void DelayExec(double us) { if (us == 0) { return; } LARGE_INTEGER litmp; LONGLONG QPart1,QPart2;; double原创 2017-07-07 13:21:30 · 1022 阅读 · 0 评论 -
纯C MD5计算
纯C MD5计算代码是从网上找的,具体来源找不到了,在找来的代码上改了内存泄漏和改成纯C实现。 .c#include<string.h>#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <math.h> typedef unsigned char BYTE;typedef unsigne原创 2017-07-07 16:41:36 · 433 阅读 · 0 评论 -
MFCRibbion工具栏透明图片
创建: //添加考试按钮再底部 if(!m_examToolBar.CreateEx(this,TBSTYLE_FLAT,WS_VISIBLE | WS_CHILD | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_BOTTOM,CRect(0,0,0,0),IDR_TOOLBAR_EXAM) || !m_examTo原创 2018-01-10 14:38:18 · 842 阅读 · 0 评论