Что нового

[Мышь, клавиатура] Реализация работы с общей громкостью в Win XP и Win 7 на примере в Autoit3

pit2103

Новичок
Сообщения
2
Репутация
1
Здравствуйте я новенький на форуме.
Так получилось, что где то неделю назад я первый раз наткнулся на Autoit3 script.
И мне стало интересно, что это за зверь такой, :IL_AutoIt_1: познакомился и как говорится наваял. :laugh:
Выкладываю свою первую работу на все общее обозрение, чтобы понимающие люди посмотрели и указали на ошибки и недочеты в программе, а новички почерпнули из этого для себя, что то новое.
На точку с запитой в конце строк прошу не обращать внимание параллельно изучаю Паскаль, а
Autoit3 script это не как не вредит да и кто муже исключается ошибка при написании комментария.
И так начнем программа "Volume Control" управляет общей громкостью в Windows XP и Windows 7 тестировал на обеих ОС.
1. В программе присутствует перехват сообщений о прокрутке колеса мыши MouseWheelDown ($MOUSE_WHEELDOWN_EVENT) and MouseWheelUp ($MOUSE_WHEELUP_EVENT) за пределами формы.
2. В программе присутствует перехват сообщений о нажатии кнопок мыши MouseLeftDown and MouseLeftUp за пределами формы.
3. Де активация активных окон. :whistle:
4. Удаление программы из панели задач в состоянии @SW_MINIMIZE или как у меня в данном случае @SW_SHOWNOACTIVATE.
5. Установки цвета элемента ProgressBar.
6. Добавление программы в автозагрузку и удаление из автозагрузки.
7. И так далее.....
Если что то не так оформил прошу сразу кирпичами не бросаться, первый раз всетаки . :stars:

Код:
#include <_AudioEndpointVolume.au3>; Windows7, Vista
#include <SoundGetSetQuery.au3>; Windows XP
#include <APISysConstants.au3>;
#include <MouseOnEvent.au3>;
#include <SendMessage.au3>;
#include <StaticConstants.au3>;
#include <TrayConstants.au3>;
#include <WinAPI.au3>;
#include <WinAPISys.au3>;
#include <WindowsConstants.au3>;
#include<ProgressConstants.au3>;
#include <StaticConstants.au3>;
#include <WinAPI.au3>;
#NoTrayIcon
;-------------------------------------------
;Options

Opt("TrayMenuMode", 1);
Opt("TrayOnEventMode", 1);
Opt("GUIOnEventMode", 1);
;-------------------------------------------
;$Variables

$LeftMouse_ButtonClick = False;
$RightMouse_ButtonClick = False;
Global $Volume = 0, $MouseBottomPosition = @DesktopHeight - 31; 737
Global $MyForm1_Visible = False;
Global $WheelDelta, $Timer = 0, $RegKey_Delete_In_Autorun, $RegKey_Add_In_Autorun;
Global $hParent, $hForm, $hIcon;
;-------------------------------------------
;Create Form and Components

$hParent = GUICreate('', 0, 0, 0, 0, 0, $WS_EX_TOOLWINDOW);
$Form1 = GUICreate("", 119, 16, @DesktopWidth - 138, @DesktopHeight - 52, ($WS_POPUP), $WS_EX_DLGMODALFRAME, $hParent);
$ProgressBar = GUICtrlCreateProgress(22, 0, 100, 20, $PBS_SMOOTH);
$Label1 = GUICtrlCreateLabel("00", 1, 0, 16, 16, $SS_CENTER);
$Menu_About = TrayCreateItem("О программе");
$MenuAdd_Program_To_Autorun = TrayCreateItem("Добавить в автозагрузку");
$MenuDelete_Program_From_Autorun = TrayCreateItem("Удалить из автозагрузки");
$Menu_Exit = TrayCreateItem("Закрыть");
TrayItemSetOnEvent($Menu_About, "_Menu_About_Click");
TrayItemSetOnEvent($MenuAdd_Program_To_Autorun, "_Add_Program_To_Autorun_Click");
TrayItemSetOnEvent($MenuDelete_Program_From_Autorun, "_Delete_Program_From_Autorun_Click");
TrayItemSetOnEvent($Menu_Exit, "_Menu_Exit_Click");
TraySetIcon("C:\Program Files\AutoIt3\Script\TrayMenu2\ICO\15.ico", -1);
;--------------------------------------------
;SetColor Form and Components

