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

» C++ WinAPI

Автор: akaGM
Дата сообщения: 28.11.2008 19:46
stupid_user
по-моему, атрибутами FILE_FLAG_SEQUENTIAL_SCAN и FILE_FLAG_RANDOM_ACCESS

---

Abs62
да?

stupid_user
тогда я неправ и это с буферизацией i/o связано...
Автор: Abs62
Дата сообщения: 28.11.2008 20:00
akaGM
Именно так.

Цитата:
FILE_FLAG_RANDOM_ACCESS
Indicates that the file is accessed randomly. The system can use this as a hint to optimize file caching.

FILE_FLAG_SEQUENTIAL_SCAN
Indicates that the file is to be accessed sequentially from beginning to end. The system can use this as a hint to optimize file caching. If an application moves the file pointer for random access, optimum caching may not occur; however, correct operation is still guaranteed.
Автор: akaGM
Дата сообщения: 28.11.2008 20:06
Abs62
ок

stupid_user
можно подумать, что дельфийская assignfile() не на WinAPI основана...
чем она тебе не угодила?
Автор: stupid_user
Дата сообщения: 28.11.2008 20:16
akaGM
пишу библиотеку для c++ приложения. есть несколько функций для файловой системы, с использованием Handle файла, seek, потоки и т.п.
AssignFile не поможет. Сишное приложение отправляет в библиотеку режим открытия файла (rt, rb, wb, ...) и ждет результат Handle файла. В дельфийских функциях я не нашел аналога этим режимам (rt, rb, ...). Думал, что на АПИ уж точно есть. ошибался
Автор: akaGM
Дата сообщения: 28.11.2008 20:29
stupid_user

Цитата:
пишу библиотеку для c++ приложения
Сишное приложение

так какое всё же?

Цитата:
В дельфийских функциях я не нашел аналога этим режимам (rt, rb, ...)

Код: var
ft: text;
fb: file of integer;
i: integer = 14;
begin
assignfile(ft, '1.t');
assignfile(fb, '1.b');
rewrite(ft); // wt
//reset(ft); // rt
rewrite(fb); // wb
//reset(fb); // rb
write(ft, 'я типа текст'#13#10'да ещё и с числом...', i);
write(fb, i);
closefile(ft);
closefile(fb);
end.
Автор: Abs62
Дата сообщения: 28.11.2008 20:44
stupid_user
fopen возвращает не хэндл, она возвращает *FILE - указатель на поток.
И даже хэндл файла в CRT, с которым работают сишные функции - это не то же самое, что и хэндл файла в ОС, возвращаемый CreateFile. Это индекс структуры в массиве, одним из полей которой является хэндл ОС. Подозреваю, что проще будет изучить C/C++ и писать библиотеку на нём, чем эмулировать CRT на Дельфи.

И вообще, открывать файл функциями CRT в DLL, а работать с ним в основной программе - плохая идея. Легко нарваться на разные CRT в DLL и программе и получить access violation.
Автор: akaGM
Дата сообщения: 28.11.2008 20:49
stupid_user
ещё как вариает, в С-части использовать createfile() или _lopen и тд, т.е. виндовутые версии, которые (естественно) присутствуют и в дельфях...
зачем гонять указатели на потоки меж библиотеками? что, открывается в одном месте, а пишется в другом?
тут уж встаёт вопрос об архитектуре программы...

и ваще, весь ввод/вывод надо делать в одном месте однообразно...
безобразно -- оно само получится...
Автор: Alamer
Дата сообщения: 02.12.2008 07:25
Здравствуйте.
Пишу небольшую программу которая следит за активностью приложений и регулирует скорость utorrentа.
Пока что просто отслеживаю наличие процесса в памяти, но хотелось бы следить за его сетевой активностью. Тоесть шлет ли он пакеты.
Подскажите пожалуйста через что это лучше сделать.

Заранее спасибо

Так нашел AllocateAndGetTcpExTableFromStack.
Вытаскивает список открытых портов и пиды процессов.
единственное я не силен в сетях какие типы портов мне нужны

Цитата:

MIB_TCP_STATE_CLOSED: Result := 'CLOSED';
MIB_TCP_STATE_LISTEN: Result := 'LISTEN';
MIB_TCP_STATE_SYN_SENT: Result := 'SYN SENT';
MIB_TCP_STATE_SYN_RCVD: Result := 'SYN RECEIVED';
MIB_TCP_STATE_ESTAB: Result := 'ESTABLISHED';
MIB_TCP_STATE_FIN_WAIT1: Result := 'FIN WAIT 1';
MIB_TCP_STATE_FIN_WAIT2: Result := 'FIN WAIT 2';
MIB_TCP_STATE_CLOSE_WAIT: Result := 'CLOSE WAIT';
MIB_TCP_STATE_CLOSING: Result := 'CLOSING';
MIB_TCP_STATE_LAST_ACK: Result := 'LAST ACK';
MIB_TCP_STATE_TIME_WAIT: Result := 'TIME WAIT';
MIB_TCP_STATE_DELETE_TCB: Result := 'DELETE TCB';


Если приложение принимает данные какие у него типы портов открыты?
Автор: koderr
Дата сообщения: 08.12.2008 20:09
Здравствуйте.
Столкнулся с незначительной, казалось бы, проблемой, которая поставила меня в тупик.

Написал приложение, использующее ComboBox. На Windows XP оно прекрасно работает. Попробовал запустить на Win2k SP4 - ComboBox не раскрывается, причем сообщения, посылаемые контролу, возвращают success. Попробовал на Win98SE - то же самое.

[more=Код]
Код: #include <windows.h>
#include <commctrl.h>

#define IDD_DLG1001 11
#define IDC_COMBOBOX1001 1001

BOOL CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CLOSE:
        {
            EndDialog(hWnd, 0);
            break;
        }
    case WM_INITDIALOG:
        {
            LPSTR lpszStrings[] =
            {
                "Blah",
                "Muahaha",
                "Mew",
                NULL
            };
            
            int c = 0;
            
            while(*(lpszStrings + sizeof(LPSTR)*c))
            {
                SendDlgItemMessage(hWnd, IDC_COMBOBOX1001, CB_ADDSTRING, 0, *(lpszStrings + sizeof(LPSTR)*c));
                c++;
            }
            return 1;
        }
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    InitCommonControls();
    DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DLG1001), NULL, MainWndProc, 0);
    return 0;
}
Автор: SuperMegaMozg
Дата сообщения: 25.02.2009 23:54
Здравствуйте.
Хотелось бы узнать -- каким образом можно получить информацию о состоянии жесткого диска (его температуру в частности)
Спасибо за внимание.
Автор: ShIvADeSt
Дата сообщения: 26.02.2009 01:03
SuperMegaMozg

Цитата:
Хотелось бы узнать -- каким образом можно получить информацию о состоянии жесткого диска (его температуру в частности)
Спасибо за внимание.

Чтение данных из SMART диска. Инфы в инете валом.
Автор: SuperMegaMozg
Дата сообщения: 26.02.2009 08:56
дело в том что мне из C++ необходимо прочитать эти самые данные из SMART диска -- как это сделать в Интернете я не нашел -- лишь общие обзоры технологии SMART. буду благодарен за простенький пример.
Автор: ShIvADeSt
Дата сообщения: 26.02.2009 10:07
SuperMegaMozg
Google рулит
http://www.rsdn.ru/article/delphi/SMART.xml
Там дельфи - но голимое АПИ, так что разбирайся.
Автор: SuperMegaMozg
Дата сообщения: 26.02.2009 10:42
Спасибо огромное, я просто на С++ зациклился))) -- даже не сообразил поискать на других языках
Автор: Kakaman
Дата сообщения: 27.03.2009 21:15
Здравствуйте уважаемые однофорумчане. Столкнулся с проблеммой никак не могу решить.
Задача состоит в следующем: нужно запускать чужие, непроверенные приложения на компе.Естественно не хочется что бы они что-нибудь попортили. Надо строить "песочницу". Типа контейнер куда их запихнуть что бы они там сами с собой выполнялись=)
Решил сначала разобраться с winapi job( задания). Их можно ограничивать и в них помещать процесс. Но функционала job'ов мне не хватает. Либо я туплю.
С job'ами все ясно когда надо ограничить время выполнения, память, другие системные ресурсы. Запретить, например, обращаться к "внешним"( т.е. не из песочницы) процессам или писать в буфер обмена. Но запретить создавать дочерние процессы не вышло.
Хотелось бы "запереть" процесс в одной папке. Что бы он не мог ни создавать ни читать файлы из других директорий и тем более диска с:\. Запретить ему выход в интернет и доступ к реестру. И вообще ко всему.
Заранее благодарен.
Может кто-нибудь строил на c# такие "песочницы"?
Автор: Abs62
Дата сообщения: 27.03.2009 22:07
Kakaman
А чем готовые решения вроде VMWare или VirtualBox не устраивают?
Автор: Alamer
Дата сообщения: 27.04.2009 13:35
Помогие пожалуйста.
Мне необходимо считывать в своей программе температуру процессора.
Причем довольно часто.
Пока что использую стороннюю программу и считываю с ее окна через винапи показания.

