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

» C++ WinAPI

Автор: Cyril Konst
Дата сообщения: 13.05.2008 13:31
RedPromo
Да, Вы правы. Это должен быть сервис, постоянно работающий и ловящий моменты создания принтера. Ибо юзер может логиниться в разное время. А право доступа нужно давать для групппы "Пользователи удалённого рабочего стола" уже после того как принтер будет создан системой.
Автор: RedPromo
Дата сообщения: 13.05.2008 15:14
Cyril Konst
Вобще и мне интересна тема сервиса под терминальник нужно самому раздавать некоторые ограничения но не на принтер.
Автор: Cyril Konst
Дата сообщения: 13.05.2008 17:47
RedPromo
Есть такая штука - SetACL с исходниками http://setacl.sourceforge.net/. Она как раз позволяет раздавать права на всё, что угодно
Автор: RedPromo
Дата сообщения: 13.05.2008 20:01
Cyril Konst
Интересный ocx только жаль что без исходников.
Автор: f_serg
Дата сообщения: 15.05.2008 09:25
RedPromo

Цитата:
жаль что без исходников.

На SourceForge без исходников? Издеваешься?
http://sourceforge.net/project/showfiles.php?group_id=69165&package_id=275197
Автор: Jokerjar79
Дата сообщения: 17.05.2008 18:15
После вызова функции DragAcceptFiles определенная форма/элемент начинает обрабатывать перетягиваемые файлы. При "отпускании" файла генерируется сообщение WM_DROPFILES. Мне нужно определить, что курсор с файлом находится над моим элементом, то есть до того как кнопка мыши отпущена. Знаю, что это возможно, но незнаю как реализовано. Возможно, нужно обрабатывать WM_MOUSEMOVE. Но тогда как узнать что курсор не простой, а перетягивающий файл? Кто-нибудь знает как это делается?
Автор: Blind
Дата сообщения: 29.05.2008 09:52
Не сочтите за оффтоп
Залейте, пожалуйста, куда-нибудь (кроме рапиды) файлик shobjidl.h

--

снято
Автор: AnGo
Дата сообщения: 30.05.2008 08:35
Привет, о всезнающие!
Необходимо реализовать диалог выбора каталога с отображением, в том числе, и ярлыков, указывающих на каталоги.
Стандартные действия с использованием функций типа:
SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, &PIDL);
к успеху не привели.
Можно отобразить все, но ярлычки для каталогов не отображаются.
Как бы это реализовать?
Автор: Blind
Дата сообщения: 30.05.2008 09:45
AnGo
Думается, что ярлык - это файл. Если использовать функцию SHBrowseForFolder, с флагом BIF_BROWSEINCLUDEFILES, то ярлыки отображаются. В мсдн'е есть пример как получить путь из ярлыка.
Автор: AnGo
Дата сообщения: 31.05.2008 19:14
Blind
Да этот способ я знаю. Мне хотелось бы, чтобы отображались каталоги и ярлыки, указывающие на них. Думал может кто подскажет путь как это сделать.
В диалоге должен быть выбор на уровне не ниже каталога, файлы мне совсем ни к чему
Реализация не обязательно через SHBrowseForFolder.
Автор: Blind
Дата сообщения: 02.06.2008 06:36

Цитата:
В диалоге должен быть выбор на уровне не ниже каталога, файлы мне совсем ни к чему

В той же SHBrowseForFolder можно использовать свою callback-функцию и в ней реализовать фильтр

P.S. Может, вот это окажется полезным: hxxp://msdn.microsoft.com/en-us/magazine/cc163789.aspx
Автор: Victor_Dobrov
Дата сообщения: 02.06.2008 13:40
Как получить через WinAPI проценты загрузки системы? (как в Диспетчере задач: Быстродействие: Загрузка ЦП)
Автор: AnGo
Дата сообщения: 02.06.2008 14:39
Blind
Спасибо за ссылку. Поковыряем.
Автор: Lyrik
Дата сообщения: 02.06.2008 20:12
Victor_Dobrov
Смотря какой Виндовс: для ХР и выше юзай GetSystemTimes, если 2к - юзай ZwQuerySystemInformation (из разряда недокументированных)
Автор: Victor_Dobrov
Дата сообщения: 04.06.2008 01:42
Lyrik, GetSystemTimes выдает время работы, а QuerySystemInformation недокументирован.

Нашёл на страничке tripsin: [more=Получение списка процессов с помощью Performance Data Helper.]
unit Sample3;
interface
uses Windows, Classes, SysUtils;
const
// Уровни детализации
PERF_DETAIL_NOVICE = 100; // Новичок
PERF_DETAIL_ADVANCED = 200; // Продвинутый
PERF_DETAIL_EXPERT = 300; // Эксперт
PERF_DETAIL_WIZARD = 400; // Максимальный

PDH_MORE_DATA = -2147481646; //Все данные не помещаются в
предоставленный буфер

function FillProcessesList(var slProcesses: TStringList): Boolean;
implementation
function PdhEnumObjectItems(szDataSource: PChar;
szMachineName: PChar;
szObjectName: PChar;
mszCounterList: PChar;
pcchCounterListLength: PDWORD;
mszInstanceList: PChar;
pcchInstanceListLength: PDWORD;
dwDetailLevel: DWORD;
dwFlags: DWORD
): LongInt; stdcall; external 'PDH.DLL'
name 'PdhEnumObjectItemsA';
function FillProcessesList(var slProcesses: TStringList): Boolean;
var
pdhStatus: LongInt; // Возвращаемое значение PDH-функций
sObjectName: array [0..7] of Char; // Буфер для имени объекта "Process"
pCounterList: PAnsiChar; // Буфер для списка счетчиков
CounterListLength: DWORD; // Длина буфера для списка счетчиков
pInstanceList: PAnsiChar; // Буфер для списка экземпляров (процессов), после заполнения здесь будет цепочка нультерминальных строк и в конце общий #0.
InstanceListLength: DWORD;// Длина буфера для списка экземпляров
pThisInstance: PAnsiChar; // Указатель на имя текущего экземпляра
begin
Result := False;
sObjectName := 'Process'; // Собираемся получить список процессов
CounterListLength := 0; // Обнуляем длины буферов
InstanceListLength := 0;
// В первый вызов функции вместо буферов ставим nil и получаем длины буферов
pdhStatus := PdhEnumObjectItems(nil, // информация реального времени
nil, // локальная машина
@sObjectName, // Имя объекта
nil,
@CounterListLength, // передаем 0
nil,
@InstanceListLength,// передаем 0
PERF_DETAIL_WIZARD, //Максимальная детализация
0);
// PdhEnumObjectItems должна вернуть PDH_MORE_DATA, если нет - ошибка
if pdhStatus = PDH_MORE_DATA then
begin
// Резервируем память под буферы
GetMem(pCounterList, CounterListLength);
GetMem(pInstanceList, InstanceListLength);
try
// Вторым вызовом функции получаем информацию
pdhStatus := PdhEnumObjectItems(nil, // информация реального времени
nil, // локальная машина
@sObjectName, // Имя объекта
pCounterList, // Буфер счетчиков
@CounterListLength,
pInstanceList, // Буфер имен
@InstanceListLength,
PERF_DETAIL_WIZARD,
0);
// Проверяем успешность выполнения функции PdhEnumObjectItems
if pdhStatus = ERROR_SUCCESS then
begin
// Ставим указатель на начало буфера экземпляров
pThisInstance := pInstanceList;
// Крутим цикл пока не кончатся имена (в конце буфера стоит #0)
while pThisInstance^ <> #0 do
begin
// Пропускаем экземпляр с общими данными
if pThisInstance <> '_Total' then
// Добавляем имя процесса к списку
slProcesses.Add(pThisInstance);
// Перемещаем указатель на следующее имя
inc(pThisInstance, Length(pThisInstance)+1);
end;
// Фунция сработала успешно, если досюда дошло
Result := True;
end;
finally
// В любом случае освобождаем память буферов
FreeMem(pCounterList);
FreeMem(pInstanceList);
end;
end;
end;
end.
[/more]
Также на MSDN есть пример использования pdh.dll для получения значений производительности.

Но для меня это сложно, можете упростить код, чтобы выдавал только загрузку процессора?
Автор: Lyrik
Дата сообщения: 04.06.2008 16:47
Victor_Dobrov
То, что GetSystemTimes выдает время я был в курсе, но я думал возможно будет сделать так:
1. считать и запомнить время простоя процессора
2. заслипиться
3. считать и получить разницу этих времен
4. перевести эту разницу в %
но это у меня не получилось из-за того, что время, измеряемое в функции GetSystemTimes происходит через 100-наносекундные интервалы, а GetTickCount() - миллисекунды, т.о. время, измерянное через GetTickCount было всегда больше, чем разница времен GetSystemTimes %). Поэтому я прибегнул ко 2-му шагу, через PDH API. За ссылки спасибо, но у меня есть МСДН, а его вполне хватило
Вот код:

Код: #include <tchar.h>
#include <pdh.h>
#include <windows.h>

int
_tmain( int argc, TCHAR *argv[] )
{
    PDH_STATUS pdhResult = 0;
    TCHAR szCounterPath[1024];
    DWORD dwPathSize = sizeof(szCounterPath)/sizeof(TCHAR);
    PDH_COUNTER_PATH_ELEMENTS pe = {0};
    HQUERY hQuery;
    HQUERY hCounter;

    // создание нового запроса
    pdhResult = PdhOpenQuery( NULL, 0, &hQuery );
    
    // создание полного пути к счетчику и его добавление
    pe.szMachineName = 0;
    pe.szObjectName = _T("Процессор"); // _T("Processor");
    pe.szInstanceName = _T("_Total");
    pe.szParentInstance = NULL;
    pe.dwInstanceIndex = 0;
    pe.szCounterName = _T("% загруженности процессора"); // _T("Processor Time");
    pdhResult = PdhMakeCounterPath( &pe, szCounterPath, &dwPathSize, 0 );
    pdhResult = PdhAddCounter( hQuery, szCounterPath, 0, &hCounter );

    // сбор данных в течение 1 секунды
    pdhResult = PdhCollectQueryData( hQuery );
    Sleep( 1000 );
    pdhResult = PdhCollectQueryData( hQuery );

    // получение форматированных данных
    PDH_FMT_COUNTERVALUE stFormattedValue = {0};
    pdhResult = PdhGetFormattedCounterValue( hCounter, PDH_FMT_LONG, NULL, &stFormattedValue );
    pdhResult = PdhRemoveCounter( hCounter );
    pdhResult = PdhCloseQuery( hQuery );
// процент загруженности в stFormattedValue.longValue
}
Автор: fvgrod
Дата сообщения: 09.07.2008 09:18
Добрый день.
Подскажите как на C# задать IP адрес сетевого интерфейса?
Автор: eLLoco
Дата сообщения: 09.07.2008 12:54
fvgrod
C# здесь ни при чем, тебе нужны имена WinAPI функций, которые ты бы мог потом вызвать из C#. по вызову WinAPI из C# (вопросы "как") - в прошлый топик, по именам функций (вопросы "что") - спрашивай правильные вопросы здесь.
Автор: kzhabassov
Дата сообщения: 09.07.2008 13:44
Ктонить работал с функциями интерфейса CCID (Chip/Smart Card Interface Devices)?
Надо заобщаться с девайсом, а как - незнаю. Хотя бы какие функции использовать?
Автор: fvgrod
Дата сообщения: 09.07.2008 17:41
eLLoco
ОК.
Подскажите с помощью каких WinAPI функции можно изменить (задать) IP адрес сетевого интерфейса?
Автор: Zloy_Gelud
Дата сообщения: 15.08.2008 01:45
Не подскажите какими функциями реализовывается Drag'n'Drop (если кто знает как, то было бы еще лучше )? Может уже где-нить есть готовая библиотека для этих нужд? Мне нужно посредством Drag'n'Drop'a перенести файл/папку в Input (дескриптор соот-но я его знаю), в котором и будет отображаться путь к папке/файлу.
Автор: ShIvADeSt
Дата сообщения: 15.08.2008 01:49
Zloy_Gelud
DragAcceptFiles() and WM_DROPFILES
и далее гугль или хелп. Библиотека есть встроена в Виндоус.
Автор: dneprcomp
Дата сообщения: 18.08.2008 22:45
Как можно изменить alignment для выпадающей части комбобокса?
Проблема следующая. Комбобокс расположен по правому краю скрина. Позтому при увеличени длины выпадающей части через SendMessage, правый обрез уходит в заэкраную область(рис. 1). Хотелося бы получить левый alignment, как на рис. 2
Автор: ShIvADeSt
Дата сообщения: 19.08.2008 03:01
dneprcomp
вот один из вариантов http://www.gotdotnet.ru/Forums/Windows/119896.aspx
Автор: dneprcomp
Дата сообщения: 19.08.2008 03:15
ShIvADeSt
За вариант спасибо. А что, есть другие решения?
Автор: ShIvADeSt
Дата сообщения: 19.08.2008 04:34
dneprcomp
одна из вариаций, правда думаю что ловить надо всетаки как в примере выше. В общем пробуй