GUISetBkColor(0xB70606); Form1 Color
GUICtrlSetFont($Label1, 9, 800, 0, "Arial");
GUICtrlSetColor($Label1, 0xFFFFFF);
;--------------------------------------------
TraySetState();
TraySetClick(16);
;--------------------------------------------
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_MOUSEWHEEL_EVENT");
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_MOUSEWHEEL_EVENT");
_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "_LeftMouse_Button_Click");
$hIcon = _WinAPI_GetClassLongEx($hForm, $GCL_HICON);
_WinAPI_DestroyIcon($hIcon);
_WinAPI_SetClassLongEx($hForm, $GCL_HICON, 0);
_WinAPI_SetClassLongEx($hForm, $GCL_HICONSM, 0);

If (@OSVersion = 'WIN_7') Then
	_SendMessage(GUICtrlGetHandle($ProgressBar), $PBM_SETSTATE, 2);
EndIf;
If (@OSVersion = 'WIN_XP') Then
	DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($ProgressBar), "wstr", 0, "wstr", 0);
	GUICtrlSetColor($ProgressBar, 0xB70606);
EndIf;

While 1

	$MousePos = MouseGetPos();

	If ($MousePos[1] >= $MouseBottomPosition) Then
		If (@OSVersion = 'WIN_7') Then
			$Volume = _GetMasterVolumeLevelScalar();
		EndIf;
		If (@OSVersion = 'WIN_XP') Then
			$Volume = _SoundGetMasterVolume();
		EndIf;
		GUICtrlSetData($ProgressBar, $Volume);
		$TrayMsg = TrayGetMsg();
		$Timer = $Timer + 1;
	EndIf;

	If ($Timer >= 10) And ($WheelDelta = 0) Then
		GUISetState(@SW_HIDE, $Form1);
		$MyForm1_Visible = False;
		$Timer = 0;
		$WheelDelta = 0;
	EndIf;

	_Volume_Control();
	$WheelDelta = 0;
	Sleep(100);
;~ 	ToolTip("");
WEnd;

Func _Volume_Control();
	If ($MousePos[1] >= $MouseBottomPosition) And ($WheelDelta <> 0) And ($MyForm1_Visible = False) Then
		$ClassNameNN = ControlGetFocus("[active]");
		If ($ClassNameNN <> '') Then
			If ($LeftMouse_ButtonClick = False) Then
				WinActivate('Program Manager', 'FolderView');
			EndIf;
		EndIf;

		GUISetState(@SW_SHOWNOACTIVATE, $Form1);
		WinSetOnTop($Form1, '', 1);
		$WheelDelta = 0;
		$MyForm1_Visible = True;
		$LeftMouse_ButtonClick = False
		_WinAPI_MessageBeep(5)

	EndIf;
	If ($MousePos[1] < $MouseBottomPosition) And ($MyForm1_Visible = True) Then
		GUISetState(@SW_HIDE, $Form1);
		$WheelDelta = 0;
		$MyForm1_Visible = False;
		$LeftMouse_ButtonClick = False;
	EndIf;
EndFunc   ;==>_Volume_Control

Func _MOUSEWHEEL_EVENT($iEvent);
	If ($MousePos[1] >= $MouseBottomPosition) Then
		$WheelDelta = $iEvent;
		$Timer = 0;

		If ($iEvent >= 538) And ($Volume < 102) Then
			If (@OSVersion = 'WIN_7') Then
				$Volume = Round($Volume + 1);
				_SetMasterVolumeLevelScalar($Volume + 1);
				GUICtrlSetData($ProgressBar, $Volume);
				GUICtrlSetData($Label1, GUICtrlRead($ProgressBar));
				;ToolTip($Volume);
			EndIf;
			If (@OSVersion = 'WIN_XP') Then
				$Volume = Round($Volume + 3);
				_SoundSetMasterVolume($Volume + 1);
				GUICtrlSetData($ProgressBar, $Volume);
				GUICtrlSetData($Label1, GUICtrlRead($ProgressBar));
				;ToolTip($Volume);
			EndIf;
		EndIf;
		If ($iEvent <= 530) And ($Volume <> -2) Then
			If (@OSVersion = 'WIN_7') Then
				$Volume = Round($Volume - 1);
				_SetMasterVolumeLevelScalar($Volume - 1);
				GUICtrlSetData($ProgressBar, $Volume);
				GUICtrlSetData($Label1, GUICtrlRead($ProgressBar));
				;ToolTip($Volume);
			EndIf;
			If (@OSVersion = 'WIN_XP') Then
				$Volume = Round($Volume - 3);
				_SoundSetMasterVolume($Volume - 1);
				GUICtrlSetData($ProgressBar, $Volume);
				GUICtrlSetData($Label1, GUICtrlRead($ProgressBar));
				;ToolTip($Volume);
			EndIf;
		EndIf;
	EndIf;
EndFunc   ;==>_MOUSEWHEEL_EVENT

Func _LeftMouse_Button_Click();
	If ($MousePos[1] >= $MouseBottomPosition) Then
		GUISetState(@SW_HIDE, $Form1);
		$LeftMouse_ButtonClick = True;
	EndIf;
EndFunc   ;==>_LeftMouse_Button_Click

Func _Menu_About_Click();
	If (TrayItemSetState($Menu_About, $TRAY_CHECKED) = True) Then
		TrayItemSetState($Menu_About, $TRAY_UNCHECKED);
		_WinAPI_MessageBeep(4);
		MsgBox(4096, "О программе:", 'Volume Control:' & @LF & _
				'Для регулировки звука, переместите мышь на панель' & _
				' упровления и поверните колесо мыши.' & @LF & _
				'Автор: Корниенко П.П. ' & @LF & _
				' 2014г.');
	EndIf;
EndFunc   ;==>_Menu_About_Click

Func _Add_Program_To_Autorun_Click();
	$RegKey_Add_In_Autorun = RegRead('HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run', 'VolumeControl');
	If (TrayItemSetState($MenuAdd_Program_To_Autorun, $TRAY_CHECKED) = True) Then
		TrayItemSetState($MenuAdd_Program_To_Autorun, $TRAY_UNCHECKED);
	EndIf;
	If ($RegKey_Add_In_Autorun = '') Then
		RegWrite('HKEY_CURRENT_USER\Software\microsoft\windows\currentversion\run', "VolumeControl", "REG_SZ", @ScriptFullPath);
		MsgBox(64, 'Volume Control', 'Программа добавлена в автозагрузку ' & @ScriptFullPath);
	EndIf;
EndFunc   ;==>_Add_Program_To_Autorun_Click

Func _Delete_Program_From_Autorun_Click();
	$RegKey_Delete_In_Autorun = RegRead('HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run', 'VolumeControl');
	If (TrayItemSetState($MenuDelete_Program_From_Autorun, $TRAY_CHECKED) = True) Then
		TrayItemSetState($MenuDelete_Program_From_Autorun, $TRAY_UNCHECKED);
	EndIf;
	If ($RegKey_Delete_In_Autorun <> '') Then
		RegDelete('HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run', 'VolumeControl');
		MsgBox(64, 'Volume Control', 'Программа удалена из автозагрузки');
	EndIf;
EndFunc   ;==>_Delete_Program_From_Autorun_Click

Func _Menu_Exit_Click();
	Exit;
EndFunc   ;==>_Menu_Exit_Click
 

erlik

Продвинутый
Сообщения
317
Репутация
84
pit2103
Кирпичами бросаться не буду, просто впредь желательно указывать версию AutoiIT на котором скрипт написан. У тебя в профиле стоит 3.3.8.1, но скрипт явно на 3.3.9.x-3.3.10.x.
Это я к тому, что здесь не все пользуются последними версиями AutoIt (по известным причинам) и твой скрипт не у каждого запустится.
 
Верх