verknüpfung auf "eigene dateien" per batchdatei anlegen?

fragt mich nicht wie ich darauf komme, ist eher neugieriger natur.
wie schon im topic steht will ich per batchdatei eine verknüpfung von dem ordner "eigene dateien" in einen anderen ordner legen, klar könnte es natürlich auch mit dem stinknormalen verknüpfungs-dudelsack von windows machen aber mich würde mal interessieren wie sowas geht...

hab mir schon ein paar gedanken gemacht und mir überlegt dass man vielleicht einfach die verknüpfung vom desktop oder startmenü benutzt und diese einfach mit copy oder xcopy ins besagte verzeichniss kopiert..allerdings findet cmd die angeforderte datei weder ohne, als auch mit der endung .ink.

irgendjemand ne idee wie man sowas realisieren könnte? :D
 
Genaueres weiss ich jetzt erstmal nicht, aber die Endung ist ".lnk" (steht halt für Link), vielleicht hilft dir das ja schon weiter.
 
Passt vielleicht nicht ganz zum Thema, aber ich hatte da in C++ mal eine Funktion geschrieben, die das macht. Wenn du dir vielleicht nen komfortables Programm schreiben willst, kannste das benutzen ;)

EDIT: hab die zu includierenden Header noch hinzugefügt. Sorry hatte ich vergessen.

Code:
/*
* Verknüpfung erstellen mit C++
* ---------------------------------------
*
* Written by M4CH!N3
*
* Params:
*	pszPath =		Pfad zum/zur Verknüpften Ordner/Datei
*	pszArguments=	eventuelle Kommandozeilenparameter
*	pszLocation=	Pfad, wo die Verknüpfung gespeichert werden soll
*	pszWorkingDir=	Working Directory -> Aktives Directory, in welchem die Verknüpfung arbeiten soll
*	pszIcon=		Pfad zum Icon / zur Exe mit dem Icon
*	nCmdShow=		Showstate vom Verknüpften Programm/Ordner (SW_SHOWNORMAL; SW_SHOWMAXIMIZED; SW_SHOWMINNOACTIVE)
*
* November 2006
*
*/
#include <shobjidl.h>
#include <shlguid.h>

typedef IShellLink *LPSHELLLINK; 
typedef IPersistFile *LPPERSISTFILE; 

BOOL CMyClaas::CreateShortcut( LPCSTR pszPath, LPCSTR pszArguments, LPCSTR pszLocation, LPCSTR pszWorkingDir, LPCSTR pszIcon, int nCmdShow ) 
{ 
  LPSHELLLINK pShellLink; 
  HRESULT hrCoInit;                        
  HRESULT hr;                             

  hrCoInit = CoInitialize( NULL );                
  hr = CoCreateInstance(   CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pShellLink ); 
  if( SUCCEEDED( hr ) ) 
  { 
    LPPERSISTFILE pPersistFile; 

    if(SUCCEEDED(pShellLink->QueryInterface(IID_IPersistFile,(void**)&pPersistFile))) 
    { 
      wchar_t wsz[ MAX_PATH ]; 

      hr = pShellLink->SetPath(pszPath); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetArguments(pszArguments); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetWorkingDirectory(pszWorkingDir ); 

      if (SUCCEEDED(hr)) 
          hr = pShellLink->SetIconLocation(pszIcon,0); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetShowCmd(nCmdShow ); 

      if( SUCCEEDED( hr ) ) 
      { 
        MultiByteToWideChar( CP_ACP, 0, pszLocation, -1, wsz, MAX_PATH); 
        hr = pPersistFile->Save( wsz, TRUE ); 
        hr = pPersistFile->SaveCompleted( wsz ); 
      } 
    } 
    pShellLink->Release( ); 
  } 
  if( SUCCEEDED( hrCoInit ) ) CoUninitialize(); 

  return SUCCEEDED( hr ); 
}
 
hui vielen dank =D
problem ist halt nur dass meine ahnung was C angeht recht mager ist...d.h. ich habs mir 2 mal angeguckt und nich wirklich gerafft..speicher ich das ding dann als konsolen-applikation? muss in die source file sonst noch was rein? :X sorry für die blöden fragen
 
lol du bist ja ma lustig drauf..danke :D

?: habs mir mal angetan und ins wunderbare dev cpp eingehauen..nur damit ichs versteh und meine allgemeine neugier befriedigt ist, würde die passage die auf die dateien verweist dann ca so aussehen?

Code:
      hr = pShellLink->SetPath(C:\Dokumente und Einstellungen\k0tster\Eigene Dateien\); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetArguments(pszArguments); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetWorkingDirectory(G:\Stor\Renders\Final\ );
 
Hier mal ein kleines Konsolenprojekt.
Das legt einfach eine Verknüpfung in C:\ an. Die Verknüpfung zeigt auf C:\Windows.
Wenn du das mit dev-cpp nicht öffnen kannst, schau dir einfach die CreateShortcut.cpp in nem Editor an.

Aso: das zip ist ein 7zip. Weiß nicht, ob das sich mit Winrar öffnen lässt...
 
höyy erstmal danke. wusste nicht dass das so viel arbeit ist. allerdings bleibt er aus mir undefinierbaren gründen beim compile hängen und zwar in dieser zeile:

Code:
typedef IShellLink *LPSHELLLINK;

bin ich zu blöd? X(
 
Wie genau heißt der Fehler? Vielleicht liegts an DEV.. damit hab ich nochnicht gearbeitet... habe VC++.

versuch mal, die beiden typedef Zeilen zu löschen und dann die Funktion so zu nutzen:
Code:
BOOL CreateShortcut( LPCSTR pszPath, LPCSTR pszArguments, LPCSTR pszLocation, LPCSTR pszWorkingDir, LPCSTR pszIcon, int nCmdShow ) 
{ 
  IShellLink* pShellLink; 
  HRESULT hrCoInit;                        
  HRESULT hr;                             

  hrCoInit = CoInitialize( NULL );                
  hr = CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pShellLink ); 
  if( SUCCEEDED( hr ) ) 
  { 
    IPersistFile* pPersistFile; 

    if(SUCCEEDED(pShellLink->QueryInterface(IID_IPersistFile,(void**)&pPersistFile))) 
    { 
      wchar_t wsz[ MAX_PATH ]; 

      hr = pShellLink->SetPath(pszPath); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetArguments(pszArguments); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetWorkingDirectory(pszWorkingDir ); 

      if (SUCCEEDED(hr)) 
          hr = pShellLink->SetIconLocation(pszIcon,0); 

      if( SUCCEEDED( hr ) ) 
        hr = pShellLink->SetShowCmd(nCmdShow ); 

      if( SUCCEEDED( hr ) ) 
      { 
        MultiByteToWideChar( CP_ACP, 0, pszLocation, -1, wsz, MAX_PATH); 
        hr = pPersistFile->Save( wsz, TRUE ); 
        hr = pPersistFile->SaveCompleted( wsz ); 
      } 
    } 
    pShellLink->Release( ); 
  } 
  if( SUCCEEDED( hrCoInit ) ) CoUninitialize(); 

  return SUCCEEDED( hr ); 
}
 
also bei den typedefs spruckt er folgende fehler aus:
Code:
30 C:\Dev-Cpp\Projects\CreateShortcut\CreateShortcut.cpp expected init-declarator before '*' token

wenn ich die typedefs und allwas was drunter steht mit dem neuen code ersetzte bleibt er bei
Code:
  IShellLink* pShellLink;
mit
Code:
34 C:\Dev-Cpp\Projects\CreateShortcut\CreateShortcut.cpp `IShellLink' undeclared (first use this function)
hängen..

langsam fang ich echt an an meinem verstand und an diesem porgramm zu zweifeln..^^
 
Wie werden denn in Dev-Cpp Pointer definiert?
IShellLink* pShellLink; bedeutet, dass pShellLink ein Pointer ist.

Also * bedeutet Pointer.
 
ok moment da ich mir jetzt eh schon 7zip gesaugt hab werd ich mir mal vc++ runterladen oder so..und probiers da einfach nochmal..^^
 
vc++ ist aber ziemlich teuer ;) das ist visual c++ von M$.
Ich glaube da gibts aber auch Express-Versionen. Musst du mal googlen.
 
yop bin schon am saugen...gibts offiziell umsonst auf der M$ website.
is ja auch lustig, da lädt man 2,8 mb mit 1,8mb/s runter und danach 69mb mit 344kb/s
welch bittere ironie..

?: hab mir den ganzen kram jetzt gesaugt, installeiren und konfigurieren lassen. und beim compile sagt er mir:

WEEEELTUNTERGANG !!! windows.h konnte leider leider nicht gefunden werden..hmm..schade.

vielleicht wärs intelligenter das irgendwie über icq oder so zu machen? bestimmt lachen mich ganz viele leute gerade aus :P
 
Zurück
Oben