固定到开始屏幕 Pin To StartScreen

本文介绍了如何在Windows 10系统的开始菜单中为应用程序创建磁贴,包括使用PinAppToStartScreen功能和ShellExecute函数的具体实现方法。

win10的回归的开始菜单整合了xp的开始菜单与win8中的Metro磁贴,个人非常喜欢这种设计

下午老大发现我们的程序在win10开始菜单的磁贴处并没有磁贴生成,于是搜了一下这方面的资料

了解了一下win10的开始菜单中几个概念,

其中左半部分为"StartMenu"

右半部分为"StartScreen",而并非先前认为的Menu

将自己的App钉在这里的功能描述为”Pin App Tto StartScreen”,选中一个程序右键菜单中提供了“固定到开始屏幕”的功能

在UWP应用中,微软提供了丰富的操作API, Windows.UI.StartScreen.SecondaryTile

不过我们是win32程序,并没有相应的资料,在网上搜索排查后发现

ShellExecute(NULL, "pintostartscreen", szLnkPath, NULL, NULL, 0);

能够达到效果

import ustruct from machine import UART from machine import FPIOA import os,sys import time from media.sensor import * # 导入sensor模块,使用摄像头相关接口 from media.display import * # 导入display模块,使用display相关接口 from media.media import * # 导入media模块,使用meida相关接口 # 移动平均滤波窗口大小/;/.' WINDOW_SIZE = 5 # 初始化移动平均滤波器 x_filter = [0] * WINDOW_SIZE y_filter = [0] * WINDOW_SIZE filter_index = 0 fpioa = FPIOA() fpioa.set_function(3, FPIOA.UART1_TXD) fpioa.set_function(4, FPIOA.UART1_RXD) # 初始化UART(波特率115200,TX=Pin5, RX=Pin6) uart = UART(UART.UART1, baudrate=115200) thresholds = [(73, 18, 53, 25, 38, 12)] # 红色阈值#(25, 77, -16, 122, -79, 59) # 屏幕正中间坐标 SCREEN_WIDTH = 640 SCREEN_HEIGHT = 480 CENTER_X = SCREEN_WIDTH // 2 CENTER_Y = SCREEN_HEIGHT // 2 # 定义移动步长 MOVE_STEP = 4 def create_packet(x, y, z): # 创建缓冲区(固定10字节) packet = bytearray(10) mv = memoryview(packet) # 帧头 mv[0:2] = b'\x2C\x12' # 写入数据(大端序) ustruct.pack_into('>HHH', mv, 2, x, y, z) # 从索引2开始写入6字节 # 计算校验和(异或校验,仅数据字段) checksum = 0 for i in range(2, 8): # 数据字段为索引2 - 7 checksum ^= mv[i] mv[8] = checksum # 帧尾 mv[9] = 0x5B return packet # 移动平均滤波函数 def moving_average_filter(value, filter_buffer): global filter_index filter_buffer[filter_index] = value filter_index = (filter_index + 1) % WINDOW_SIZE return sum(filter_buffer) // WINDOW_SIZE sensor = Sensor() # 构建摄像头对象,通过软件接口控制 sensor.reset() # 复位和初始化摄像头 sensor.set_framesize(width=SCREEN_WIDTH, height=SCREEN_HEIGHT) # 需与屏幕物理分辨率一致 sensor.set_pixformat(Sensor.RGB565) # 设置为彩色 sensor.set_vflip(1) sensor.set_hmirror(1) Display.init(Display.ST7701, to_ide=True) # 初始化驱动芯片,将摄像头或图像处理结果同时发送到 CanMV IDE 的虚拟显示窗口。 MediaManager.init() # 硬件初始化 sensor.run() # 开始 # 生成数据包并发送 x = CENTER_X y = CENTER_Y z = 0 while True: img = sensor.snapshot() # 拍摄一张图片 blobs = img.find_blobs([thresholds[0]], margin=100, merge=True, area_threhold=100, pixels_threshold=1000) # 0,1,2分别表示红,绿,蓝色 if blobs: for b in blobs: # 画矩形和箭头表示 tmp = img.draw_rectangle(b[0:4], thickness=4) tmp = img.draw_cross(b[5], b[6], thickness=2) x = b[5] y = b[6] z = 0 else: # 当未检测到目标时,计算x和y方向的移动距离 x_distance = CENTER_X - x y_distance = CENTER_Y - y # 根据距离和步长计算x和y方向的移动值 x_move = MOVE_STEP if x_distance > 0 else -MOVE_STEP if x_distance < 0 else 0 y_move = MOVE_STEP if y_distance > 0 else -MOVE_STEP if y_distance < 0 else 0 # 限制移动值不超过剩余距离 x_move = min(abs(x_distance), abs(x_move)) * (1 if x_move > 0 else -1) y_move = min(abs(y_distance), abs(y_move)) * (1 if y_move > 0 else -1) # 更新坐标 x += x_move y += y_move # 应用移动平均滤波 filtered_x = moving_average_filter(x, x_filter) filtered_y = moving_average_filter(y, y_filter) Display.show_image(img) packet = create_packet(filtered_x, filtered_y, z) uart.write(packet) print(filtered_x, filtered_y) time.sleep_us(1) 以此代码为模版,实现寻找黑色目标,并沿着黑色目标的边缘生成小点,将黑色目标边缘用小点标记出来
最新发布
07-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值