Systémové menu   otázka

VB.NET

Dobrý den,

když ve WinXP kliknu na soubor pravím tlačítkem, otevře se mi kontextové menu s položkami jako otevřít, zavřít, ale také například Zkomprimovat do (položka programu 7Zip). Totéž kontextové menu se objeví i v Total Commanderu.

Rád bych věděl, jak dosáhnout podobného výsledku ve své aplikaci. Jde mi hlavně o položky, které se v kontextovém menu objevují po instalaci programů, jako například výše zmíněný 7Zip. A nebo třeba vytvořit dokument Office, apod.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Například když chcete aby se pro *.txt přidala do kontextového menu průzkumníka možnost otevřít soubor přes nějaký program (například c:\program.exe).

Vytvoříme v registrech klíč:HKEY_CLASSES_ROOT\.txt\shell\MujProgram

S defaultní hodnotou jako text co se má zobrazit (například Otevřít mým programem)

Vytvoříme v registrech klíč:HKEY_CLASSES_ROOT\.txt\shell\MujProgram\command

A jako defaultní hodnotu uvedete cestu k programu (například c:\program.exe "%1"). Řetězec %1 se pak nahradí za jméno otevíraného souboru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

O tohle mi nešlo, respektive asociaci někdo probíral v diskuzi nazpět. Spíš mi šlo, jak zjistit, které programy jsou s kterými koncovkami asociované.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Z původní otázky jsem soudil, že jste chtěl z aplikace psát do registrů, v tom bych vám neradil. Podle druhé varianty dotazu chcete jen číst, nemůžeme tedy nic zkazit. Jde-li o zjištění asociace podle přípony ke jménu souboru, pak zkuste:

  Private Sub Form1_Load(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles MyBase.Load
      Dim k As Microsoft.Win32.RegistryKey
      Dim p As String = ".txt", t As String = ""
      ' do p vhodným způsobem vložte příponu, pro zkoušku jsem vložil .txt
      k = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(p)
      If IsNothing(k) Then Exit Sub  ' klíč nenalezen
      t = k.GetValue("").ToString & "\Shell\Open\Command"
      k = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(t)
      t = k.GetValue("").ToString
      MsgBox("Přečteno: " & t)
  End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

První příspěvek jsem špatně pochopil myslel jsem, že chcete přiřadit nějaký program k určitému typu souborů.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ne, šlo mi o to, nabídnout kontextové menu stejné jako má windows a nebo TotalCommander.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je kontextová nabídka systému. V jaké části své aplikace ji chcete nabízet? Použijete-li v ní třeba dialog pro práci se soubory, máte ji tam stejně jako je v Total Commanderu, aniž byste pro to musel něco dělat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback