Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» C++ WinAPI

Автор: react
Дата сообщения: 05.11.2002 07:13
Привет всем !

Так как не нашел отдельной темы по проблемам с WinAPI, то решил открыть
таковую.

А теперь к самим вопросам:
1. Кто-нить знает как получить информацию о нынешней дате ?
2. Можно ли создать диалог выбора директории("Choose Directory") без
прохождения по всему диску и создания вручную дерева катадогов ?
Что-то похожее можно создать с помощью функции DlgDirList(), но мне
нужен не список а дерево каталогов.

Заранее спасибо за помощь !
Автор: f_serg
Дата сообщения: 05.11.2002 07:30
react

Цитата:
как получить информацию о нынешней дате ?

GetLocalTime(), GetSystemTime().
Автор: OldGopher
Дата сообщения: 05.11.2002 07:43
react
Касательно каталогов.

Никто никогда (в здравом уме) не проходит все дерево каталогов на всех дисках иначе как это действительно необходимо (при построении мгновенной картины дерева (например вариант Tree в FARе).

По мере надобности каждый (под)каталог раскрывается дальше. Так работают и FAR и просто выбор каталога в большинстве программ. Иначе просто будет глупость (местами) - дерево каталогов в некоторых системных зонах Win2000/XP переменно, и зависит от работы системного и интернетного кэша и т.п.

Есть ActiveX специально для выбора каталога...
Автор: Vid0
Дата сообщения: 07.11.2002 21:31
react
Ha MFC:

1.
CTime theTime = CTime::GetCurrentTime();
::AfxMessageBox(theTime.Format(_T("%H:%M:%S")), MB_OK);

2.
UINT BrowseDialog::DoModal()
{
UINT uReturn = IDCANCEL;
LPMALLOC pMalloc = NULL;

// Retrieve a pointer to the shell’s IMalloc interface.
if(::SHGetMalloc(&pMalloc) == NOERROR)
{
LPITEMIDLIST pItemIDList = NULL;

// Display the browse dialog box that enables the user to
// select a shell folder.
if((pItemIDList = ::SHBrowseForFolder(this)) != NULL)
{
// Converts an item identifier list to a file system path,
// this will be the path that the user has just selected.
if(::SHGetPathFromIDList(pItemIDList, m_szSelPath))
uReturn = IDOK;

pMalloc->Free(pItemIDList);
}
pMalloc->Release();
}

return uReturn;
}
А вооще - читай MSDN !!!
Автор: Guest
Дата сообщения: 08.11.2002 01:38
OldGopher

Цитата:
Есть ActiveX специально для выбора каталога...

Если можешь напиши поподробнее или дай ссылу где почитать...
Vid0

Цитата:
Ha MFC: ...

А на WinAPI

Неужели нет в WinAPI Tree-View диалога для просмотра дерева
директорий ??? Если кто может - подскажите как реализовать
дерево каталогов с помощью доступных функций WinAPI.

Заранее благодарен.

Автор: Vid0
Дата сообщения: 08.11.2002 15:47
Нужно WinAPI - посмотри в соурсах MFC.
А ::SHBrowseForFolder() - это што ? ЛинухAPI ?
Самому почитать описание лень ? MSDN неимеем ? Читать неумеем ?
Автор: react
Дата сообщения: 09.11.2002 06:21
Vid0

Цитата:
Самому почитать описание лень ? MSDN неимеем ? Читать неумеем ?

Вообще-то я искал в MSDN только ничего похожего на Directories
Tree-View я не нашел, а нашел только Directories List-View и
Directories Combobox-View... Так что ниче мне не лень - проблема
в том что я не могу найти где хоть что-то почитать по моему
вопросу...
Автор: tunik
Дата сообщения: 12.11.2002 10:00
Кто знает как отправлять и получать сообщения? Хочу написать прогу типа "Net send"
Автор: Fishbone
Дата сообщения: 12.11.2002 10:29
Вообще-то есть стандартная функция


Цитата:

Var
aDir : string;
begin
if edtSSHHome.Text <> ’’ then aDir := edtSSHHome.Text
else aDir := ’C:\’;
if SelectDirectory(aDir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then edtSSHHome.Text := aDir;

end;
Автор: OldGopher
Дата сообщения: 18.11.2002 13:08
Щас вот сижу и как чайник пялюсь в MSDN, а надо срочно!

Как блин в код на API (не MFC) втянуть ActiveX?

Как сделать все то, что в MFC делалось CWnd::CreateControl...
Вот блин влетел...
Автор: f_serg
Дата сообщения: 18.11.2002 15:25
OldGopher
Посмотри на FirstSteps.
Там девятая глава - создание ActiveX без MFC (с ATL).
Автор: OldGopher
Дата сообщения: 18.11.2002 20:49
f_serg
Создать ActiveX - это мы проходили.

Как блин втянуть его в обычную API аппликацию...

Впрочем, спасибо. Пора возвращаться к FirstSteps. Давно там не был...

Нашел все, что нужно. Пьяный был...

Спасибо f_serg
Автор: NSentinel
Дата сообщения: 19.11.2002 15:55
react
По поводу выбора каталогов Vid0 правильно рассказал
Если нужен чистый апи - то смотри описание SHBrowseForFolder, эта функция относится к Shell Functions

Вот пример для открытия выбора каталогов, начиная с текущего


Код:
#define STRICT
#include <windows.h>
#include <shlobj.h>
INT CALLBACK BrowseCallbackProc(HWND hwnd,
UINT uMsg,
LPARAM lp,
LPARAM pData)
{
TCHAR szDir[MAX_PATH]; switch(uMsg)
{
case BFFM_INITIALIZED:
if (GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR), szDir))
{
// WParam is TRUE since you are passing a path.
// It would be FALSE if you were passing a pidl.
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir);
}
break; case BFFM_SELCHANGED:
// Set the status window to the currently selected path.
if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir))
{
SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
}
break;
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
BROWSEINFO bi;
TCHAR szDir[MAX_PATH];
LPITEMIDLIST pidl;
LPMALLOC pMalloc; if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
ZeroMemory(&bi,sizeof(bi));
bi.hwndOwner = NULL;
bi.pszDisplayName = 0;
bi.pidlRoot = 0;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
bi.lpfn = BrowseCallbackProc; pidl = SHBrowseForFolder(&bi);
if (pidl)
{
if (SHGetPathFromIDList(pidl,szDir))
{
MessageBox(NULL,szDir,"Picked",MB_OK);
} // In C++: pMalloc->Free(pidl); pMalloc->Release();
pMalloc->lpVtbl->Free(pMalloc,pidl);
pMalloc->lpVtbl->Release(pMalloc);
}
}
return 0;
}
Автор: Signa
Дата сообщения: 20.11.2002 06:54
Вопрос: как функциями API получить список запущенных приложений\процессов? Как это делает "диспетчер задач"...
Автор: Wowik
Дата сообщения: 20.11.2002 12:53
Signa
BOOL WINAPI Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
BOOL WINAPI Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
Автор: NSentinel
Дата сообщения: 20.11.2002 15:39
Signa
Если подробнее про то, что рассказал Wowik то смотри MSDN

Там как раз описан ответ на твой вопрос

Автор: rbt
Дата сообщения: 21.11.2002 10:35
tunik

Цитата:

Кто знает как отправлять и получать сообщения? Хочу написать прогу типа "Net send"

http://comp-u.wp-club.net/writers.php?in=1&fname=wsoc1.tx

Автор: SergejKa
Дата сообщения: 23.11.2002 02:27

Цитата:
ничего похожего на Directories
пора привыкать к исконно русскому слову FOLDER
Автор: SergejKa
Дата сообщения: 25.11.2002 02:11
А вот вопрос знатокам NT платформы:

Как сделать ExitWindowsEx(1, 0), только ПОД ИНТЯМИ?
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
работает как по маслу в 95, 98, 98SE, а в ХРени не работает
Автор: NSentinel
Дата сообщения: 25.11.2002 03:03
SergejKa
Вот родной примерчик:


Код:
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
error("OpenProcessToken");

// Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

// Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS)
error("AdjustTokenPrivileges");

// Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
error("ExitWindowsEx");

Автор: SergejKa
Дата сообщения: 25.11.2002 06:11
NSentinel Дык... Почти то же самое, что и у меня, только на си... Не работает у меня это из ненавижуал васика...
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0) - просто пролетает мимо и всё тут


Добавлено
Всё, разобрался, всё работает

NSentinel, спасибо за помощь
Автор: NSentinel
Дата сообщения: 25.11.2002 16:14
SergejKa
На здоровье