Код:
void __fastcall TMainForm::ComboBox4DropDown(TObject *Sender)
{
PostMessage(Handle, WM_MOVEDROPDOWN, 0, 0);
}
void __fastcall TMainForm::MoveDropDown(TMessage& Msg)
{
COMBOBOXINFO cbi;
RECT rcDrop;
ZeroMemory(&cbi, sizeof(cbi));
cbi.cbSize = sizeof(cbi);
GetComboBoxInfo(ComboBox4->Handle, &cbi);
SendMessage(ComboBox4->Handle, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&rcDrop);
SetWindowPos(cbi.hwndList, NULL, rcDrop.left-200, rcDrop.top+22, rcDrop.right-rcDrop.left+200,
rcDrop.bottom-rcDrop.top, SWP_NOZORDER);

Автор: xeroslov
Дата сообщения: 20.08.2008 15:03
Помогите пожалуйста с вырезанием кнопки по региону. Инициализацию всё проходит довольно успешно. Но при нажатии на кнопку появляется фон по которому я вырезал регион
Вот код обработчика:


Код: switch(Msg)
    {
    case WM_INITDIALOG:
        {
            hInformation=GetDlgItem(hwnd,IDC_BUTTON1);

            hbmInformation=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BUTTON_COMMON));
            hbmInformationHover=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BUTTON_PRESSED));
        }break;
    case WM_DRAWITEM:
        {
            LPDRAWITEMSTRUCT lpdis=(LPDRAWITEMSTRUCT)lParam;
HDC hdcMem=CreateCompatibleDC(lpdis->hDC);

            if (lpdis->hwndItem == hInformation)
            {
                HDC hCDC=CreateCompatibleDC(lpdis->hDC);

                HBITMAP &hBmp=bInformationStateButton?hbmInformationHover:hbmInformation;

                HBITMAP hBmpOld=(HBITMAP)SelectObject(hCDC,hBmp);

                StretchBlt(lpdis->hDC,0,0,lpdis->rcItem.right-lpdis->rcItem.left,
                        lpdis->rcItem.bottom - lpdis->rcItem.top,hCDC,0,0,
                        SizeBitmap(hBmp).cx, SizeBitmap(hBmp).cy,SRCCOPY);

                SelectObject(hCDC, hBmpOld);
                DeleteDC(hCDC);

                RsrcHand=FindResource(NULL,MAKEINTRESOURCE(IDR_RGN1),RsrcType);
                RsrcPoint=LoadResource(NULL,RsrcHand);
                RsrcSize=SizeofResource(NULL,RsrcHand);
                SetWindowRgn(hInformation,ExtCreateRegion(NULL,RsrcSize,(RGNDATA*) RsrcPoint),TRUE);
            }
        }break;
    case WM_COMMAND:
        {
            if (wParam==IDCANCEL)                        // Exit button
            {
                ExitProcess(0);
            }
            if (IDC_BUTTON1)
            {
                bInformationStateButton=TRUE;
                MessageBox(hwnd,"pressed","caption",MB_OK);

                // как быть дальше?
            }
        }break;
    case WM_CLOSE:
        {
        EndDialog(hwnd,0);
        }break;
    }
return 0;
}
Автор: Alamer
Дата сообщения: 04.11.2008 08:05
Помогите пожалуйста лаба по WinApi легкая - вытащить значения из реестра
1. Тип ОС с сервиспаком
2. Тип используемого монитора и видеокарты
3. Тип процессора и его характеристики
4. Объем ОЗУ
5. Количество и объем HDD

Информацию по процессору смог найти в реестре а все остальное даже не знаю в каких ветвях искать.
И вообще там ли искать эти параметры?

Если в реестре их нет то откуда их надо вытаскивать с помощью WinApi?
Автор: Abs62
Дата сообщения: 04.11.2008 15:23
Alamer

Цитата:
Если в реестре их нет то откуда их надо вытаскивать с помощью WinApi?

1. GetVersionEx
2. EnumDisplayDevices, EnumDisplayMonitors, GetMonitorInfo
3. GetSystemInfo
4. GlobalMemoryStatusEx
5. GetDriveType, GetVolumeInformation

Добавить по вкусу.
Автор: Alamer
Дата сообщения: 04.11.2008 16:19
Abs62
Спасибо =)
Так и думал что их надо не через реестр вытаскивать как в задании написано

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

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


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