Что нового

[Мышь, клавиатура] Сколько раз нажата Ф5

StarEdik

Новичок
Сообщения
365
Репутация
4
Версия AutoIt: 3.3.6.1

Описание:
Привет всем.Некая программа запускается с помошью клав Ф5.Надо подсчитать сколько раз была нажата эта горячая клавиша.Нужен пример скрипта который на системном трее показывал это количества,который при каждой нажатии увеличивается на раз.


Примечания:
чтоб на трее вместо иконки автоита показывался количество нажатий
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
StarEdik [?]
чтоб на трее вместо иконки автоита показывался количество нажатий
Без иконки
Код:
#include <Misc.au3>

HotKeySet('{Esc}', '_Exit')
$iCount = 0
$iCountOld = 0
While 1
	If _IsPressed(74) Then
		While _IsPressed(74)
			Sleep(10)
		WEnd
		$iCount += 1
	EndIf
	Sleep(10)
	If $iCountOld <> $iCount Then
		$iCountOld = $iCount
		TrayTip('Контроль F5', 'F5 - количество нажатий: ' & $iCountOld, 5, 17)
	EndIf
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
С иконкой возиться лениво :smile:
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
madmasles
Жаль но у меня ничего не получается.Спомошью Ф5 в редакторе VS vb6 запускается прожект на исполнения (Run -> Start - F5)
Запустил ваш скрипт потом в редакторе нажал Ф5 прога запустилась но в трее нет информации.И так несколько раз.Может я что та не так делаю.
Точно так RAM Saver Pro в трее показывает свободную память
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Это подойдёт ?:
Код:
#NoTrayIcon
#include <Misc.au3>

HotKeySet('{F5}', '_GetF5')
HotKeySet('{ESC}', '_Exit')

Opt("TrayMenuMode",1)	

Global $var = 0

TraySetIcon('shell32.dll', 44)
TraySetState()

While 1
WEnd

Func _GetF5()
	$var = $var + 1
	TrayTip('', 'F5 нажата ' & $var & ' раз(а)', 1000)
EndFunc

Func _Exit()
	Exit
EndFunc
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Zaramot
В Вашем коде, если задержать на время нажатие кнопки (F5), то счетчик будет увеличиваться c неимоверной скоростью
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Zaramot
В Вашем коде, если задержать на время нажатие кнопки (F5), то счетчик будет увеличиваться c неимоверной скоростью

А так ?:
Код:
#NoTrayIcon
#include <Misc.au3>

HotKeySet('{ESC}', '_Exit')

Opt("TrayMenuMode",1)

Global $var = 0

TraySetIcon('shell32.dll', 44)
TraySetState()

While 1
	If _IsPressed('74') Then
		Do
		Until not _IsPressed('74')
		$var = $var + 1
		TrayTip('', 'F5 нажата ' & $var & ' раз(а)', 1)
	EndIf
WEnd

Func _Exit()
    Exit
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Код:
#include <Misc.au3>

$var = 0

Do
	If _IsPressed('74') Then ;F5 key
		Do
		Until not _IsPressed('74') ;F5 key
		$var = $var + 1
		TrayTip('', 'F5 нажата ' & $var & ' раз(а)', 1)
	EndIf
Until _IsPressed('1B') ;ESC key
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <FontConstants.au3>
#Include <HotKey.au3>
#Include <vkConstants.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)

Global $hAutoIt = WinGetHandle(AutoItWinGetTitle())
Global $Count = 0, $hPrev = 0

_SetAutoItIcon(0)
_HotKeyAssign($VK_F5, '_Increment', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_NOBLOCKHOTKEY))

While 1
	Sleep(1000)
WEnd

Func _Increment()
	$Count += 1
	If $Count > 99 Then
		$Count = 0
	EndIF
	_SetAutoItIcon($Count)
EndFunc   ;==>_Increment

