von Jim » 19.05.2023, 00:17
hi,
ich habe ChatGPT gefragt
zeige mir den api befehl wie man einen link unter "Schnellzugriff" anlegt in harbour programm sprache
und diese Antwort erhalten ( CODE für harbour)
Um einen Link unter "Schnellzugriff" in Windows programmatisch hinzuzufügen, müssen Sie systemeigene Windows-APIs oder Frameworks verwenden. In der Harbour-Programmiersprache können Sie das Windows Shell COM-Objekt verwenden, um den Link hinzuzufügen. Hier ist ein Beispielcode, der einen Link zum "Schnellzugriff" in Windows hinzufügt:
Code: Alles auswählen
#include "hbapi.h"
#include "hbapierr.h"
#include "hbapirdd.h"
#include "hbapiitm.h"
#include <windows.h>
#include <objbase.h>
#include <comdef.h>
#include <shobjidl.h>
#include <shlguid.h>
HB_FUNC(ADD_LINK_TO_QUICK_ACCESS)
{
LPCSTR path = hb_parc(1);
LPCSTR linkName = hb_parc(2);
HRESULT result;
CoInitialize(NULL);
IShellItem* item;
IShellItem* folder;
result = SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&item));
if (SUCCEEDED(result))
{
result = SHGetKnownFolderItem(FOLDERID_Links, KF_FLAG_CREATE, NULL, IID_PPV_ARGS(&folder));
if (SUCCEEDED(result))
{
result = folder->BindToHandler(NULL, BHID_SFUIObject, IID_PPV_ARGS(&folder));
if (SUCCEEDED(result))
{
IShellLink* link;
result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&link));
if (SUCCEEDED(result))
{
link->SetIDList(item);
link->SetDescription(linkName);
IPersistFile* file;
result = link->QueryInterface(IID_PPV_ARGS(&file));
if (SUCCEEDED(result))
{
WCHAR path[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path);
wcscat_s(path, MAX_PATH, L"\\Microsoft\\Windows\\Links\\");
wcscat_s(path, MAX_PATH, linkName);
wcscat_s(path, MAX_PATH, L".lnk");
result = file->Save(path, TRUE);
file->Release();
}
link->Release();
}
folder->Release();
}
item->Release();
}
}
CoUninitialize();
if (SUCCEEDED(result))
{
hb_retnl(1);
}
else
hi,
ich habe ChatGPT gefragt
[quote]zeige mir den api befehl wie man einen link unter "Schnellzugriff" anlegt in harbour programm sprache[/quote]
und diese Antwort erhalten ( CODE für harbour)
[quote]Um einen Link unter "Schnellzugriff" in Windows programmatisch hinzuzufügen, müssen Sie systemeigene Windows-APIs oder Frameworks verwenden. In der Harbour-Programmiersprache können Sie das Windows Shell COM-Objekt verwenden, um den Link hinzuzufügen. Hier ist ein Beispielcode, der einen Link zum "Schnellzugriff" in Windows hinzufügt:
[code]
#include "hbapi.h"
#include "hbapierr.h"
#include "hbapirdd.h"
#include "hbapiitm.h"
#include <windows.h>
#include <objbase.h>
#include <comdef.h>
#include <shobjidl.h>
#include <shlguid.h>
HB_FUNC(ADD_LINK_TO_QUICK_ACCESS)
{
LPCSTR path = hb_parc(1);
LPCSTR linkName = hb_parc(2);
HRESULT result;
CoInitialize(NULL);
IShellItem* item;
IShellItem* folder;
result = SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&item));
if (SUCCEEDED(result))
{
result = SHGetKnownFolderItem(FOLDERID_Links, KF_FLAG_CREATE, NULL, IID_PPV_ARGS(&folder));
if (SUCCEEDED(result))
{
result = folder->BindToHandler(NULL, BHID_SFUIObject, IID_PPV_ARGS(&folder));
if (SUCCEEDED(result))
{
IShellLink* link;
result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&link));
if (SUCCEEDED(result))
{
link->SetIDList(item);
link->SetDescription(linkName);
IPersistFile* file;
result = link->QueryInterface(IID_PPV_ARGS(&file));
if (SUCCEEDED(result))
{
WCHAR path[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path);
wcscat_s(path, MAX_PATH, L"\\Microsoft\\Windows\\Links\\");
wcscat_s(path, MAX_PATH, linkName);
wcscat_s(path, MAX_PATH, L".lnk");
result = file->Save(path, TRUE);
file->Release();
}
link->Release();
}
folder->Release();
}
item->Release();
}
}
CoUninitialize();
if (SUCCEEDED(result))
{
hb_retnl(1);
}
else
[/code][/quote]