Pergunta

Usando java, eu gostaria de algum código que pudesse me os caminhos para:1) Menu Iniciar para o Usuário Atual 2) Menu Iniciar de Todos os usuários

Eu preciso de resposta para ambos os WinXP e Win7.Portanto, esperamos que há uma resposta que pode obter de mim.

Foi útil?

Solução 2

Ok, descobri uma solução, mas talvez outra pessoa tenha mais eliminosa.

Eu pretendo fazer algo como "Runtime.GetRuntime (). Exec (comando)";e o comando será uma "consulta reg" para consultar as seguintes chaves de registro:

Usuário atual pode referenciado por: hkey_current_user \ software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Pasters \ Iniciar menu

Todos os usuários podem ser referenciados por: hkey_local_machine \ software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders \ Common Start menu

Estes são os mesmos para o Win7 e WinXP.Se alguém mais sabe de uma solução melhor, ficarei feliz em olhar para ele também.

Outras dicas

Você não tem nenhuma outra escolha mas para escrever uma DLL e chamá API nativa do Windows:

  • SHGetFolderPath(NULL, CSIDL_PROGRAMS, NULL, SHGFP_TYPE_CURRENT, &szPathBuffer)
  • SHGetFolderPath(NULL, CSIDL_COMMON_PROGRAMS, NULL, SHGFP_TYPE_CURRENT, &szPathBuffer)

Se você realmente precisa que a raiz do menu Iniciar, use CSIDL_STARTMENU e CSIDL_COMMON_STARTMENU.
A lista completa de pastas conhecidas: CSIDL.

Se você segmentar o Windows Vista e acima, use SHGetKnownFolderPath função em vez de SHGetFolderPath.

Você pode usar JNA biblioteca para chamar a API nativa do Windows sem a necessidade de escrever código nativo de si mesmo, mas pura de código Java.

No meu programa, eu usei um simples System.getProperty("user.home") + "/Start Menu/Programs" Isto deu-me o usuário da pasta do Menu Iniciar.

Funcionou no windows 7 e windows 10.Eu tentei isso porque, para começar uma área de trabalho do usuário, tudo o que eu tinha a fazer era chamar System.getProperty("user.home") + "/Desktop".ENTÃO eu percebi que poderia funcionar para o Menu Iniciar, bem como, e parecia ter funcionado bem.Eu posso apagar e gravar arquivos no Menu Iniciar como eu posso com o ambiente de trabalho.Se este é o caminho certo para fazer algo parecido com isso ou não, eu não tenho nenhuma idéia.Mas eu só estou compartilhando o que funcionou para mim.

Outra opção é a gestão de itens do Menu Iniciar das vbs API.

Eu fiz um Wrapper Java para que.

// Install Start Menu
WindowsUtils.installStartMenuItem(WindowsUtils.SPECIALFOLDER_Programs,"my_start_menu", "explorer.exe", "http://www.google.es","Acceso directo a google");

// Uninstall Start Menu
WindowsUtils.uninstallStartMenuItem(WindowsUtils.SPECIALFOLDER_Programs, "my_start_menu");

eu encontrei recentemente este

public class VBSUtils {

  public static String SF_ALLUSERSDESKTOP    = "AllUsersDesktop";
  public static String SF_ALLUSERSSTARTMENU  = "AllUsersStartMenu";
  public static String SF_ALLUSERSPROGRAMS   = "AllUsersPrograms";
  public static String SF_ALLUSERSSTARTUP    = "AllUsersStartup";
  public static String SF_DESKTOP            = "Desktop";
  public static String SF_FAVORITES          = "Favorites";
  public static String SF_MYDOCUMENT         = "MyDocuments";
  public static String SF_PROGRAMS           = "Programs";
  public static String SF_RECENT             = "Recent";
  public static String SF_SENDTO             = "SendTo";
  public static String SF_STARTMENU          = "StartMenu";

  private VBSUtils() {  }

  public static String getSpecialFolder(String folder) {
    String result = "";
    try {
        File file = File.createTempFile("realhowto",".vbs");
        file.deleteOnExit();
        FileWriter fw = new java.io.FileWriter(file);

        String vbs = "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n"
                     + "wscript.echo WshShell.SpecialFolders(\"" + folder + "\")\n"
                     + "Set WSHShell = Nothing\n";

        fw.write(vbs);
        fw.close();
        Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
        BufferedReader input =
            new BufferedReader
              (new InputStreamReader(p.getInputStream()));
        result = input.readLine();
        input.close();
    }
    catch(Exception e){
        e.printStackTrace();
    }
    return result;
  }

      public static void main(String[] args){
          System.out.println(VBSUtils.getSpecialFolder(VBSUtils.SF_ALLUSERSSTARTMENU));
        System.out.println(VBSUtils.getSpecialFolder(VBSUtils.SF_ALLUSERSDESKTOP));
        System.out.println(VBSUtils.getSpecialFolder(VBSUtils.SF_DESKTOP));
        System.out.println(VBSUtils.getSpecialFolder(VBSUtils.SF_PROGRAMS));
        //System.out.println(VBSUtils.getSpecialFolder(VBSUtils.SF_STARTUP));
      }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top