File context menu එකකට Menu එකක් අලුතින් දාමු (Windows)

hasithayad

Well-known member
  • Sep 28, 2011
    30,800
    1
    45,013
    113
    අත්‍යාවශ්‍ය දේවල් විතරයි තියෙන්නෙ subject එක දන්න අයට විතරයි. @visula kavinda

    මුලින්ම කියන්ට ඕනෙ registry එකේ HKEY_CLASSES_ROOT එකේ extension classes වලට අත තියන්ට එපා. ඒවා තියෙන්නෙ උඹලට අතපත ගාලා කෙලවන්ඩ නෙවෙයි. මේක කරන්න හොඳම තැන තමයි මෙතන

    HKEY_CLASSES_ROOT\SystemFileAssociations

    මෙතනින් පුලුවන් ඕනෙම File context menu එකකට Menu එකක් අලුතින් දාන්න. අපි .html extension එකට menu එකක් දාන හැටි බලමු.

    දැන් මට ඕනෙ .html file එකක් උඩ right click කරපුවාම "මේක ඇරපන්" කියල මෙනු එකක් ඇතුලේ "නෝට් පෑඩ් එකෙන්", "වර්ඩ් පෑඩ් එකෙන්" කියල sub menu දෙකක් එන්න. ඒකෙන්:

    "නෝට් පෑඩ් එකෙන්" click කරොත් html file එක notepad.exe එකෙන් open වෙන්න ඕනෙ.
    "වර්ඩ් පෑඩ් එකෙන්" click කරොත් html file එක wordpad.exe එකෙන් open වෙන්න ඕනෙ.

    මේකට registry එකේ "HKEY_CLASSES_ROOT\SystemFileAssociations‍\.html" path එකට ගිහින් Shell කියල අලුත් Key එකක් හදන්න. (Key කිව්වෙ folder එකක්) මේක ඇතුලට තමයි අපිට අලුතින් දාන්න ඕනෙ menu items ඔක්කොම දාන්නෙ.

    ඊට පස්සෙ .html Key එක ඇතුලේ "මේක ඇරපන්" කියල තව අලුත් Key එකක් හදන්න. එතන string value එකක් හදලා name එකට subcommands කියල දෙන්න. value එක blank තියන්න. මෙතනින් තමයි right click menu එක populate වෙනකොට ඒ menu item එක parent item එකක් විදියට detect කරගන්නෙ.

    ඊට පස්සෙ "මේක ඇරපන්" Key එක ඇතුලේ Shell කියලා තව Key එකක් හදන්න. ඊට පස්සෙ මේක ඇතුලෙ තමයි අපිට ඕනෙ කරන sub menu items ටික හදන්නෙ.

    දැන් මුල්ම sub menu එක හදමු.

    Shell Key එක ඇතුලේ "නෝට් පෑඩ් එකෙන්" කියල තව Key එකක් හදන්න. ඒ "නෝට් පෑඩ් එකෙන්" Key එක ඇතුලේ command කියලා තව Key එකක් හදන්න. මේ command Key එක ඇතුලේ තියන (Default) value එකට දෙන්න ඕනෙ ඒ menu එක click කරාම open වෙන්න ඕනෙ program එකේ path එක. අපිට මේක නෝට් පෑඩ් එකෙන් ඕපන් වෙන්න ඕනෙ නිසා (Default) value එකට

    C:\Windows\System32\notepad.exe %1

    කියලා දෙන්න. මෙතන space එකකින් පස්සෙ %1 තියෙන්නෙ මේකයි.

    %1 කියන්නෙ හරියට variable එකක් වගේ. අපි file එකක් select කරලා ඒක උඩ right click කරලා menu එකක් click කරපු ගමන් ඔය %1 variable එකට ඒ file path එක assign වෙනව. එතකොට අපි

    C:\Windows\System32\notepad.exe %1

    කියල දුන්නම, %1 තියන තැනට file path එක ඇවිල්ලා notepad.exe එකට ඒ file path එක parameter එකක් විදියට pass කරනව. එතකොට notepad.exe එක open වෙනකොට එහෙම values ඇවිල්ල තියනවනම් ඒ file එක open වෙන විදියට තමයි හදල තියෙන්නෙ. programming කරන අයට මේ තේරෙයි. තේරෙන්නැත්තං space එකක් එක්ක %1 දාන්න වැඩිය හිතන්න එපා.

    දැන් පලවෙනි sub menu item එක හදල ඉවරයි. දැන් දෙවනි sub menu item එක හදන්න ආපහු

    HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell

    path එකට ගිහින් "වර්ඩ් පෑඩ් එකෙන්" කියල අලුත් Key එකක් හදන්න. ඒක ඇතුලේ කලින් වගේම command කියල තව Key එකක් හදලා ඒකේ (Default) value එකට WordPad එකේ path එක දෙන්න.

    C:\Program Files\Windows NT\Accessories\wordpad.exe %1

    menu3.jpg


    දැන් menu එක හදල ඉවරයි. .html file එකක් උඩ right click කරල බලන්න වැඩ කරනවද කියල.

    menu1.jpg


    දැන් මේකට icon දාන්න ඕනෙනම් කරන්න තියෙන්නෙ මෙච්චරයි.

    මේක ඇරපන්
    නෝට් පෑඩ් එකෙන්
    වර්ඩ් පෑඩ් එකෙන්

    keys ඇතුලේ string value එකක් හදන්න "icon" කියලා. ඒකෙ value එකට දෙන්න දාන්න ඕනෙ icon එකේ path එක. නිකන්ම exe එකක path එක දුන්නත් ඒ exe එකේ icon එක පෙන්නනවා. තව imageres.dll, shell32.dll, moricons.dll, explorer.exe වගේ system dll, exe ඇතුලේ resources විදියට තියන icons .reg file එකේ දාල තියන විදියට දාන්නත් පුලුවන්. dll path එක ලියලා කොමාවකට පස්සෙ icon number ලියන්න තියෙන්නෙ. (%SystemRoot% කියන්නෙ C:\Windows එකටම තමයි. ඒකට environment variables ගැන ඉගෙන ගන්න)

    menu2.jpg


    මේ කියපු ඔක්කොම මෙතන තියනවා. කැමති අයට .reg file එකක් විදියට save කරලා registry එකට import කරගෙන බලන්න පුලුවන්.

    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell]
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්]
    @=""
    "subcommands"=""
    "icon"="%SystemRoot%\\System32\\SHELL32.dll,3"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell]
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\නෝට් පෑඩ් එකෙන්]
    @=""
    "icon"="C:\\Windows\\System32\\notepad.exe"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\නෝට් පෑඩ් එකෙන්\command]
    @="\"C:\\Windows\\System32\\notepad.exe\" %1"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\වර්ඩ් පෑඩ් එකෙන්]
    "icon"="C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\වර්ඩ් පෑඩ් එකෙන්\command]
    @="C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe %1"

    දැන් මේ කරපු නසරානි වැඩේ undo කරන්න ඕනෙ නම් කරන්න තියෙන්නෙ "HKEY_CLASSES_ROOT\SystemFileAssociations‍\.html" path එකට ගිහින් Shell Key එක මකලා දාන එක විතරයි.
     
    Last edited:

    vishwadt

    Well-known member
  • Aug 6, 2010
    367
    602
    93
    අත්‍යාවශ්‍ය දේවල් විතරයි තියෙන්නෙ subject එක දන්න අයට විතරයි. @visula kavinda

    මුලින්ම කියන්ට ඕනෙ registry එකේ HKEY_CLASSES_ROOT එකේ extension classes වලට අත තියන්ට එපා. ඒවා තියෙන්නෙ උඹලට අතපත ගාලා කෙලවන්ඩ නෙවෙයි. මේක කරන්න හොඳම තැන තමයි මෙතන



    මෙතනින් පුලුවන් ඕනෙම File context menu එකකට Menu එකක් අලුතින් දාන්න. අපි .html extension එකට menu එකක් දාන හැටි බලමු.

    දැන් මට ඕනෙ .html file එකක් උඩ right click කරපුවාම "මේක ඇරපන්" කියල මෙනු එකක් ඇතුලේ "නෝට් පෑඩ් එකෙන්", "වර්ඩ් පෑඩ් එකෙන්" කියල sub menu දෙකක් එන්න. ඒකෙන්:

    "නෝට් පෑඩ් එකෙන්" click කරොත් html file එක notepad.exe එකෙන් open වෙන්න ඕනෙ.
    "වර්ඩ් පෑඩ් එකෙන්" click කරොත් html file එක wordpad.exe එකෙන් open වෙන්න ඕනෙ.

    මේකට registry එකේ "HKEY_CLASSES_ROOT\SystemFileAssociations‍\.html" path එකට ගිහින් Shell කියල අලුත් Key එකක් හදන්න. (Key කිව්වෙ folder එකක්) මේක ඇතුලට තමයි අපිට අලුතින් දාන්න ඕනෙ menu items ඔක්කොම දාන්නෙ.

    ඊට පස්සෙ .html Key එක ඇතුලේ "මේක ඇරපන්" කියල තව අලුත් Key එකක් හදන්න. එතන string value එකක් හදලා name එකට subcommands කියල දෙන්න. value එක blank තියන්න. මෙතනින් තමයි right click menu එක populate වෙනකොට ඒ menu item එක parent item එකක් විදියට detect කරගන්නෙ.

    ඊට පස්සෙ "මේක ඇරපන්" Key එක ඇතුලේ Shell කියලා තව Key එකක් හදන්න. ඊට පස්සෙ මේක ඇතුලෙ තමයි අපිට ඕනෙ කරන sub menu items ටික හදන්නෙ.

    දැන් මුල්ම sub menu එක හදමු.

    Shell Key එක ඇතුලේ "නෝට් පෑඩ් එකෙන්" කියල තව Key එකක් හදන්න. ඒ "නෝට් පෑඩ් එකෙන්" Key එක ඇතුලේ command කියලා තව Key එකක් හදන්න. මේ command Key එක ඇතුලේ තියන (Default) value එකට දෙන්න ඕනෙ ඒ menu එක click කරාම open වෙන්න ඕනෙ program එකේ path එක. අපිට මේක නෝට් පෑඩ් එකෙන් ඕපන් වෙන්න ඕනෙ නිසා (Default) value එකට



    කියලා දෙන්න. මෙතන space එකකින් පස්සෙ %1 තියෙන්නෙ මේකයි.

    %1 කියන්නෙ හරියට variable එකක් වගේ. අපි file එකක් select කරලා ඒක උඩ right click කරලා menu එකක් click කරපු ගමන් ඔය %1 variable එකට ඒ file path එක assign වෙනව. එතකොට අපි



    කියල දුන්නම, %1 තියන තැනට file path එක ඇවිල්ලා notepad.exe එකට ඒ file path එක parameter එකක් විදියට pass කරනව. එතකොට notepad.exe එක open වෙනකොට එහෙම values ඇවිල්ල තියනවනම් ඒ file එක open වෙන විදියට තමයි හදල තියෙන්නෙ. programming කරන අයට මේ තේරෙයි. තේරෙන්නැත්තං space එකක් එක්ක %1 දාන්න වැඩිය හිතන්න එපා.

    දැන් පලවෙනි sub menu item එක හදල ඉවරයි. දැන් දෙවනි sub menu item එක හදන්න ආපහු



    path එකට ගිහින් "වර්ඩ් පෑඩ් එකෙන්" කියල අලුත් Key එකක් හදන්න. ඒක ඇතුලේ කලින් වගේම command කියල තව Key එකක් හදලා ඒකේ (Default) value එකට WordPad එකේ path එක දෙන්න.



    menu3.jpg


    දැන් menu එක හදල ඉවරයි. .html file එකක් උඩ right click කරල බලන්න වැඩ කරනවද කියල.

    menu1.jpg


    දැන් මේකට icon දාන්න ඕනෙනම් කරන්න තියෙන්නෙ මෙච්චරයි.



    keys ඇතුලේ string value එකක් හදන්න "icon" කියලා. ඒකෙ value එකට දෙන්න දාන්න ඕනෙ icon එකේ path එක. නිකන්ම exe එකක path එක දුන්නත් ඒ exe එකේ icon එක පෙන්නනවා. තව imageres.dll, shell32.dll, moricons.dll, explorer.exe වගේ system dll, exe ඇතුලේ resources විදියට තියන icons .reg file එකේ දාල තියන විදියට දාන්නත් පුලුවන්. dll path එක ලියලා කොමාවකට පස්සෙ icon number ලියන්න තියෙන්නෙ. (%SystemRoot% කියන්නෙ C:\Windows එකටම තමයි. ඒකට environment variables ගැන ඉගෙන ගන්න)

    menu2.jpg


    මේ කියපු ඔක්කොම මෙතන තියනවා. කැමති අයට .reg file එකක් විදියට save කරලා registry එකට import කරගෙන බලන්න පුලුවන්.

    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell]
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්]
    @=""
    "subcommands"=""
    "icon"="%SystemRoot%\\System32\\SHELL32.dll,3"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell]
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\නෝට් පෑඩ් එකෙන්]
    @=""
    "icon"="C:\\Windows\\System32\\notepad.exe"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\නෝට් පෑඩ් එකෙන්\command]
    @="\"C:\\Windows\\System32\\notepad.exe\" %1"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\වර්ඩ් පෑඩ් එකෙන්]
    "icon"="C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe"
    
    [HKEY_CLASSES_ROOT\SystemFileAssociations\.html\Shell\මේක ඇරපන්\shell\වර්ඩ් පෑඩ් එකෙන්\command]
    @="C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe %1"

    දැන් මේ කරපු නසරානි වැඩේ undo කරන්න ඕනෙ නම් කරන්න තියෙන්නෙ "HKEY_CLASSES_ROOT\SystemFileAssociations‍\.html" path එකට ගිහින් Shell Key එක මකලා දාන එක විතරයි.
    good post
     
    • Love
    Reactions: hasithayad