VC/VS开发的exe程序运行问题续

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)其他问题



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值