📄 capprop.c
字号:
pDevExt,
FIELDOFFSET(CAMERA_REGISTER_MAP, Sharpness),
&pDevExt->DevProperty[ENUM_SHARPNESS].Feature,
hKeySettings,
wszSharpness,
sizeof(wszSharpness),
&pDevExt->DevProperty[ENUM_SHARPNESS].StatusNControl,
wszSharpnessDef,
sizeof(wszSharpnessDef),
&pDevExt->DevProperty[ENUM_SHARPNESS].DefaultValue
)) {
pDevExt->DevProperty[ENUM_SHARPNESS].RangeNStep.Bounds.SignedMinimum = pDevExt->DevProperty[ENUM_SHARPNESS].Feature.Feature.MIN_Value;
pDevExt->DevProperty[ENUM_SHARPNESS].RangeNStep.Bounds.SignedMaximum = pDevExt->DevProperty[ENUM_SHARPNESS].Feature.Feature.MAX_Value;
pDevExt->DevPropDefine[ENUM_SHARPNESS].Range.Members = (VOID*) &pDevExt->DevProperty[ENUM_SHARPNESS].RangeNStep;
pDevExt->DevPropDefine[ENUM_SHARPNESS].Default.Members = (VOID*) &pDevExt->DevProperty[ENUM_SHARPNESS].DefaultValue;
} else {
pDevExt->VideoProcAmpItems[ENUM_SHARPNESS].GetSupported = FALSE;
pDevExt->VideoProcAmpItems[ENUM_SHARPNESS].SetSupported = FALSE;
}
// WhiteBalance
if(DCamQueryPropertyFeaturesAndSettings(
pIrb,
pDevExt,
FIELDOFFSET(CAMERA_REGISTER_MAP, WhiteBalance),
&pDevExt->DevProperty[ENUM_WHITEBALANCE].Feature,
hKeySettings,
wszWhiteBalance,
sizeof(wszWhiteBalance),
&pDevExt->DevProperty[ENUM_WHITEBALANCE].StatusNControl,
wszWhiteBalanceDef,
sizeof(wszWhiteBalanceDef),
&pDevExt->DevProperty[ENUM_WHITEBALANCE].DefaultValue
)) {
pDevExt->DevProperty[ENUM_WHITEBALANCE].RangeNStep.Bounds.SignedMinimum = pDevExt->DevProperty[ENUM_WHITEBALANCE].Feature.Feature.MIN_Value;
pDevExt->DevProperty[ENUM_WHITEBALANCE].RangeNStep.Bounds.SignedMaximum = pDevExt->DevProperty[ENUM_WHITEBALANCE].Feature.Feature.MAX_Value;
pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Range.Members = (VOID*) &pDevExt->DevProperty[ENUM_WHITEBALANCE].RangeNStep;
pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Default.Members = (VOID*) &pDevExt->DevProperty[ENUM_WHITEBALANCE].DefaultValue;
} else {
pDevExt->VideoProcAmpItems[ENUM_WHITEBALANCE].GetSupported = FALSE;
pDevExt->VideoProcAmpItems[ENUM_WHITEBALANCE].SetSupported = FALSE;
}
// Zoom
if(DCamQueryPropertyFeaturesAndSettings(
pIrb,
pDevExt,
FIELDOFFSET(CAMERA_REGISTER_MAP, Zoom),
&pDevExt->DevProperty[ENUM_ZOOM].Feature,
hKeySettings,
wszZoom,
sizeof(wszZoom),
&pDevExt->DevProperty[ENUM_ZOOM].StatusNControl,
wszZoomDef,
sizeof(wszZoomDef),
&pDevExt->DevProperty[ENUM_ZOOM].DefaultValue
)) {
pDevExt->DevProperty[ENUM_ZOOM].RangeNStep.Bounds.SignedMinimum = pDevExt->DevProperty[ENUM_ZOOM].Feature.Feature.MIN_Value;
pDevExt->DevProperty[ENUM_ZOOM].RangeNStep.Bounds.SignedMaximum = pDevExt->DevProperty[ENUM_ZOOM].Feature.Feature.MAX_Value;
pDevExt->DevPropDefine[ENUM_ZOOM].Range.Members = (VOID*) &pDevExt->DevProperty[ENUM_ZOOM].RangeNStep;
pDevExt->DevPropDefine[ENUM_ZOOM].Default.Members = (VOID*) &pDevExt->DevProperty[ENUM_ZOOM].DefaultValue;
} else {
pDevExt->VideoProcAmpItems[ENUM_ZOOM].GetSupported = FALSE;
pDevExt->VideoProcAmpItems[ENUM_ZOOM].SetSupported = FALSE;
}
// Focus
if(DCamQueryPropertyFeaturesAndSettings(
pIrb,
pDevExt,
FIELDOFFSET(CAMERA_REGISTER_MAP, Focus),
&pDevExt->DevProperty[ENUM_FOCUS].Feature,
hKeySettings,
wszFocus,
sizeof(wszFocus),
&pDevExt->DevProperty[ENUM_FOCUS].StatusNControl,
wszFocusDef,
sizeof(wszFocusDef),
&pDevExt->DevProperty[ENUM_FOCUS].DefaultValue
)) {
pDevExt->DevProperty[ENUM_FOCUS].RangeNStep.Bounds.SignedMinimum = pDevExt->DevProperty[ENUM_FOCUS].Feature.Feature.MIN_Value;
pDevExt->DevProperty[ENUM_FOCUS].RangeNStep.Bounds.SignedMaximum = pDevExt->DevProperty[ENUM_FOCUS].Feature.Feature.MAX_Value;
pDevExt->DevPropDefine[ENUM_FOCUS].Range.Members = (VOID*) &pDevExt->DevProperty[ENUM_FOCUS].RangeNStep;
pDevExt->DevPropDefine[ENUM_FOCUS].Default.Members = (VOID*) &pDevExt->DevProperty[ENUM_FOCUS].DefaultValue;
} else {
pDevExt->VideoProcAmpItems[ENUM_FOCUS].GetSupported = FALSE;
pDevExt->VideoProcAmpItems[ENUM_FOCUS].SetSupported = FALSE;
}
ZwClose(hKeySettings);
ZwClose(hPDOKey);
ExFreePool(pIrb); pIrb = NULL;
return TRUE;
}
BOOL
DCamSetPropertyValuesToRegistry(
PDCAM_EXTENSION pDevExt
)
{
// Set the default to :
// HLM\Software\DeviceExtension->pchVendorName\1394DCam
NTSTATUS Status;
HANDLE hPDOKey, hKeySettings;
DbgMsg2(("\'SetPropertyValuesToRegistry: pDevExt=%x; pDevExt->BusDeviceObject=%x\n", pDevExt, pDevExt->BusDeviceObject));
//
// Registry key:
// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\
// {6BDD1FC6-810F-11D0-BEC7-08002BE2092F\000x
//
Status =
IoOpenDeviceRegistryKey(
pDevExt->PhysicalDeviceObject,
PLUGPLAY_REGKEY_DRIVER,
STANDARD_RIGHTS_WRITE,
&hPDOKey);
// PDO might be deleted when it was removed.
if(! pDevExt->bDevRemoved) {
ASSERT(Status == STATUS_SUCCESS);
}
//
// reading the feature and registry setting for each property
//
if(NT_SUCCESS(Status)) {
// Create or open the settings key
Status =
CreateRegistrySubKey(
hPDOKey,
KEY_ALL_ACCESS,
wszSettings,
&hKeySettings
);
if(NT_SUCCESS(Status)) {
// Brightness
Status = SetRegistryKeyValue(
hKeySettings,
wszBrightness,
pDevExt->DevProperty[ENUM_BRIGHTNESS].StatusNControl.AsULONG);
DbgMsg2(("\'SetPropertyValuesToRegistry: Status %x, Brightness %d\n", Status, pDevExt->DevProperty[ENUM_BRIGHTNESS].StatusNControl.AsULONG));
// Hue
Status = SetRegistryKeyValue(
hKeySettings,
wszHue,
pDevExt->DevProperty[ENUM_HUE].StatusNControl.AsULONG);
DbgMsg2(("\'SetPropertyValuesToRegistry: Status %x, Hue %d\n", Status, pDevExt->DevProperty[ENUM_HUE].StatusNControl.AsULONG));
// Saturation
Status = SetRegistryKeyValue(
hKeySettings,
wszSaturation,
pDevExt->DevProperty[ENUM_SATURATION].StatusNControl.AsULONG);
DbgMsg2(("\'SetPropertyValuesToRegistry: Status %x, Saturation %d\n", Status, pDevExt->DevProperty[ENUM_SATURATION].StatusNControl.AsULONG));
// Sharpness
Status = SetRegistryKeyValue(
hKeySettings,
wszSharpness,
pDevExt->DevProperty[ENUM_SHARPNESS].StatusNControl.AsULONG);
DbgMsg2(("\'SetPropertyValuesToRegistry: Status %x, Sharpness %d\n", Status, pDevExt->DevProperty[ENUM_SHARPNESS].StatusNControl.AsULONG));
// WhiteBalance
Status = SetRegistryKeyValue(
hKeySettings,
wszWhiteBalance,
pDevExt->DevProperty[ENUM_WHITEBALANCE].StatusNControl.AsULONG);
DbgMsg2(("\'SetPropertyValuesToRegistry: Status %x, WhiteBalance %d\n", Status, pDevExt->DevProperty[ENUM_WHITEBALANCE].StatusNControl.AsULONG));
// Zoom
Status = SetRegistryKeyValue(
hKeySettings,
wszZoom,
pDevExt->DevProperty[ENUM_ZOOM].StatusNControl.AsULONG);
DbgMsg2(("\'SetPropertyValuesToRegistry: Status %x, Zoom %d\n", Status, pDevExt->DevProperty[ENUM_ZOOM].StatusNControl.AsULONG));
// Focus
Status = SetRegistryKeyValue(
hKeySettings,
wszFocus,
pDevExt->DevProperty[ENUM_FOCUS].StatusNControl.AsULONG);
DbgMsg2(("\'SetPropertyValuesToRegistry: Status %x, Focus %d\n", Status, pDevExt->DevProperty[ENUM_FOCUS].StatusNControl.AsULONG));
ZwClose(hKeySettings);
ZwClose(hPDOKey);
return TRUE;
} else {
ERROR_LOG(("\'SetPropertyValuesToRegistry: CreateRegistrySubKey failed with Status=%x\n", Status));
}
ZwClose(hPDOKey);
} else {
DbgMsg2(("\'SetPropertyValuesToRegistry: IoOpenDeviceRegistryKey failed with Status=%x\n", Status));
}
return FALSE;
}
VOID
SetCurrentDevicePropertyValues(
PDCAM_EXTENSION pDevExt,
PIRB pIrb
)
{
ULONG ulFlags;
// Set to the last saved values or the defaults
// VideoProcAmp
ulFlags = pDevExt->DevProperty[ENUM_BRIGHTNESS].StatusNControl.Brightness.AutoMode ? KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO : KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
DCamSetProperty(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, Brightness), ulFlags, pDevExt->DevProperty[ENUM_BRIGHTNESS].StatusNControl.Brightness.Value, &pDevExt->DevProperty[ENUM_BRIGHTNESS].Feature, &pDevExt->DevProperty[ENUM_BRIGHTNESS].StatusNControl);
ulFlags = pDevExt->DevProperty[ENUM_HUE].StatusNControl.Brightness.AutoMode ? KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO : KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
DCamSetProperty(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, Hue), ulFlags, pDevExt->DevProperty[ENUM_HUE].StatusNControl.Brightness.Value, &pDevExt->DevProperty[ENUM_HUE].Feature, &pDevExt->DevProperty[ENUM_HUE].StatusNControl);
ulFlags = pDevExt->DevProperty[ENUM_SATURATION].StatusNControl.Brightness.AutoMode ? KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO : KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
DCamSetProperty(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, Saturation), ulFlags, pDevExt->DevProperty[ENUM_SATURATION].StatusNControl.Brightness.Value, &pDevExt->DevProperty[ENUM_SATURATION].Feature, &pDevExt->DevProperty[ENUM_SATURATION].StatusNControl);
ulFlags = pDevExt->DevProperty[ENUM_SHARPNESS].StatusNControl.Brightness.AutoMode ? KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO : KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
DCamSetProperty(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, Sharpness), ulFlags, pDevExt->DevProperty[ENUM_SHARPNESS].StatusNControl.Brightness.Value, &pDevExt->DevProperty[ENUM_SHARPNESS].Feature, &pDevExt->DevProperty[ENUM_SHARPNESS].StatusNControl);
ulFlags = pDevExt->DevProperty[ENUM_WHITEBALANCE].StatusNControl.Brightness.AutoMode ? KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO : KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
DCamSetProperty(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, WhiteBalance),ulFlags, pDevExt->DevProperty[ENUM_WHITEBALANCE].StatusNControl.WhiteBalance.UValue, &pDevExt->DevProperty[ENUM_WHITEBALANCE].Feature, &pDevExt->DevProperty[ENUM_WHITEBALANCE].StatusNControl);
// CameraControl
ulFlags = pDevExt->DevProperty[ENUM_ZOOM].StatusNControl.Brightness.AutoMode ? KSPROPERTY_CAMERACONTROL_FLAGS_AUTO : KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
DCamSetProperty(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, Zoom), ulFlags, pDevExt->DevProperty[ENUM_ZOOM].StatusNControl.Brightness.Value, &pDevExt->DevProperty[ENUM_ZOOM].Feature, &pDevExt->DevProperty[ENUM_ZOOM].StatusNControl);
ulFlags = pDevExt->DevProperty[ENUM_FOCUS].StatusNControl.Brightness.AutoMode ? KSPROPERTY_CAMERACONTROL_FLAGS_AUTO : KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
DCamSetProperty(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, Focus), ulFlags, pDevExt->DevProperty[ENUM_FOCUS].StatusNControl.Brightness.Value, &pDevExt->DevProperty[ENUM_FOCUS].Feature, &pDevExt->DevProperty[ENUM_FOCUS].StatusNControl);
}
BOOL
DCamPrepareDevProperties(
PDCAM_EXTENSION pDevExt
)
/*
Contruct the property table and initialize them to the default value.
*/
{
// Initialize property settings (part of the Device Extension)
// Property Sets: VideoProcAmp and CameraControl sets
pDevExt->ulPropSetSupported = NUMBER_OF_ADAPTER_PROPERTY_SETS;
RtlCopyMemory(&pDevExt->VideoProcAmpSet, AdapterPropertyTable, sizeof(KSPROPERTY_SET) * NUMBER_OF_ADAPTER_PROPERTY_SETS);
pDevExt->VideoProcAmpSet.PropertyItem = &pDevExt->VideoProcAmpItems[0];
pDevExt->CameraControlSet.PropertyItem = &pDevExt->CameraControlItems[0];
// Property Items, VideoProcAmp and CameraControl Items
RtlCopyMemory(&pDevExt->VideoProcAmpItems, VideoProcAmpProperties, sizeof(KSPROPERTY_ITEM) * NUM_VIDEOPROCAMP_ITEMS);
RtlCopyMemory(&pDevExt->CameraControlItems, CameraControlProperties, sizeof(KSPROPERTY_ITEM) * NUM_CAMERACONTROL_ITEMS);
// Property values and it member lists (range and default)
pDevExt->VideoProcAmpItems[ENUM_BRIGHTNESS].Values = &pDevExt->DevPropDefine[ENUM_BRIGHTNESS].Value;
pDevExt->VideoProcAmpItems[ENUM_SHARPNESS].Values = &pDevExt->DevPropDefine[ENUM_SHARPNESS].Value;
pDevExt->VideoProcAmpItems[ENUM_HUE].Values = &pDevExt->DevPropDefine[ENUM_HUE].Value;
pDevExt->VideoProcAmpItems[ENUM_SATURATION].Values = &pDevExt->DevPropDefine[ENUM_SATURATION].Value;
pDevExt->VideoProcAmpItems[ENUM_WHITEBALANCE].Values = &pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Value;
//
pDevExt->VideoProcAmpItems[ENUM_FOCUS].Values = &pDevExt->DevPropDefine[ENUM_FOCUS].Value;
pDevExt->VideoProcAmpItems[ENUM_ZOOM].Values = &pDevExt->DevPropDefine[ENUM_ZOOM].Value;
pDevExt->DevPropDefine[ENUM_BRIGHTNESS].Value = BrightnessValues;
pDevExt->DevPropDefine[ENUM_BRIGHTNESS].Value.MembersList = &pDevExt->DevPropDefine[ENUM_BRIGHTNESS].Range;
pDevExt->DevPropDefine[ENUM_BRIGHTNESS].Range = BrightnessMembersList[0];
pDevExt->DevPropDefine[ENUM_BRIGHTNESS].Default = BrightnessMembersList[1];
pDevExt->DevProperty[ENUM_BRIGHTNESS].RangeNStep = BrightnessRangeAndStep[0];
pDevExt->DevPropDefine[ENUM_SHARPNESS].Value = SharpnessValues;
pDevExt->DevPropDefine[ENUM_SHARPNESS].Value.MembersList = &pDevExt->DevPropDefine[ENUM_SHARPNESS].Range;
pDevExt->DevPropDefine[ENUM_SHARPNESS].Range = SharpnessMembersList[0];
pDevExt->DevPropDefine[ENUM_SHARPNESS].Default = SharpnessMembersList[1];
pDevExt->DevProperty[ENUM_SHARPNESS].RangeNStep = SharpnessRangeAndStep[0];
pDevExt->DevPropDefine[ENUM_HUE].Value = HueValues;
pDevExt->DevPropDefine[ENUM_HUE].Value.MembersList = &pDevExt->DevPropDefine[ENUM_HUE].Range;
pDevExt->DevPropDefine[ENUM_HUE].Range = HueMembersList[0];
pDevExt->DevPropDefine[ENUM_HUE].Default = HueMembersList[1];
pDevExt->DevProperty[ENUM_HUE].RangeNStep = HueRangeAndStep[0];
pDevExt->DevPropDefine[ENUM_SATURATION].Value = SaturationValues;
pDevExt->DevPropDefine[ENUM_SATURATION].Value.MembersList = &pDevExt->DevPropDefine[ENUM_SATURATION].Range;
pDevExt->DevPropDefine[ENUM_SATURATION].Range = SaturationMembersList[0];
pDevExt->DevPropDefine[ENUM_SATURATION].Default = SaturationMembersList[1];
pDevExt->DevProperty[ENUM_SATURATION].RangeNStep = SaturationRangeAndStep[0];
pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Value = WhiteBalanceValues;
pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Value.MembersList = &pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Range;
pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Range = WhiteBalanceMembersList[0];
pDevExt->DevPropDefine[ENUM_WHITEBALANCE].Default = WhiteBalanceMembersList[1];
pDevExt->DevProperty[ENUM_WHITEBALANCE].RangeNStep = WhiteBalanceRangeAndStep[0];
pDevExt->DevPropDefine[ENUM_FOCUS].Value = FocusValues;
pDevExt->DevPropDefine[ENUM_FOCUS].Value.MembersList = &pDevExt->DevPropDefine[ENUM_FOCUS].Range;
pDevExt->DevPropDefine[ENUM_FOCUS].Range = FocusMembersList[0];
pDevExt->DevPropDefine[ENUM_FOCUS].Default = FocusMembersList[1];
pDevExt->DevProperty[ENUM_FOCUS].RangeNStep = FocusRangeAndStep[0];
pDevExt->DevPropDefine[ENUM_ZOOM].Value = ZoomValues;
pDevExt->DevPropDefine[ENUM_ZOOM].Value.MembersList = &pDevExt->DevPropDefine[ENUM_ZOOM].Range;
pDevExt->DevPropDefine[ENUM_ZOOM].Range = ZoomMembersList[0];
pDevExt->DevPropDefine[ENUM_ZOOM].Default = ZoomMembersList[1];
pDevExt->DevProperty[ENUM_ZOOM].RangeNStep = ZoomRangeAndStep[0];
return STATUS_SUCCESS;
}
BOOL
DCamGetVideoMode(
PDCAM_EXTENSION pDevExt,
PIRB pIrb
)
/*
Query Video format and mode supported by the camera.
*/
{
NTSTATUS Status;
// First check if V_MODE_INQ (Format_0) is supported.
pDevExt->DCamVFormatInq.AsULONG = 0;
Status = DCamReadRegister(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, VFormat), &(pDevExt->DCamVFormatInq.AsULONG));
if(NT_SUCCESS(Status)) {
pDevExt->DCamVFormatInq.AsULONG = bswap(pDevExt->DCamVFormatInq.AsULONG);
if(pDevExt->DCamVFormatInq.VFormat.Format0 == 1) {
DbgMsg1(("\'V_FORMAT_INQ %x; Format:[0]:%d; [1]:%d; [2]:%d; [6]:%d; [7]:%d\n",
pDevExt->DCamVFormatInq.AsULONG,
pDevExt->DCamVFormatInq.VFormat.Format0,
pDevExt->DCamVFormatInq.VFormat.Format1,
pDevExt->DCamVFormatInq.VFormat.Format2,
pDevExt->DCamVFormatInq.VFormat.Format6,
pDevExt->DCamVFormatInq.VFormat.Format7
));
pDevExt->DCamVModeInq0.AsULONG = 0;
Status = DCamReadRegister(pIrb, pDevExt, FIELDOFFSET(CAMERA_REGISTER_MAP, VModeInq[0]), &(pDevExt->DCamVModeInq0.AsULONG));
if(NT_SUCCESS(Status)) {
pDevExt->DCamVModeInq0.AsULONG = bswap(pDevExt->DCamVModeInq0.AsULONG);
DbgMsg1(("\'V_MODE_INQ[0] %x; Mode[]:\n [0](160x120 YUV444):%d\n [1](320x240 YUV422):%d\n [2](640x480 YUV411):%d\n [3](640x480 YUV422):%d\n [4](640x480 RGB24):%d\n [5](640x480 YMono):%d\n",
pDevExt->DCamVModeInq0.AsULONG,
pDevExt->DCamVModeInq0.VMode.Mode0,
pDevExt->DCamVModeInq0.VMode.Mode1,
pDevExt->DCamVModeInq0.VMode.Mode2,
pDevExt->DCamVModeInq0.VMode.Mode3,
pDevExt->DCamVModeInq0.VMode.Mode4,
pDevExt->DCamVModeInq0.VMode.Mode5
));
} else {
ERROR_LOG(("\'Read V_MODE_INQ_0 failed:%x!\n", Status))
}
} else {
ERROR_LOG(("\'V_MODE_INQ Format_0 not supported!\n"))
}
} else {
ERROR_LOG(("\'Read V_MODE_INQ failed:%x!\n", Status));
}
return NT_SUCCESS(Status);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -