Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Операционные системы > Windows
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 17.11.2020, 12:22   #1
mcontrol
Новичок
Джуниор
 
Регистрация: 17.11.2020
Сообщений: 1
По умолчанию Как создать 1000 URL ярлыков?

Подскажите, знающие люди, каким образом можно создать n ярлыков на ссылки типа https://site.com/n

То есть ярлык с именем 1 ведёт на страницу https://site.com/1
ярлык с именем 2 ведёт на страницу https://site.com/2
и т. д.

Помнится, делал автоматически через bat'ник большое число папок по заданным именам, уверен, что и с ярлыками можно сделать нечто подобное.

Открыл в Notepad++ созданные вручную ярлыки, там содержание вида
Код:
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,11
[InternetShortcut]
IDList=
URL=https://site.com/456
Меняется только URL-адрес
mcontrol вне форума Ответить с цитированием
Старый 18.11.2020, 19:20   #2
JEHuH
Новичок
Джуниор
 
Регистрация: 18.11.2020
Сообщений: 4
По умолчанию

Код:
////////////////////////////////////////////////////////////////////////////////
// Create_Link.cpp
//
// Для работы программы
// указать следующие параметры:
//
// App.exe - это имя программы
// URL		- http://programmersforum.ru
// Count	- число (количество линков)
// Out-dir	- каталог в котором будут
//			находиться созданные ярлыки
//			Например: "C:\Link_Out"
//			если указать: "Desktop"
//			линки располажатся на
//			"Рабочем столе"
//
// made by JEHuH
//

#include <stdio.h>
#include <shlobj.h>
#include <windows.h>

TCHAR GAppname[]=
TEXT("Made by Jenin (c)2020");

void mb(TCHAR* x){
MessageBox(GetActiveWindow(),
x,GAppname,
MB_OK|MB_ICONINFORMATION|
MB_SETFOREGROUND|MB_SYSTEMMODAL);}

void warn(TCHAR* x){
MessageBox(GetActiveWindow(),
x,GAppname,
MB_OK|MB_ICONWARNING|
MB_SETFOREGROUND|MB_SYSTEMMODAL);}

//
// appBaseDir
//
LPCTSTR appBaseDir(LPCTSTR Filename)
{
	// Input: "C:\\Folder\\MyApp1.exe"
	// Result: "C:\\Folder\\"
	// ====================

	static TCHAR Result[MAX_PATH];

	lstrcpy(Result,Filename);

	int i;

	for(i=lstrlen(Result)-1;i>0;--i)
	{
		if('\\'==Result[i-1] ||
		'/'==Result[i-1])
		{
			--i;
			break;
		}
	}
	Result[i]=0;

	return Result;
}

//
// CreateLink
//
BOOL CreateLink(
	LPCTSTR Exec,
	LPCTSTR Linkname,
	LPCTSTR Workdir,
	LPCTSTR Description)
{
	// Return TRUE if
	// create ".lnk"
	// ==============

	HRESULT Result=CoInitialize(NULL);
	if(FAILED(Result))
		return FALSE;

	IShellLink* psl=NULL;
	Result=CoCreateInstance(
	CLSID_ShellLink,
	NULL,
	CLSCTX_INPROC_SERVER,
	IID_IShellLink,
	(LPVOID*)&psl);

	if((S_OK!=Result) &&
	FAILED(Result))
	{
		return FALSE;
	}

	IPersistFile* ppf;
	psl->SetPath(Exec);
	psl->SetDescription(Description);
	psl->SetWorkingDirectory(Workdir);
		
	Result=psl->QueryInterface(
	IID_IPersistFile,
	(LPVOID*)&ppf);
	if((S_OK!=Result) &&
	FAILED(Result))
	{
		psl->Release();
		CoUninitialize();
		return FALSE;
	}

#ifdef UNICODE

	Result=ppf->Save(Linkname,
		TRUE);
#else

	// Convert to unicode
	// ==================

	int nLen=lstrlen(Linkname);
	WCHAR* wLinkname=
		new WCHAR[sizeof(WCHAR)*
		nLen+1];

	MultiByteToWideChar(
	CP_ACP,
	0,
	Linkname,
	-1,
	wLinkname,
	nLen);

	// Empty "\0"
	// ==========

	wLinkname[nLen]=0;

	Result=ppf->Save(wLinkname,
		TRUE);
#endif

	if((S_OK!=Result) &&
	FAILED(Result))
	{
		psl->Release();
		CoUninitialize();
		return FALSE;
	}

	ppf->Release();
	psl->Release();
	CoUninitialize();
	return TRUE;
}

//
// Entry point
//
void main(int argc, char* argv[])
{
	system("mode 60,8");

	if(argc<=3)
	{
		puts("\
Usage is: App URL-pattern  Count-number  Out-dir");

		system("pause>nul");
		exit(1);
	}

	// Http://www.myurl.com
	// ==============

	TCHAR Url[MAX_PATH];
	lstrcpy(Url,argv[1]);

	// Num count *.lnk
	// ==========

	int nCount=atoi(argv[2]);

	// C:\\Link_Out
	// =============

	TCHAR Link_Dir[MAX_PATH];
	lstrcpy(Link_Dir,argv[3]);

	if('\n'==Link_Dir[lstrlen(Link_Dir)-1])
		Link_Dir[lstrlen(Link_Dir)-1]='\0';

	TCHAR* Desktop=TEXT("Desktop");

	if(0==lstrcmpi(Desktop,Link_Dir))
	{
		TCHAR Userprofile[MAX_PATH];

		if(!ExpandEnvironmentStrings(
			TEXT("%USERPROFILE%"),
			Userprofile,
			MAX_PATH-1))
		{
			warn(
			TEXT("Failed know profile"));
			exit(1);
		}

		/*
		TCHAR Buffer[1024];
		wsprintf(Buffer,
			TEXT("Userprofile:\n\"%s\""),
			Userprofile);
		mb(Buffer);*/

		wsprintf(Link_Dir,
		TEXT("%s\\Desktop\\"),
		Userprofile,
		Desktop);
	}


	if(nCount>99)
		puts(TEXT("Please wait..."));


	TCHAR Link_Target[MAX_PATH];
	TCHAR Link_Filename[MAX_PATH];

	for(int i=0;i!=nCount;++i)
	{
		wsprintf(
			Link_Target,
			TEXT("%s/%d.htm"),
			Url,
			i+1);

		wsprintf(
			Link_Filename,
			TEXT("%s\\%d.lnk"),
			Link_Dir,
			i+1);
		
		CreateLink(
			Link_Target,
			Link_Filename,
			appBaseDir(Link_Filename),
			TEXT("Description"));
	}

	puts(TEXT("Done"));
}

////////////////////////////////////////////////////////////////////////////////
// <<eof>> Create_Link.cpp
////////////////////////////////////////////////////////////////////////////////
В приложенном пакете имеется собранная программа,
но - она будет работать только для Windows XP, Seven,
чтобы заработало в следующих версиях, нужно собирать
монстрообразными "студиями", а-я использую инструменты
двадцатипятилетней выдержки - меня устраивает!

Наслаждайтесь!
Вложения
Тип файла: zip Create_Link.zip (37.7 Кб, 0 просмотров)
JEHuH вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск ярлыков на рабочем столе и на панели задач ,добавление кода в свойства ярлыков и изменение. ChevChelos Фриланс 1 11.03.2014 15:54
Дана матрица размерностью 4х5. Элементы матрицы определяются случайным образом в диапазоне -1000.1000 vlad1kT Помощь студентам 0 16.06.2013 09:51
Как получить список ярлыков рабочего стола? lollollollol Win Api 3 05.06.2013 13:18
LineTo рисование на экране - lineto(0,1000,1000) - LineTo(DC, 1000, 1000); Crivel Общие вопросы Delphi 8 23.05.2009 21:30
Можно ли как то узнать координаты ярлыков и папок и программно перемещать их? [Smarik] Win Api 3 21.12.2008 12:50


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS