Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Без описания
grBIN
Отправлено: 09 Марта, 2018 - 00:03:08
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 41
Дата рег-ции: Нояб. 2017  
Откуда: Псков
Репутация: 2




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

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

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


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


А теперь вопрос, что это вообще такое, и как это правильно готовить :S
 
 Top
Zireael
Отправлено: 09 Марта, 2018 - 00:51:07
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4447
Дата рег-ции: Нояб. 2017  
Репутация: 585




Вроде работает.
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]));
 
 Top
grBIN
Отправлено: 09 Марта, 2018 - 01:24:54
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 41
Дата рег-ции: Нояб. 2017  
Откуда: Псков
Репутация: 2




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


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

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

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

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


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

Как то странно это -___-
P.S. Матчасти не хватает -______-
 
 Top
Kibor
Отправлено: 09 Марта, 2018 - 01:35:42
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8191
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 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;
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by