Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Путь к файлу/кнопка обзор/browse

Страниц (1): [1]
 

1. grBIN - 08 Марта, 2018 - 16:03:08 - перейти к сообщению
Привет, в поиске не нашел, так что напишу тут.
Нужно вызвать окно, по типу как open, или browse или сохранить как.
Грубо говоря что бы дать пользователю самому показать где находиться файл, а потом этот путь сохранить.
У нас в функциях такого нет, вроде как должна работать функция GetOpenFileName() из COMDLG32.DLL

В интернетах нашел, что нужно еще вроде как правильно заполнить структуру

Спойлер (Отобразить)


И у нас на форуме нашел в теме про external
Спойлер (Отобразить)


А теперь вопрос, что это вообще такое, и как это правильно готовить :S
2. Zireael - 08 Марта, 2018 - 16:51:07 - перейти к сообщению
Вроде работает.
CODE:
external(VOID, "GetOpenFileName", "GetOpenFileNameA", "COMDLG32.DLL");

char b[512];
b[0]=formatic(0);

char a[76];
for (int n=0; n<76; n++)a[n]=0;

writeaddress(76, address(#a[0]));
writeaddress(0, address(#a[4]));
writeaddress(0, address(#a[8]));
writeaddress(0, address(#a[12]));
writeaddress(0, address(#a[16]));
writeaddress(1634928, address(#a[20]));
writeaddress(1000, address(#a[24]));
writeaddress(address(#b[0]), address(#a[28]));
writeaddress(512, address(#a[32]));
writeaddress(0, address(#a[36]));
writeaddress(6148, address(#a[40]));

GetOpenFileName(address(#a[0]));
messagebox(format(#b[0]));
3. grBIN - 08 Марта, 2018 - 17:24:54 - перейти к сообщению
Спойлер (Отобразить)


Я правильно понял, вы просто подставили структуру из справки?
Получается она одна и та же для всех функций где требуется?
Что если мне понадобиться вызвать несколько подобных функций из winapi в которых нужно структуру так описывать? Я могу просто закинуть это таким образом?
CODE:

#external первой функции
#external второй функции

вызов функции 1;
вызов функции 2;

функция первая
{
Ее структура;
Вызов функции;
}


Функция вторая
{
Та же структура;
вызов второй функции;
}

Как то странно это -___-
P.S. Матчасти не хватает -______-
4. Kibor - 08 Марта, 2018 - 17:35:42 - перейти к сообщению
 grBIN пишет:
сохранить как


CODE:
external(VOID, "GetSaveFile", "GetSaveFileNameA", "COMDLG32.DLL");
char b[100];
strcpy(#b[0], "файл");
char f[256];
for (int n=0; n<256; n++)f[n]=0;
char a[77];
for (n=0; n<77; n++)a[n]=0;

writeaddress(76, address(#a[0]));
writeaddress(0, address(#a[4]));
writeaddress(0, address(#a[8]));
writeaddress(address(#b[0]), address(#a[12]));
writeaddress(0, address(#a[16]));
writeaddress(1634928, address(#a[20]));
writeaddress(1000, address(#a[24]));
writeaddress(0, address(#a[28]));


writeaddress(0, address(#a[32]));
writeaddress(address(#f[0]), address(#a[36]));
writeaddress(6148, address(#a[40]));

GetSaveFile(address(#a[0]));
messagebox (format(#f[0]));


Для того что бы заполнять структуру таким образом надо знать что за чем идет (я имею ввиду в байтах) и сколько каждый элемент структуры занимает байт.
Ориентироваться надо не на пример
 grBIN пишет:
OPENFILENAMEA ofn;
char filename[256]={0};

ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd_; // не обязательно
ofn.lpstrFilter = "Bitmap Files (*.bmp)\0*.bmp\0All Files (*.*\0*.*\0\0";
ofn.lpstrFile = filename;
ofn.nMaxFile = 256;
ofn.lpstrTitle = "Browse";
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
GetOpenFileNameA(&ofn);
std::cout << "\nоткрытый файл=" << filename;


а на такого вида примеры

CODE:
typedef struct tagOFN {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME;

Powered by ExBB FM 1.0 Final