SHObjectProperties Example
1.
Start a new application.
2.
Insert in your source code:
typedef void (__stdcall *pSHObjectProperties)(HWND, UINT, LPCSTR,
LPCSTR);
HINSTANCE hInstance;
pSHObjectProperties SHObjectProperties;
3.
Edit the OnCreate event of your form:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
hInstance = LoadLibrary("SHELL32.DLL");
if(!hInstance)
{
ShowMessage("Error loading SHELL32.DLL\n"
"This application will be closed");
Application->Terminate();
}
SHObjectProperties = (pSHObjectProperties)
GetProcAddress(hInstance, (char *)178);
}
4.
Double-click the OnDestroy event:
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
FreeLibrary(hInstance);
}
5.
Add a Button. Edit its OnClick event:
#define OPF_PRINTERNAME 0x01
#define OPF_PATHNAME 0x02
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SHObjectProperties(Handle, OPF_PATHNAME,
"c:\\autoexec.bat", NULL);
}
Once the Button is clicked, the application should show the Properties dialog for autoexec.bat.
Вызов диалога "Свойства файла"
В инете нашел пример вызова диалога свойства файла. Все скопировал в новый проект, чтобы протестировать. Проект без проблем скомпилировался и запустился, но диалог не отображается. Вопрос: в чем ошибка?
Пример в чистом виде, как нашел, прилагаю.
Код:
Суть в том, что вызывается функция SHObjectProperties из shell32.dll.
Спасибо.
Цитата: Pelican
Привет всем!!!
В инете нашел пример вызова диалога свойства файла.
...
В инете нашел пример вызова диалога свойства файла.
...
Minimum operating systems Windows 2000?
Можно так:
::ShellExecute(NULL, "properties", szPathName, NULL, NULL, SW_SHOWNORMAL);
Цитата:
Minimum operating systems Windows 2000?
Я работаю под WinXP SP2.
Цитата:
Можно так:
::ShellExecute(NULL, "properties", szPathName, NULL, NULL, SW_SHOWNORMAL);
Пробовал, та же фигня. При отладке видно события в Event Log, но диалог не появляется.
Цитата: Pelican
Я работаю под WinXP SP2.
Пробовал, та же фигня. При отладке видно события в Event Log, но диалог не появляется.
Пробовал, та же фигня. При отладке видно события в Event Log, но диалог не появляется.
Код:
#include <shellapi.h>
...
typedef BOOL (WINAPI *SHOBJECTPROPERTIES)(
HWND hwnd, DWORD dwType, LPCWSTR lpObject, LPCWSTR lpPage);
#ifndef SHOP_FILEPATH
#define SHOP_FILEPATH 0x00000002
#endif
#define SHOP_EXPORT_ORDINAL 178
...
SHOBJECTPROPERTIES pSHObjectProperties=NULL;
pSHObjectProperties = (SHOBJECTPROPERTIES)::GetProcAddress(::LoadLibrary("shell32"), "SHObjectProperties");
/*if (!pSHObjectProperties)
{
pSHObjectProperties = (SHOBJECTPROPERTIES)::GetProcAddress(::LoadLibrary("shell32"), (LPCSTR)SHOP_EXPORT_ORDINAL);
}*/
if (pSHObjectProperties)
{
pSHObjectProperties(Handle, SHOP_FILEPATH, WideString("c:\\autoexec.bat"), 0);
}
...
typedef BOOL (WINAPI *SHOBJECTPROPERTIES)(
HWND hwnd, DWORD dwType, LPCWSTR lpObject, LPCWSTR lpPage);
#ifndef SHOP_FILEPATH
#define SHOP_FILEPATH 0x00000002
#endif
#define SHOP_EXPORT_ORDINAL 178
...
SHOBJECTPROPERTIES pSHObjectProperties=NULL;
pSHObjectProperties = (SHOBJECTPROPERTIES)::GetProcAddress(::LoadLibrary("shell32"), "SHObjectProperties");
/*if (!pSHObjectProperties)
{
pSHObjectProperties = (SHOBJECTPROPERTIES)::GetProcAddress(::LoadLibrary("shell32"), (LPCSTR)SHOP_EXPORT_ORDINAL);
}*/
if (pSHObjectProperties)
{
pSHObjectProperties(Handle, SHOP_FILEPATH, WideString("c:\\autoexec.bat"), 0);
}
как часы...
Цитата:
как часы...
Попробовал данный пример. Если запустить код как есть, то проект не скомпилируется. Я попробовал исправить WideString на PWideChar, исходя из ошибки, которая возникает. Скомпилировался... Запустился... Но...
Цитата:
Та же фигня
Не знаю почему так происходит... Что делать?
Цитата: Pelican
Попробовал данный пример. Если запустить код как есть, то проект не скомпилируется. Я попробовал исправить WideString на PWideChar, исходя из ошибки, которая возникает. Скомпилировался... Запустился... Но...
WideString("c:\\autoexec.bat").BSTR()
Цитата: Pelican
Не знаю почему так происходит... Что делать?
Ну ты уж попробуй догадаться сам, если не приводишь сообщение компиллятора:)