Пробовал считывать через WMI, но почему то на моей машине даже в консоли wmic TEMPERATURE не выдает значений. Может я как то не так считываю с него данные. Перепробовал все поля ничего похожего на температуру не нашел.

И есть ли какие-либо консольные утилиты,с которых было бы удобнее считывать температуру в мою программу (например перенаправлять вывод в файл и его парсить).
В Linux через acpi эти данные легко получаются
Автор: ShIvADeSt
Дата сообщения: 28.04.2009 02:03
Используй Еверест например, и пусть он пишет данные о температуре в реестр (есть такая функция). А ты читай реестр.
Автор: Alamer
Дата сообщения: 29.04.2009 07:48
ЭВерест слишком тяжелый, сейчас через CoreTemp делаю. Но там приходиться через gettext вытаскивать
Автор: Alexikit
Дата сообщения: 29.04.2009 14:51
Здравствуйте!
Мне посоветовали обратиться к вам, хотя программа пишется на фортране.
Проблема в создании диалога, диалог модальный.
Как работает:
открываю диалог, нажимаю кнопку - открывается второй диалог; на экране два диалога
хочу:
открываю диалог, нажимаю кнопку - открывается второй диалог, а первый закрывается при этом при нажатии на ОК все диалоги закрылись, при нажатии Отмена второй закрылся, а первый открылся.
Проблема
когда я пытаюсь закрыть первый диалог и открыть второй, первый закрывается, а второй открывается не в том окне, где программа, а делает себе отдельное окно, что очень плохо, т.к. есть случаии когда необходимо выдать предупреждение, так вот при этом окно со вторым диалогом сворачивается.
Заранее спасибо.
Автор: Abs62
Дата сообщения: 29.04.2009 18:05
Alexikit
Зачем закрывать первый диалог, если его можно просто скрыть? А когда второй диалог отработает, в обработчике первого проверить код возврата и в зависимости от него либо завершить первый диалог, либо снова показать его.
Автор: Alexikit
Дата сообщения: 30.04.2009 07:38
Abs62
Спасибо, просто там нет команды скрыть, есть закрыть и выгрузить из памяти.
Но вроде мне подсказали ответ, спасибо.
Автор: Maks150988
Дата сообщения: 14.06.2009 19:00
Здравствуйте. Делаю программу на апи в Делфи, проверяю на системе Windows XP. Для совместимости попутно проверяю на Windows 2000, так как есть работа с Common контролами и мало ли чего не так, сами понимаете надо подстраховаться. =) Так вот запустил я свою программу на 2000 системе и... интерфейс как у 16-разрядных исполняемых файлов - может представляете как выглядит окно и контролы. =) Начал смотреть код, где-же ошибся. Сначала подумал что может мол некорректно заполнил структуру InitCommonControlsEx, но все нормально, да и тем более если вообще не указать эту функцию то диалог с common контролом и не появится вообще. Методом перебора и закомментироания рабочих участков выяснил что все дело в функции LoadLibraryEx. Мне просто нужно загрузить просто реурсы из библиотеки. Код такой:

LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);

Почему интефрейс не современный? Все отлично только если грузить библиотеку через LoadLibrary. Можете кто знает...
Автор: Grey2009
Дата сообщения: 11.07.2009 11:37
Добрый день. Подскажите пожалуйста, как получить информацию о версии шейдеров ? (нужно для Inno Setup)
Автор: V0lt
Дата сообщения: 20.08.2009 17:04
Как узнать может ли текущий юзер в указанной папке создавать файлы и папки? Т.е. есть ли у него доступ на запись и изменение?
Автор: Hiken
Дата сообщения: 20.08.2009 19:47
V0lt
Authorization Functions
Автор: V0lt
Дата сообщения: 21.08.2009 09:48
Hiken
а примерчик по-проще?
Автор: Garrett
Дата сообщения: 21.08.2009 10:43
V0lt
Ну так создай там какой-нибудь временный файл. Если создастся, то всё ОК, если не создастся, то не разрешено.
Автор: dmka
Дата сообщения: 21.08.2009 11:16
V0lt
правильнее начать собственно запись или изменение и обработать ошибку, если таковая возникнет.

Garrett
+1. выглядит конечно криво, но реально оказывается самое простое и, главное, правильно работающее решение.
Автор: V0lt
Дата сообщения: 21.08.2009 11:46
Garrett
dmka
А если я его удалить потом не смогу? Существует же отдельное право на удаление.
Хотелось бы по уму сделать.
В принципе вот тут пример есть - http://msdn.microsoft.com/en-us/library/aa379283(VS.85).aspx
Осталось понять принцип, вытащить необходимое и умудриться засунуть в код инсталлятора на inno setup.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

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


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