Changeset 46896 in vbox for trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
- Timestamp:
- Jul 2, 2013 8:16:43 AM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 86884
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
r46895 r46896 76 76 GET_VIDEO_ACCEL, 77 77 SET_VIDEO_ACCEL, 78 VIDEO_FLAGS, 78 79 LIST_CUST_MODES, 79 80 ADD_CUST_MODE, … … 113 114 if (eWhich == SET_VIDEO_ACCEL || eWhich == USAGE_ALL) 114 115 doUsage("<on|off>", g_pszProgName, "setvideoacceleration"); 116 if (eWhich == VIDEO_FLAGS || eWhich == USAGE_ALL) 117 doUsage("<get|set|clear|delete> [hex mask]", g_pszProgName, "videoflags"); 115 118 if (eWhich == LIST_CUST_MODES || eWhich == USAGE_ALL) 116 119 doUsage("", g_pszProgName, "listcustommodes"); … … 779 782 } 780 783 return RTEXITCODE_SUCCESS; 784 } 785 786 static RTEXITCODE videoFlagsGet(void) 787 { 788 HKEY hkeyVideo = getVideoKey(false); 789 790 if (hkeyVideo) 791 { 792 DWORD dwFlags = 0; 793 DWORD len = sizeof(dwFlags); 794 DWORD dwKeyType; 795 ULONG status = RegQueryValueExA(hkeyVideo, "VBoxVideoFlags", NULL, &dwKeyType, (LPBYTE)&dwFlags, &len); 796 if (status != ERROR_SUCCESS) 797 RTPrintf("Video flags: default\n"); 798 else 799 RTPrintf("Video flags: 0x%08X\n", dwFlags); 800 RegCloseKey(hkeyVideo); 801 return RTEXITCODE_SUCCESS; 802 } 803 804 return RTEXITCODE_FAILURE; 805 } 806 807 static RTEXITCODE videoFlagsDelete(void) 808 { 809 HKEY hkeyVideo = getVideoKey(true); 810 811 if (hkeyVideo) 812 { 813 ULONG status = RegDeleteValueA(hkeyVideo, "VBoxVideoFlags"); 814 if (status != ERROR_SUCCESS) 815 VBoxControlError("Error %d deleting video flags.\n", status); 816 RegCloseKey(hkeyVideo); 817 return RTEXITCODE_SUCCESS; 818 } 819 820 return RTEXITCODE_FAILURE; 821 } 822 823 static RTEXITCODE videoFlagsModify(bool fSet, int argc, char *argv[]) 824 { 825 if (argc != 1) 826 { 827 VBoxControlError("Mask required.\n"); 828 return RTEXITCODE_FAILURE; 829 } 830 831 uint32_t u32Mask = 0; 832 int rc = RTStrToUInt32Full(argv[0], 16, &u32Mask); 833 if (RT_FAILURE(rc)) 834 { 835 VBoxControlError("Invalid video flags mask.\n"); 836 return RTEXITCODE_FAILURE; 837 } 838 839 RTEXITCODE exitCode = RTEXITCODE_SUCCESS; 840 841 HKEY hkeyVideo = getVideoKey(true); 842 if (hkeyVideo) 843 { 844 DWORD dwFlags = 0; 845 DWORD len = sizeof(dwFlags); 846 DWORD dwKeyType; 847 ULONG status = RegQueryValueExA(hkeyVideo, "VBoxVideoFlags", NULL, &dwKeyType, (LPBYTE)&dwFlags, &len); 848 if (status != ERROR_SUCCESS) 849 { 850 dwFlags = 0; 851 } 852 853 dwFlags = fSet? (dwFlags | u32Mask): 854 (dwFlags & ~u32Mask); 855 856 status = RegSetValueExA(hkeyVideo, "VBoxVideoFlags", 0, REG_DWORD, (LPBYTE)&dwFlags, sizeof(dwFlags)); 857 if (status != ERROR_SUCCESS) 858 { 859 VBoxControlError("Error %d writing video flags.\n", status); 860 exitCode = RTEXITCODE_FAILURE; 861 } 862 863 RegCloseKey(hkeyVideo); 864 } 865 else 866 { 867 exitCode = RTEXITCODE_FAILURE; 868 } 869 870 return exitCode; 871 } 872 873 static RTEXITCODE handleVideoFlags(int argc, char *argv[]) 874 { 875 /* Must have a keyword and optional value (32 bit hex string). */ 876 if (argc != 1 && argc != 2) 877 { 878 VBoxControlError("Invalid number of arguments.\n"); 879 usage(VIDEO_FLAGS); 880 return RTEXITCODE_FAILURE; 881 } 882 883 RTEXITCODE exitCode = RTEXITCODE_SUCCESS; 884 885 if (RTStrICmp(argv[0], "get") == 0) 886 { 887 exitCode = videoFlagsGet(); 888 } 889 else if (RTStrICmp(argv[0], "delete") == 0) 890 { 891 exitCode = videoFlagsDelete(); 892 } 893 else if (RTStrICmp(argv[0], "set") == 0) 894 { 895 exitCode = videoFlagsModify(true, argc - 1, &argv[1]); 896 } 897 else if (RTStrICmp(argv[0], "clear") == 0) 898 { 899 exitCode = videoFlagsModify(false, argc - 1, &argv[1]); 900 } 901 else 902 { 903 VBoxControlError("Invalid command.\n"); 904 exitCode = RTEXITCODE_FAILURE; 905 } 906 907 if (exitCode != RTEXITCODE_SUCCESS) 908 { 909 usage(VIDEO_FLAGS); 910 } 911 912 return exitCode; 781 913 } 782 914 … … 1663 1795 { "getvideoacceleration", handleGetVideoAcceleration }, 1664 1796 { "setvideoacceleration", handleSetVideoAcceleration }, 1797 { "videoflags", handleVideoFlags }, 1665 1798 { "listcustommodes", handleListCustomModes }, 1666 1799 { "addcustommode", handleAddCustomMode },
Note:
See TracChangeset
for help on using the changeset viewer.