1.弹窗问题
Windows开发的应用程序,第一次安装及运行常见的弹窗有下面几种情况
(1)UAC弹窗(即用户账户弹窗)
如果安装包或者可执行程序是管理员权限,那么运行的时候就会弹出UAC弹窗
去掉方法:去掉管理员权限
说明:
1>UAC是windows安全机制,所以那种想要保留管理员权限又想不弹窗的实现不了
2>程序修改注册表信息到HKLM需要管理员权限,所以去掉管理员权限后,建议修改路径到HKCU路径
(2)防火墙弹窗
windows开发的程序本身运行不会弹出防火墙弹窗,但是如果程序中使用了网络socket有关的东西,那么就会弹出防火墙弹窗
去掉方法:
方法一:是去掉网络socket相关的代码
方法二:是安转包调用cmd命令把程序加入到防火墙白名单中即入站规则中,但是前提是需要管理员权限才能加进去,但是会弹出UAC弹窗
增加入站规则的cmd命令:
"cmd.exe" /c netsh advfirewall firewall Delete rule name="自己起个唯一的名字"
"cmd.exe" /c netsh advfirewall firewall add rule name="自己起个唯一的名字" dir=in action=allow program="路径\程序名.exe"
安装包根据各自脚本调用cmd的方法调用上述命令即可加到入站规则中,因为每加一次入站规则里就会多一次,所以上面是先删除掉所有的,再增加一个新的,
保证入站规则中只有一条信息,对应界面如下图,其中列表中左边的名称就是cmd命令里自己起的名称,
(3)数字签名
软件可以进行数字签名,来防止篡改和攻击,类似下图效果:
(4)杀毒软件报毒和自启弹窗
1>360安全卫士弹窗
去掉方法:进行360软件的认证,官网有,认证后不会报毒,也不会弹出自启的弹窗
2>腾讯电脑管家
去掉方法:报毒的可以在论坛上申诉,但是自启弹窗暂时不知道怎么弄,因为没有像360那样的软件认证
2.程序兼容问题
即保证在不同的机器不同的操作系统下都正常
(1)在非中文操作系统下界面文字全都不显示问题
很可能是因为在该操作系统下没有该字体导致的
解决:方法一是在安装包中增加检测如果没有该字体,就复制字体到操作系统字体目录下(系统目录新建一个字体文件,内容写进去,也相当于复制文件);方法二是程序换个通用的字体
(2)分辨率百分比
windows默认的分辨率百分比是100%,但是不同的机器这里可能存在不是100%的情况,windows对话框默认是支持自动调整的,且百分比越大,字体越大,对话框越大
百分比存在横向和纵向之分,如果程序的界面不支持自动调整,这里变化了,可能会出现字体变大而对话框没变,导致文字显示不下的问题,可能需要自己做下自适应
(知识普及:win10会看到项目和字体两个名词,项目就是与对话框相关的,项目越大,对话框越大,改变百分比,就是项目和字体都会都会变化,于是对话框和文字都变化了)
MFC获取分辨率百分比的方法:
stdafx.h头文件中增加:
extern float g_fScaleWidth; //水平方向
extern float g_fScaleHeight;//竖直方向
#define MULX(x) (int)((x) * g_fScaleWidth)
#define MULY(y) (int)((y) * g_fScaleHeight)
stdafx.cpp文件中增加:
float g_fScaleWidth = 1.0;
float g_fScaleHeight = 1.0;
程序运行处调用下面函数一次性获取:
void GetZoomScaleValue()
{
float dbZoomScaleWidth = 1.0;
float dbZoomScaleHeight = 1.0;
HDC desktopDc = CreateDC(_T("display"), NULL, NULL, NULL);
// Get native resolution
if (desktopDc != NULL)
{
int horizontalDPI = GetDeviceCaps( desktopDc, LOGPIXELSX );
dbZoomScaleWidth = horizontalDPI / 96.0f;
int verticalDPI = GetDeviceCaps( desktopDc, LOGPIXELSY );
dbZoomScaleHeight = verticalDPI / 96.0f;
DeleteDC(desktopDc);
}
if (dbZoomScaleWidth > 1.0)
{
g_fScaleWidth = dbZoomScaleWidth;
}
if (dbZoomScaleHeight > 1.0)
{
g_fScaleHeight = dbZoomScaleHeight;
}
}
这样后面所有窗口初始化地方都可以调用MULX(x)和MULY(y)设置好窗口的位置和控件的位置即可,即如果获取不到或者百分比是100%的时候按原大小显示,如果超过100%的进行放大处理
注意:手动改变分辨率百分比都是会注销的
(3)其他问题