Re: W8 - do czego służy screen powitalny?

Autor: artiun <artiun_at_spam.wp.pl>
Data: Tue, 27 Nov 2012 21:56:43 +0100
Content-Type: text/plain; charset=UTF-8; format=flowed
Message-ID: <50b5298a$0$26710$65785112@news.neostrada.pl>

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