Func _SetAutoItIcon($iCount)
	
	Local $hDC, $hBitmap, $hMask, $hIcon, $hFont, $tNID, $tRect
	
	$hDC = _WinAPI_CreateCompatibleDC(0)
	$hBitmap = _WinAPI_CreateSolidBitmap(0, 0xFFFFFF, 16, 16)
	$hMask = _WinAPI_CreateBitmap(16, 16, 1, 1)
	$hFont = _WinAPI_CreateFont(16, 0, 0, 0, $FW_NORMAL, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Tahoma')
	$tRect = _WinAPI_CreateRectEx(0, 0, 16, 16)
	_WinAPI_SelectObject($hDC, $hBitmap)
	_WinAPI_SelectObject($hDC, $hFont)
	_WinAPI_DrawText($hDC, $iCount, $tRect, BitOR($DT_CENTER, $DT_SINGLELINE, $DT_VCENTER))
	_WinAPI_DeleteDC($hDC)
	$hIcon = _WinAPI_CreateIconIndirect($hBitmap, $hMask)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteObject($hMask)
	_WinAPI_DeleteObject($hFont)
	$tNID = DllStructCreate($tagNOTIFYICONDATA)
	DllStructSetData($tNID, 'Size', DllStructGetSize($tNID))
	DllStructSetData($tNID, 'hWnd', $hAutoIt)
	DllStructSetData($tNID, 'Flags', $NIF_ICON)
	DllStructSetData($tNID, 'ID', 1)
	DllStructSetData($tNID, 'hIcon', $hIcon)
	_WinAPI_ShellNotifyIcon($NIM_MODIFY, $tNID)
	If $hPrev Then
		_WinAPI_DestroyIcon($hPrev)
	EndIf
	$hPrev = $hIcon
EndFunc   ;==>_SetAutoItIcon


HotKey.au3
vkConstants.au3
WinAPIEx.au3


Добавлено:
Сообщение автоматически объединено:

Если нужно регистрировать нажатия только для конкретного приложения (окна), то это можно указать при вызове функции _HotKeyAssign() в четвертом параметре.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Yashied,
Как всегда, супер. :thumbs_up:
Скажите, можно так добавить изменения цвета шрифта и подложки? У меня на XP работает.
Код:
#include <FontConstants.au3>
#include <HotKey.au3>
#include <vkConstants.au3>
#include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)

Global $hAutoIt = WinGetHandle(AutoItWinGetTitle())
Global $Count = 0, $hPrev = 0
HotKeySet('{Esc}', '_Exit')
_SetAutoItIcon($Count, 0xFF0000, 0xFFD700)
;_HotKeyAssign($VK_F5, '_Increment', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_NOBLOCKHOTKEY))

While 1
	Sleep(100)
	_Increment()
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _Increment()
	$Count += 1
	If $Count > 999 Then
		$Count = 0
	EndIf
	_SetAutoItIcon($Count, 0xFF0000, 0xFFD700)
EndFunc   ;==>_Increment

Func _SetAutoItIcon($iCount, $iColor = 0x000000, $iBkColor = 0xFFFFFF)
	Local $hDC, $hBitmap, $hMask, $hIcon, $hFont, $tNID, $tRect

	$hDC = _WinAPI_CreateCompatibleDC(0)
	$hBitmap = _WinAPI_CreateSolidBitmap(0, $iBkColor, 16, 16)
	$hMask = _WinAPI_CreateBitmap(16, 16, 1, 1)
	$hFont = _WinAPI_CreateFont(18, 4, 0, 0, $FW_NORMAL, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Tahoma')
	$tRect = _WinAPI_CreateRectEx(1, 0, 15, 16)
	_WinAPI_SelectObject($hDC, $hBitmap)
	_WinAPI_SelectObject($hDC, $hFont)
	_WinAPI_SetTextColor($hDC, $iColor)
	_WinAPI_SetBkColor($hDC, _WinAPI_SwitchColor($iBkColor))
	_WinAPI_DrawText($hDC, $iCount, $tRect, BitOR($DT_CENTER, $DT_SINGLELINE, $DT_VCENTER))
	_WinAPI_DeleteDC($hDC)
	$hIcon = _WinAPI_CreateIconIndirect($hBitmap, $hMask)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteObject($hMask)
	_WinAPI_DeleteObject($hFont)
	$tNID = DllStructCreate($tagNOTIFYICONDATA)
	DllStructSetData($tNID, 'Size', DllStructGetSize($tNID))
	DllStructSetData($tNID, 'hWnd', $hAutoIt)
	DllStructSetData($tNID, 'Flags', $NIF_ICON)
	DllStructSetData($tNID, 'ID', 1)
	DllStructSetData($tNID, 'hIcon', $hIcon)
	_WinAPI_ShellNotifyIcon($NIM_MODIFY, $tNID)
	If $hPrev Then
		_WinAPI_DestroyIcon($hPrev)
	EndIf
	$hPrev = $hIcon
EndFunc   ;==>_SetAutoItIcon
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Yashied,
Спасибо. :thanks:
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Огромное спасибо Yashied
madmasles
Zaramot
VladUs
:-[Спаибо всем .Вы просто гении :thumbs_up:
Код:
_HotKeyAssign($VK_F5, '_Increment', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_NOBLOCKHOTKEY))

While 1
    Sleep(100)
   ; _Increment()
WEnd

Все ОК.
 
Верх