Avatar billede jamark Praktikant
21. februar 2013 - 11:15 Der er 9 kommentarer

Program til oprettelse af genveje på skrivebordet

Hej

Jeg har en lille opgave, som jeg godt kunne bruge lidt hjælp til.

Jeg vil gerne have lavet et lille program, som ved hjælp af indtastning af et nummer (projektnr.) kan generere to genveje, som henviser til to mapper, hvor nummeret indgår i stien.

Det lyder simpelt, men min viden indenfor programmering er kun helt grundlæggende.

Nogen der kan hjælpe?

Mvh. JaMark
Avatar billede supertekst Ekspert
21. februar 2013 - 15:34 #1
Det skulle nok kunne lade sig gøre via VBA. D.v.s. at VBA-koden anvender et af programmerne i Office-pakken som "pladsholder".

De relevante mapper har de en fælles "overmappe"?
Avatar billede olebole Juniormester
21. februar 2013 - 15:59 #2
<ole>

Det ville måske være overkill at starte et Office program op for det. Det kan gøres med et lille VBScript - men du må nok forklare lidt tydeligere, hvad der skal ske  =)

/mvh
</bole>
Avatar billede supertekst Ekspert
21. februar 2013 - 16:55 #3
Ja - det er det nok - men det virker..
Avatar billede jamark Praktikant
21. februar 2013 - 22:19 #4
Det optimale ville være følgende:

En exe-fil aktiveres, og en boks popper op med titlen "Oprettelse af projektgenveje" og teksten "Indtast projektnr." og en boks til indtastning af projektnr. og en "Opret genveje"-knap.

Ved indtastning af fx. "A012345" udføres følgende:

En genvej oprettes på skrivebordet med stien "C:\mappe\A010000\A012345", hvor A010000 er projektnr. rundet ned til nærmeste 5000.
Avatar billede olebole Juniormester
22. februar 2013 - 00:22 #5
Du kan prøve at gemme denne fil som ShortcutCreator.hta:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Shortcut Creator</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="MSThemeCompatible" content="yes">
<script type="text/javascript">
(function(){
    var w = 370,
    h = 175;
    window.resizeTo(w, h);
    window.moveTo((screen.availWidth-w)/2, (screen.availHeight-h)/2);
})();
</script>
<hta:application id="oHta"
    applicationname="ShortCutCreator"
    version="1.0"
    caption="yes"
    icon=""
    sysmenu="yes"
    maximizebutton="no"
    minimizebutton= "yes"
    borderstyle="normal"
    border="dialog"
    innerborder="no"
    contextmenu="no"
    navigable="no"
    showintaskbar="yes"
    singleinstance="yes"
    windowstate="normal">
</hta:application>
<style type="text/css">
html,
body {
    margin: 0;
    padding: 0;
    overflow: hidden;
}
body {
    font: 12px "Segoe UI", Tahoma, sans-serif;
    background: threedface;
}
fieldset {
    width: 300px;
    margin: 12px auto 0;
    padding: 6px 12px 0px;
}

#inpProjectNo {
    width: 200px;
    margin-left: 5px;
    vertical-align: middle;
}
.buttons {
    margin: 16px 0 12px;
    padding-top: 12px;
    border-top: 1px solid #fff;
    text-align: center;
}
.buttons button {
    width: 75px;
}
button:focus {
    outline: none;
}
</style>
<script type="text/javascript">
var startFolder = "F:\\mappe",
elmProjectNum = null;

function createShortCut() {
    var val, pfx, num, folderPath, oWS, shortCutPath,
    oFso, oFldr, oFile, linkPath, oLink;
   
    val = elmProjectNum.value;
    pfx = val.substr(0, 2);
    num = val.substr(2);
    folderPath = startFolder + "\\" + pfx + (num - (num % 5000)) + "\\" + val;
   
    oFso = new ActiveXObject("Scripting.FileSystemObject");
    if (!oFso.folderExists(folderPath)) {
        alert("Mappen kan ikke findes:\n"+folderPath);
        elmProjectNum.select();
        oFso = null;
        return false;
    }
   
    oWS = new ActiveXObject("WScript.Shell");
    shortCutPath = oWS.SpecialFolders("Desktop") + "\\" + val;
   
    if (oFso.folderExists(shortCutPath)) {
        alert("Genvejen findes allerede:\n"+shortCutPath);
        elmProjectNum.select();
        oFso = oWS = null;
        return false;
    }
   
    oFldr = oFso.CreateFolder(shortCutPath);
   
    oFile = oFso.CreateTextFile(shortCutPath + "\\Desktop.ini", true);
    oFile.WriteLine("[.ShellClassInfo]");
    oFile.WriteLine("CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}");
    oFile.WriteLine("Flags=2");
    oFile.Close();
   
    oFile = oFso.GetFile(shortCutPath + "\\Desktop.ini");
    oFile.attributes = 38;
   
    oFile = oFso.GetFolder(shortCutPath);
    oFile.attributes = 1;
   
    linkPath = shortCutPath + "\\target.lnk";
    oLink = oWS.CreateShortcut(linkPath);
    oLink.TargetPath = folderPath;
    oLink.WorkingDirectory = shortCutPath;
    oLink.Save();
    elmProjectNum.value = "";
    elmProjectNum.focus();
   
    oFso = oWS = oFldr = oFile = oLink = null;
}
function init() {
    elmProjectNum = document.getElementById("inpProjectNo");
    elmProjectNum.focus();
}
window.onload = init;
</script>

</head>
<body>

<fieldset>
    <legend>Opret Genvej</legend>
    <label>Projektnummer: <input id="inpProjectNo" type="text"></label>
    <div class="buttons">
        <button onclick="createShortCut()" type="button">Opret</button>
        <button onclick="window.close()" type="button">Fortryd</button>
    </div>
</fieldset>

</body>
</html>
Avatar billede olebole Juniormester
22. februar 2013 - 00:23 #6
Ups ... ret lige første linje af JavaScriptet til:

var startFolder = "C:\\mappe",
Avatar billede jamark Praktikant
22. februar 2013 - 22:16 #7
Fedt! Det kan jeg bruge. Godt arbejde. Det er ikke det hele, jeg forstår, men jeg tror jeg har fanget nok til at arbejde videre med den. Smider du et svar?

Jeg får nok et par tillægsspørgsmål, men det må jeg hellere oprette som nye spørgsmål, men smider nok links her i denne tråd.
Avatar billede supertekst Ekspert
22. februar 2013 - 23:15 #8
Hvis du kan have gavn at se min model i VBA fra i går - så giv blot signal.
Avatar billede olebole Juniormester
22. februar 2013 - 23:41 #9
Selvtak, men jeg samler ikke point, så du lægger bare selv et accepteret svar, så tåden lukkes  =)

HTA er en fin måde at få GUI på sine forskellige administrationsscripts. Skulle du eller andre være interesseret, er referencen her.

Hvad 'mystikken' angår, kan det være, at følgende hjælper lidt:
En alm. shortcut består af en fil med extension 'lnk'. Den får sat nogle properties/attributes - f.eks. TargetPath, der angiver stien til den originale fil.

En shortcut til en mappe består af en mappe med en sådan fil i. Derudover indeholder mappen en Desktop.ini med flg. indhold:

[.ShellClassInfo]
CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}
Flags=2

Desktop.ini-filen får sat

oFile.attributes = 38;

- som gør den til en usynlig systemfil. Selve mappen (som skal være en shortcut) får sat

oFile.attributes = 1;

- som gør den readOnly. Se mere om attributes her.

Tallet (A0)12345 delt med 5000 er 2 i heltal. 2*5000=10000 ... og resten er 2345. Resten fås også ved at bruge modulus operatoren, som i JavaScript hedder '%'.

var num = 12345;
var rest = num % 5000;
alert(rest); // Returnerer: 2345

var mappenavn = num - (num % 5000);
alert(mappenavn); // Returnerer: 10000

Det er måden, hvorpå jeg finder navnet på den mappe, den originale fil ligger i.

Er der andet i scriptet, du vil spørge om, kan du bare gøre det her  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester