قبل بضعة أيام ، بناءً على طلب العميل ، استخدمت بالفعل VB و VC لكتابة هذا الشيء بشكل أسرع ، لكنني ما زلت أحب استخدام Delphi
بادئ ذي بدء ، استخدم ActiveX ، comobj ، stdctrls ، shlobj ، filectrl ؛
قم بإنشاء اختصار للتطبيق الحالي في المجلد المحدد
الإجراء tform1.makeLink (المجلد: سلسلة ؛ pronse ، lnkname ، الوصف: سلسلة ) ؛
var
Workdir ، Destname: String ؛
AOBJ: Iunknown ؛
MyLink: Ishelllink ؛
mypfile: ipersistfile ؛
wfilename: widestring ؛
Curdir: Array [0..100] of Char ؛
يبدأ
DestName: = FolderName + lnkname ؛
AOBJ: = CreateComObject (CLSID_SHELLLINK) ؛
myLink: = aobj كما ishelllink ؛
mypfile: = aobj كـ ipersistfile ؛
getCurrentDirectory (sizeof (curdir) ، curdir) ؛
WorkDir: = Curdir ؛
proname: = trim (workdir)+'/'+proname ؛
مع MyLink تفعل
يبدأ
setShowCmd (sw_normal) ؛
setArguments ('') ؛
setDescription (PCHAR (الوصف)) ؛
setPath (pchar (proname)) ؛
setWorkingDirectory (PCHAR (WorkDir)) ؛
نهاية؛
Createdir (extractFilePath (destname)) ؛
wfilename: = اسم DestName ؛
mypfile.save (pwchar (wfilename) ، false) ؛
نهاية؛
// احصل على المسار إلى مجموعة البدء من برنامج start-> program->
وظيفة tform1.getSpecialder: String ؛ // Get Starup Floder
var
PIDL: PiteMidList ؛
مقبض: ثاندل.
شركات: tcomponent ؛
Linkdir: سلسلة ؛
يبدأ
النتيجة: = '' ؛
Comp: = Self ؛ // Self.Owner ؛
مقبض: = (comp as tform) .handle ؛
إذا نجحت (shgetspecialderderlocation (مقبض ، CSIDL_COMMON_STARTUP ، PIDL)) ثم يمكن أيضًا استخدام مسارات خاصة أخرى CSIDL_COMMON أو فقط تحقق من ذلك في Delphi
يبدأ
setLength (LinkDir ، max_path) ؛
ShgetPathfromidList (PIDL ، PCHAR (LinkDir)) ؛
SetLength (Linkdir ، Strlen (PCHAR (LinkDir))) ؛
النتيجة: = linkdir+'/' ؛
نهاية؛
نهاية؛
// بعض المحتوى يستعير من محتوى BBS Monopoly