Проблема была в том, что не скорректировал привилегии для процесса?
Автор: SergejKa
Дата сообщения: 26.11.2002 02:10
NSentinel да Ты знал!!!!! Так не честно!!!!!!!
Автор: react
Дата сообщения: 05.12.2002 23:37
Подскажите плиз можно ли какой-то Сишной функцией узнать номер
текущей недели в году ?
И еще, подскажите плиз как перенести директорию со всем ее
содержимым с одного диска на другой тоже с помощью Сишной
функции(можно под DOS или под Win32), а то MoveFile не хочет
переносить директории...

Заранее спасибо !
Автор: NSentinel
Дата сообщения: 06.12.2002 01:43
react

Цитата:
Сишной функцией узнать номер текущей недели в году

Конкретно такой функции я не припомню Так что скорее всего так: получаешь с помощью GetLocalTime() текущее время и преобразуешь его в номер недели... Нужен алгоритм как?


Цитата:
И еще, подскажите плиз как перенести директорию со всем ее
содержимым с одного диска на другой тоже с помощью Сишной
функции


Что ты подразумеваешь под Сишной функцией - использовать АПИ нельзя?

Если все же использовать API (Shell API), то все решается с помощью SHFileOperation. Все корректно пашет и юзается родной код системы.
Автор: react
Дата сообщения: 06.12.2002 07:43
NSentinel

Цитата:
Так что скорее всего так: получаешь с помощью GetLocalTime() текущее время и преобразуешь его в номер недели... Нужен алгоритм как?

Да, пожалуй нужен...

Цитата:
Что ты подразумеваешь под Сишной функцией - использовать АПИ нельзя?

Если все же использовать API (Shell API), то все решается с помощью SHFileOperation. Все корректно пашет и юзается родной код системы.

API использовать можно, так что за совет спасибо - буду
пробовать...
Автор: DV
Дата сообщения: 10.12.2002 22:12
Люди, помогите плиз... Я с API пока не работал. Подскажите, что нужно, чтоб в С++ вызывать APIшные функции, в частности нужна функция открытия файлов для чтения заданного каталога (FAT32), т.е. формат вызова функции, какие библиотеки подключать в #include ...? Буду рад, если дадите ссылочку на материал, где это подробно расписано... (Вообще нужно написать программу, к-я рекурсивно искала бы все файлы в заданном каталоге и всех подкаталогах...)
Автор: SergejKa
Дата сообщения: 11.12.2002 03:00
DV пора и мне на С++ переходить...

На ненавижуал Васике описание апишной функции чтения файла выглядит так:

Код:
Declare Function lopen& Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long)
Соответственно передаваемые значения:
lpPathName - имя открываемого файла
iReadWrite - комбинация констант указывающая в каком режиме открывать файл. Может принимать значения - READ, READ_WRITE, WRITE. + к этому можно описывать в этом же параметре режим совместного доступа к файлу - OF_SHARE_COMPAT, OF_SHARE_DENY_NONE, OF_SHARE_DENY_READ, OF_SHARE_DENY_WRITE, OF_SHARE_EXCLUSIVE.
Автор: amnick
Дата сообщения: 11.12.2002 20:50
DV
FindFirstFile - самая что ни на есть API функция:

The FindFirstFile function searches a directory for a file whose name matches the specified file name. FindFirstFile examines subdirectory names as well as file names.

To specify additional attributes to be used in the search, use the FindFirstFileEx function.

HANDLE FindFirstFile(
LPCTSTR lpFileName, // file name
LPWIN32_FIND_DATA lpFindFileData // data buffer
);
.......
Требования:
Windows NT/2000: Requires Windows NT 3.1 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.

Подробнее смотрите в MSDN.
Автор: DV
Дата сообщения: 13.12.2002 02:38
SergejKa
Фух... с поиском файла кое-как разобрался. Ищет, блин... аж душа радуется. Даже рекурсивно, во все подкаталоги рекурсивно заглядывает и ни одного файла не пропускает!!! Что-ж, дело за малым остаётся - считать содержимое файла в память и поискать там подстроку, а это дело техники!
Спасибо, больше не надо апишек - сыт ими по горло . То есть хватило мне и этих двух вполне...
Совет: переходи на С++ - обалденная штуковина, куча возможностей, только несколько корявая, но я уже привыкаю...

Добавлено
SergejKa
- зто я забыл подписаться на получение ответа! Спасибо ещё раз!amnick - тоже спасибо!!!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

Предыдущая тема: посоветуйте книги по SQL


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.