W dniu 2012-11-27 19:31, Przemysław Ryk pisze:
> Dnia Sun, 25 Nov 2012 14:52:04 +0100, Radosław Sokół napisał(a):
>
>> W dniu 24.11.2012 19:21, Przemysław Ryk pisze:
>>> okazji” wpierdaczonych dodatków, to się zgodzę. Przypuchnięcie rejestru o
>>> kilkadziesiąt kilobajtów - nawet przy stosunkowo małym pojemnościowo SSD -
>>
>> O ile to jest kilkadziesiąt kilobajtów, a nie idzie w setki już.
>
> Prawdę mówiąc to nie chciało mi się nigdy jakoś specjalnie sprawdzać, ile
> wpisów do rejestru (w KB) dorzucają różne aplikacje. Podejrzewam, że kobyły
> typu pakietów Adobe czy choćby Office „trochę” tego naładują. Ciekaw jestem,
> jaka jest pi razy oko proporcja w porównaniu z rzeczami typu Picasa,
> Notepad++ itp. I jak na tym tle wypada np. LibreOffice. :D
>
To dość prosto sprawdzić, efekt (nie wszystko mam):
MS Office: ok 260KB
Notepad++: ok 690KB (tu zdziwko)
Libre Office: ok 387KB
Pomijam klucze MRU (nie filtrowałem), i że zapewne Notepad++ może być
podwojony (jest u mnie w dwóch miejscach)
Różnią się natomiast ilościami kluczy (gałęzi/podgałęzi).
MS Office ma ich najwięcej ze względu na ilość formatów plików i interfejsów
(np. baz). Na pewno rozbija też coś po gałęziach systemowych.
>>> takiego cholerstwa się wpierniczy od metra i z tych kilkuset kilobajtów robi
>>> się ładnych parę megabajtów. Niemniej jednak - to dalej jest jednak tylko
>>> kilka megabajtów.
>>
>> Razy kilkadziesiąt zainstalowanych i odinstalowanych programów...
>
> No tak. Znowu jakoś podświadomie założyłem „swoich” użytkowników - wypytani
> co ma być / do czego ma służyć komputer, dostają zestaw skonfigurowany i
> ewentualnie są co najwyżej podmiany z XnView, czy AIMPa (którego ja bardzo
> lubię i wręcz „z automatu” instaluję) na np. FastStone Image Viewer i
> Winampa. :)
>
>>> Czyli potwierdza się teza, że nieużywane wpisy pomimo tego, że są w
>>> rejestrze i są jakimś śmietnikiem, to jednak zasadniczego wpływu na szybkość
>>> dostępu do potrzebnych wpisów nie mają?
>>
>> Mają.
>>
>> Po pierwsze, zwiększają fragmentację wewnętrzną rejestru.
>
> Ale to jednak można załatwić jednym przepuszczeniem przez soft do
> defragmentacji rejestru? Inną kwestią jest, że jak ktoś raz w miesiącu
> trzepie fafdziesiąt programików z trzech płyt dołączonych do Komputer Świata
> / CHIPa / jeszcze cholera wie czegoś (przejaskrawiam?), to problem na pewno
> narośnie szybciej i mocniej.
>
>> Po drugie, jeżeli wepchną się między inne wpisy (co jest bar-
>> dzo prawdopodobne z uwagi na powyższe), to zwiększają ilość
>> RAM używaną w odwzorowaniu.
>>
>> Pomyśl sobie o stu wpisach po 1 KiB każdy, dla uproszczenia.
>> Jeżeli wszystkie są potrzebne, ich odwzorowanie zajmuje 25
>> ramek pamięci. A teraz wepchnij między każde dwa używane wpi-
>> sy jeden nieużywany i nagle potrzebujesz 50 ramek pamięci.
>
> Chwytam.
A ja nie bardzo, bo wygląda na to, że rejestr nie jest odczytywany tak jak
jest tworzony, lecz w całości pchany na głupa do pamięci. Zresztą nie jest
trzymany w całości w pamięci. A defragmentyzacja i tak istnieje (nawet
wewnętrzna), inaczej jedna zmiana wartości prowadziła by do przepisania
całej jego zawartości od nowa. Co się nie dzieje, a jeśli nawet brak miejsca
w ciągłym obszarze dysku zmiany zapisane będą gdzieś indziej (to
defragmentyzacja dysku), samego rejestru jest realizowana w podobny sposób,
ale w ramach rejestru (jako nośnika danych).
Dla przykładu taka bazka: SQLite, posługuje się typem danych TEXT
(podstawowy dla niej typ). Czy zatem zapisując do pola 5 znaków, następnie
po pół roku używania (INSERT/UPDATE/DELETE) na innych jej częściach
dopisując do tego samego pola 10 znaków, odczytanych zostanie więcej niż 15?
A.. bo może chodzi o te niby puste miejsca jakie powstają po usunięciu
wpisów z wewnętrznej struktury rejestru? To też nie są w żaden sposób
odwzorowywane w pamięci.
>
>>> konkretniej chwycono by za przysłowioną twarz. Rozpuściło się to towarzystwo
>>> w czasach Windows 2000/XP, gdzie chyba większość ludzi pracowała na koncie
>>
>> Bardziej jeszcze w Windows 95/98, gdzie w ogóle nie było
>> czegoś takiego jak koncepcja kont użytkowników (poza profi-
>> lami, które prawie nic nie dawały). Wtedy wręcz wygodnie
>> było wiele rzeczy zapisywać sobie w HKEY_LOCAL_MACHINE...
>
> Niemniej jednak z korzystaniem z programów pisanych dla Windows 95/98 to
> obecnie (piszę z myślą o Viście czy Windows 7, szczególnie w odmianach x64)
> jest chyba dużo więcej problemów, niż sam fakt niemożności pisania po
> rejestrze?
>
>> Problem w tym, że kiedyś były reguły, których należało prze-
>> strzegać, ale w razie absolutnej konieczności można było te
>> reguły naginać lub łamać, by osiągnąć jakiś specjalny rezul-
>> tat. Niestety, programiści łamali je bez potrzeby, sensu i
>> ze stratą dla użytkownika. Obecnie panuje zatem "zamordyzm",
>> co powoduje problemy w drugą stronę -- *nie da się* pewnych
>> ciekawych rzeczy zrobić, bo dokumenty zaczynają być separo-
>> wane od siebie, aplikacje nie mogą wpływać na siebie (żeg-
>> naj automatyzacjo, rejestracjo sekwencji działań, modyfika-
>> cjo okien uruchomionych programów!), foldery systemowe są
>> zabezpieczane nawet przed administratorem systemu...
>
> Modyfikacje okien programów - no tutaj, to chyba jednak autorzy mają dość
> wolną rękę. Jak patrzę na interfejsy choćby (przykładowo rzucam) AVG2012,
> Adobe CS5.5 / CS6, to jednak programiści swoich własnych kontrolek okien
> używają. Przyznam szczerze, że momentami przez ten fakt krew mnie zalewa
> dosłownie i w przenośni. Najbardziej chyba charakterystycznym przykładem
> (ostatnio - przynajmniej dla mnie) jest okno konfiguracji kont w FileZilla
> FTP Server - powiększyć okna nie sposób, a spróbuj jednocześnie zobaczyć
> jaki katalog źródłowy mapujesz pod jaki katalog dla danego konta (chcesz, to
> Ci screena poglądowego wystawię)…
>
> Separacja dokumentów od siebie - rozwiń proszę, co masz na myśli, bo nie
> chcę polemizować z czymś co np. błędnie zrozumiałem. :)
>
> Rejestracja działań - przyznam się, że jak korzystam z automatyzacji, to
> raczej w obrębie jednego narzędzia. Po głowiem mi się jednak kojarzy, że
> taki http://www.autoitscript.com/site/autoit/ chyba ma się dobrze i
> możliwości niegłupie ma (nie korzystałem - zasłyszane opinie). Czyli jak to
> w końcu jest? :)
AutoIt'a polecam, dla samego sprawdzenia możliwości, wkurza mnie tylko
składnia Basic'owa, ale że średnikiem można rozpocząć komentarz (to i na
końcu wyrażenia o ile się pomylę może zostać) przykładowo (mam nadzieję, że
mnie nie wyzwą :), działający skrypt, opis na początku), ustawia obsługę
HotKeys:
#cs
2012.03 (c) Artur M. version 0.1
GHotKeys
Set Global HotKeys
Definicja klawiszy pobierana jest z pliku .ini. Defaultowo o takiej nazwie
jak nazwa skryptu, musi on znajdować się w katalogu skryptu.
Jako parametr można podać dowolny inny plik .ini zawierający definicje,
w tym przypadku może on znajdować sie na dowolnej ścieżce i musi on istnieć.
Definiowanie klawiszy w pliku .ini jest zgodne z formatem podawanym
do polecenia Send() w AutoIt3. W trybie debugowania te definicje są
prymitywnie (tylko Win, Alt, Ctrl, Shift) dekodowane do czytelnej postaci
dla celów podglądu.
Skrypt powstał z potrzeby rozjaśniania gier uruchamianych na kartach
graficznych innych niż ATI, z uwagi na brak możliwości użycia ATI Tray Tools
dla innych kart niż ATI. Chodziło o to by taką operację można było wykonać
już z poziomu uruchomionej gry. Może on jednak słuzyc także do innych
celów (zrzuty ekranu, zmiana częstotliwości CPU, ...)
Po uruchomieniu w Tray'u znajduje się ikona skryptu, można tu wybrać
wyjście lub przestawić działanie skryptu w tryb debugowania. W trybie
debugowania polecenia nie są wykonywane po wybraniu klawiszy skrótu, pojawia
się w tym przypadku tylko okienko informacyjne.
Zaraz po uruchomieniu debugowania pokazuje sie okno z definicjami
odczytanymi z pliku .ini, brak definicji wskazuje na problem z ich odczytem
z pliku .ini.
W pliku .ini linie puste są pomijane, jak również linie, w których pierwszym
znakiem jest średnik. Linia definicji zawiera definicję klawisza skrótu,
opis
co robi określony skrót oraz polecenie jakie ma zostać wywołane po
wciśnieciu
tego skrótu. Definicje w linni rozdzielone są znakiem "|".
Przykładowa zawartość pliku .ini:
;
; Global HotKeys
;
; Gamma 1.0
+^1|Ustaw Gamma na 1.0|D:\LangTut\AutoIt\_Gamma\AdjustMonitor.exe /g:1.0
!ToDo!
[Zrobione]
Plik .ini rozszerzyć do 3 elementów w linii definicji, dodać opis
HotKey'a.
Zmienić rozdzielnik w pliku .ini z ; na |
#ce
#include <Misc.au3>
#include <Array.au3>
#include <Constants.au3>
AutoItSetOption( "MustDeclareVars", 1 )
Local $arrKeys[1] ; Array for HotKeys
Local $arrInfo[1] ; Array for Info About Hotkey
Local $arrExec[1] ; Array for Exec Command
Local $hndDebug ; Handle to Debug State (Tray)
Local $hndAbout ; Handle to About State (Tray)
;
; About()
; =============================================================================
; Dislay help info (struct .ini file)
;
Func About()
MsgBox( 64, "About", _
"[" & @ScriptName & "] Set global hotkeys 1.0 (c) artiun
2012.03" & @CRLF & @CRLF & _
"If debug option is checked hotkey is reserved, " & _
"but command don't be execute." & @Tab & @CRLF & _
"Only message be show when hotkey be pressed." & @CRLF )
TrayItemSetState( $hndAbout, $TRAY_UNCHECKED )
EndFunc
;
; Function: HotKeyDecode()
; =============================================================================
; Decode symbolic HotKey string (primitive)
;
Func HotKeyDecode( $strHotKey )
Local $strHKDecode = ""
For $ind = 1 To StringLen( $strHotKey )
Local $chrKey = StringMid( $strHotKey, $ind, 1 )
Switch $chrKey
Case "#" ;Win
$strHKDecode &= "Win"
If $ind < StringLen( $strHotKey ) Then $strHKDecode &= "+"
Case "!" ;Alt
$strHKDecode &= "Alt"
If $ind < StringLen( $strHotKey ) Then $strHKDecode &= "+"
Case "^" ;Ctrl
$strHKDecode &= "Ctrl"
If $ind < StringLen( $strHotKey ) Then $strHKDecode &= "+"
Case "+" ;Shift
$strHKDecode &= "Shift"
If $ind < StringLen( $strHotKey ) Then $strHKDecode &= "+"
Case Else
$strHKDecode &= $chrKey
EndSwitch
Next
Return $strHKDecode
EndFunc
;
; Function: Debug()
; =============================================================================
; Display debug info (valid definitions from file)
;
Func Debug()
If TrayItemGetState( $hndDebug ) = $TRAY_CHECKED + $TRAY_ENABLE Then
Local $arrDebug[ 1 ][ 3 ]
For $ind = 0 To UBound( $arrKeys ) - 1
If $ind > 0 Then
ReDim $arrDebug[ $ind + 1 ][ 3 ]
EndIf
$arrDebug[ $ind ][ 0 ] = HotKeyDecode( $arrKeys[ $ind ] )
$arrDebug[ $ind ][ 1 ] = $arrInfo[ $ind ]
$arrDebug[ $ind ][ 2 ] = $arrExec[ $ind ]
Next
_ArrayDisplay( $arrDebug, "HotKeys and Commands from ini", -1, 0, "",
"|", _
"Index|HotKey|Description|Command to execute" )
EndIf
EndFunc
;
; Function: ExecHotKey()
; =============================================================================
;
Func ExecHotKey()
Local $intKey = -1
Local $strInfo = ""
;
; Get current HotKey pressed
;
For $ind = 0 To UBound( $arrKeys ) - 1
If $arrKeys[ $ind ] = @HotKeyPressed Then
$intKey = $ind
ExitLoop
EndIf
Next
If $intKey >= 0 Then
If TrayItemGetState( $hndDebug ) = $TRAY_CHECKED + $TRAY_ENABLE Then
MsgBox( 4096, "HotKey", _
"HotKey pressed: [" & HotKeyDecode( $arrKeys[ $ind ] ) & "]" )
Else
If Run( $arrExec[ $intKey ] ) = 0 Then
MsgBox( 16, "Error!", _
"HotKey [" & HotKeyDecode( @HotKeyPressed ) & "]
pressed!" & _
@CRLF & @CRLF & _
"Error executing command [" & $arrExec[ $intKey ] &
"]!" & @Tab, 15 )
EndIf
EndIf
EndIf
EndFunc
;
; Function: RegisterHotKey()
; =============================================================================
;
Func RegisterHotKey( $strHotKey, $strInfo, $strExec )
HotKeySet( $strHotKey, "ExecHotKey" )
If UBound( $arrExec ) = 1 And $arrExec[0] = "" Then
$arrExec[0] = $strExec
$arrKeys[0] = $strHotKey
$arrInfo[0] = $strInfo
Else
_ArrayAdd( $arrExec, $strExec )
_ArrayAdd( $arrKeys, $strHotKey )
_ArrayAdd( $arrInfo, $strInfo )
EndIf
EndFunc
;
; Function: InitHotKeys()
; =============================================================================
; Read .ini file and register HotKeys
;
Func InitHotKeys( $strIni )
Local $strHotKey
Local $strExec
Local $hIniFile
$hIniFile = FileOpen( $strIni )
If $hIniFile = -1 Then Return
While True
Local $arrLine
Local $strLine = FileReadLine( $hIniFile )
If @error = -1 Then ExitLoop
If StringLeft( $strLine, 1 ) = ";" Then ContinueLoop
$arrLine = StringSplit( $strLine, "|" )
If $arrLine[0] = 3 Then
RegisterHotKey( $arrLine[ 1 ], $arrLine[ 2 ], $arrLine[ 3 ] )
EndIf
WEnd
FileClose( $hIniFile )
EndFunc
;
; Function: InitTray()
; =============================================================================
; Initialize Tray
;
Func InitTray()
Local $strIco
$strIco = StringSplit( @ScriptName, "." )
$strIco = $strIco[ 1 ]
Opt( "TrayMenuMode", 1 ) ; No default AutoIt menu
Opt( "TrayOnEventMode", 1 ) ; On Event Mode
;
; Set Tray Icon
;
If FileExists( $strIco & ".exe" ) Then
TraySetIcon( $strIco & ".exe", -1 )
Else
MsgBox( 0, "", $strIco & "2" )
EndIf
;
; Define Tray Menu
;
$hndAbout = TrayCreateItem( "About" )
TrayItemSetOnEvent( -1, "About" )
TrayCreateItem("")
$hndDebug = TrayCreateItem( "Debug (only) HotKeys" )
TrayItemSetOnEvent( -1, "Debug" )
TrayCreateItem("")
TrayCreateItem( "Exit" )
TrayItemSetOnEvent( -1, "TrayExit" )
TraySetState()
EndFunc
;
; Function: TrayExtt()
; =============================================================================
; Event Exit (Tray)
;
Func TrayExit()
Exit
EndFunc
;
; Function: Main()
; =============================================================================
;
Func Main()
If _Singleton( @ScriptName, 1 ) = 0 Then
MsgBox( 16, "Warning", @ScriptName & " already running!", 5 )
Exit
EndIf
Local $strIni
;
; Test Argument, ini file
;
If $CmdLine[ 0 ] > 0 Then
If Not FileExists( $CmdLine[ 1 ] ) Then
MsgBox( 16, "Warning", "Ini file [" & $CmdLine[ 1 ] & "] not
exists!", 5 )
Exit
EndIf
$strIni = $CmdLine[ 1 ]
Else
$strIni = StringSplit( @ScriptName, "." )
$strIni = @ScriptDir & "\" & $strIni[ 1 ] & ".ini"
EndIf
;
; Initialize
;
InitTray()
InitHotKeys( $strIni )
;
; Main loop
;
While True
Sleep( 100 )
WEnd
EndFunc
; =============================================================================
; Main
; =============================================================================
Main()
Received on Tue 27 Nov 2012 - 22:00:03 MET
To archiwum zostao wygenerowane przez hypermail 2.2.0 : Tue 27 Nov 2012 - 22:42:02 MET