1
、
得到当前进程的
HINSTANCE
HMODULE hModule = ::GetModuleHandle(NULL);
HINSTANCE hInst = hModule;
HINSTANCE hInst = hModule;
2
、得到当前进程的绝对路径
GetModuleFileName()函数,该函数的第一个参数如果为NULL,则返回最后一个发出WM_CREAT 消息的文件的绝对路径。
3
、手工创建状态栏上应用程序的图标
CreateStatusIcon函数就是调用CreateIconIndirect用来手工创建16x16图标
4
、用点对点消息队列进行进程间通信
CreateMsgQueue();
OpenMsgQueue();
GetMsgQueueInfo();
ReadMsgQueue();
WriteMsgQueue();
CloseMsgQueue();
RequestDeviceNotifications();
5.隐藏taskbar的几种方法:
5.1全屏时隐藏,退出全屏时显示,在这种情况下可以先Findwindow(“HHTASKBAR”),然后用movewindow移出全屏范围之外,需要时再移入
5.2一直隐藏(就是从系统起来之后就不希望看到taskbar),可以通过Findwindow,和showwindow来实现,也可以通过修改taskbar.cpp(public/shell/oak/hpc/explorer/taskbar/)中的CTaskBar::Register函数,让其直接返回true
5.3动态显示和隐藏,可以修改platform.reg文件
HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\AutoHide("default"=dword:1)和HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OnTop("default"=dword:0)以及 HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\SlideTaskBar("default"=dword:0)
6.对软件盘操作的函数:
SipGetInfo(&si)
SipSetInfo(&si)
SipShowIM(SIPF_ON)
7.增加或删除“开始”启动程序:
在stmenu.cpp(public/shell/oak/hpc/explorer/taskbar)中对stmenuData这个结构体数组增加或删除成员
8.流驱动注册表中的index:
大家都知道驱动设备的前缀prefix要用3个大写字母表示,而index则是驱动设备的索引。当在应用程序中用createfile打开设备的时候,该函数的第一个参数就是prefix和index的组合
9.EVC中打开网页程序
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = TEXT("[url]http://www.163.com[/url]");
ShExecInfo.lpParameters =NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOWNORMAL;
ShellExecuteEx(&ShExecInfo);
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = TEXT("[url]http://www.163.com[/url]");
ShExecInfo.lpParameters =NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOWNORMAL;
ShellExecuteEx(&ShExecInfo);
10.取得设备信息
取得设备OEM信息:
TCHAR wszMachineName[128];
SystemParametersInfo(SPI_GETOEMINFO, sizeof(wszMachineName),&wszMachineName, 0);
SystemParametersInfo(SPI_GETOEMINFO, sizeof(wszMachineName),&wszMachineName, 0);
取得平台信息:
TCHAR wszVersion[256];
SystemParametersInfo(SPI_GETPLATFORMTYPE, sizeof(wszVersion),&wszVersion, 0);
SystemParametersInfo(SPI_GETPLATFORMTYPE, sizeof(wszVersion),&wszVersion, 0);
11.wince屏幕的旋转
从Windows CE 4.0开始,DEVMODE 结构多了一个属性dmDisplayOrientation,你可以通过这个属性来取得或设置屏幕旋转模式,它对应的值如下。
DMDO_0 不旋转
DMDO_90 旋转90度
DMDO_180 旋转180度
DMDO_270 旋转270度
DMDO_0 不旋转
DMDO_90 旋转90度
DMDO_180 旋转180度
DMDO_270 旋转270度
切换屏幕旋转模式通过调用 ChangeDisplaySettingsEx 来实现,如:
DEVMODE devmode = {0};
devmode.dmSize = sizeof(DEVMODE);
devmode.dmDisplayOrientation = DMDO_90; //水平模式
devmode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);
DEVMODE devmode = {0};
devmode.dmSize = sizeof(DEVMODE);
devmode.dmDisplayOrientation = DMDO_90; //水平模式
devmode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);
取得当前模式的代码如下:
DEVMODE devmode = {0};
devmode.dmSize = sizeof(DEVMODE);
devmode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &devmode, 0, CDS_TEST, NULL);
通过 devmode.dmDisplayOrientation 的值可以判断当前模式。
DEVMODE devmode = {0};
devmode.dmSize = sizeof(DEVMODE);
devmode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &devmode, 0, CDS_TEST, NULL);
通过 devmode.dmDisplayOrientation 的值可以判断当前模式。
值得注意的是,这样切换模式并不是永久的,当设备重新起动后,就会还原为初始状态。
如果你需要在保留切换的屏幕模式,可以通过设置注册表中HKEY_LOCAL_MACHINE\System\GDI\Rotation 下的两个键值实现
Angle - DWORD (0, 90, 180, 270)
LandscapeMode - DWORD (0,1)
如果你需要在保留切换的屏幕模式,可以通过设置注册表中HKEY_LOCAL_MACHINE\System\GDI\Rotation 下的两个键值实现
Angle - DWORD (0, 90, 180, 270)
LandscapeMode - DWORD (0,1)
12.拷屏并保存为bmp图片
void SaveDCToBMP(HDC hDC,int nStartX,int nStartY,
int nWidth,int nHeight,LPCTSTR szFileName)
{
//定义图形色深
int iPixel = 32;
int nWidth,int nHeight,LPCTSTR szFileName)
{
//定义图形色深
int iPixel = 32;
转载于:https://blog.51cto.com/bluefish/58091