Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

AnGo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Blind
Да этот способ я знаю. Мне хотелось бы, чтобы отображались каталоги и ярлыки, указывающие на них. Думал может кто подскажет путь как это сделать.
В диалоге должен быть выбор на уровне не ниже каталога, файлы мне совсем ни к чему
Реализация не обязательно через SHBrowseForFolder.

Всего записей: 1078 | Зарегистр. 07-07-2002 | Отправлено: 20:14 31-05-2008 | Исправлено: AnGo, 20:15 31-05-2008
Blind

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

В той же SHBrowseForFolder можно использовать свою callback-функцию и в ней реализовать фильтр
 
P.S. Может, вот это окажется полезным: hxxp://msdn.microsoft.com/en-us/magazine/cc163789.aspx

Всего записей: 592 | Зарегистр. 06-10-2003 | Отправлено: 07:36 02-06-2008 | Исправлено: Blind, 07:50 02-06-2008
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как получить через WinAPI проценты загрузки системы? (как в Диспетчере задач: Быстродействие: Загрузка ЦП)

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 14:40 02-06-2008
AnGo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Blind
Спасибо за ссылку. Поковыряем.

Всего записей: 1078 | Зарегистр. 07-07-2002 | Отправлено: 15:39 02-06-2008
Lyrik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_Dobrov
Смотря какой Виндовс: для ХР и выше юзай GetSystemTimes, если 2к - юзай ZwQuerySystemInformation (из разряда недокументированных)

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 21:12 02-06-2008
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lyrik, GetSystemTimes выдает время работы, а QuerySystemInformation недокументирован.
 
Нашёл на страничке tripsin: Получение списка процессов с помощью Performance Data Helper.
Также на MSDN есть пример использования pdh.dll для получения значений производительности.
 
Но для меня это сложно, можете упростить код, чтобы выдавал только загрузку процессора?

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 02:42 04-06-2008
Lyrik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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
}

Данный код получает общую загруженность процессоров (если их несколько). Как видите тут есть одна тонкость: имя объекта и имя счетчика должны быть запрошены на  языке, используемом Windows. Как от этого избавиться пока не нашел
Добавлено:
Нашел Правда достаточно геморойный метод Строки необхожимо получать через PdhLookupPerfNameByIndex зная индекс счетчика "Процессор" (238) и "% загруженности процессора" (7), индексы мона найти в реестре по пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Perflib\, подключа "019" - рус. или "009" - англ. Нашел путь благодаря Вашей ссылке

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 17:47 04-06-2008 | Исправлено: Lyrik, 18:40 04-06-2008
fvgrod



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день.  
Подскажите как на C# задать IP адрес сетевого интерфейса?

Всего записей: 98 | Зарегистр. 17-10-2006 | Отправлено: 10:18 09-07-2008
eLLoco



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fvgrod
C# здесь ни при чем, тебе нужны имена WinAPI функций, которые ты бы мог потом вызвать из C#. по вызову WinAPI из C# (вопросы "как") - в прошлый топик, по именам функций (вопросы "что") - спрашивай правильные вопросы здесь.

Всего записей: 217 | Зарегистр. 03-08-2007 | Отправлено: 13:54 09-07-2008
kzhabassov



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ктонить работал с функциями интерфейса CCID (Chip/Smart Card Interface Devices)?
Надо заобщаться с девайсом, а как - незнаю. Хотя бы какие функции использовать?

Всего записей: 3 | Зарегистр. 09-07-2008 | Отправлено: 14:44 09-07-2008
fvgrod



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
eLLoco
ОК.
Подскажите с помощью каких WinAPI функции можно изменить (задать) IP адрес сетевого интерфейса?

Всего записей: 98 | Зарегистр. 17-10-2006 | Отправлено: 18:41 09-07-2008
Zloy_Gelud



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не подскажите какими функциями реализовывается Drag'n'Drop (если кто знает как, то было бы еще лучше   )? Может уже где-нить есть готовая библиотека для этих нужд? Мне нужно посредством Drag'n'Drop'a перенести файл/папку в Input (дескриптор соот-но я его знаю), в котором и будет отображаться путь к папке/файлу.

Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 02:45 15-08-2008 | Исправлено: Zloy_Gelud, 03:08 15-08-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zloy_Gelud
DragAcceptFiles() and WM_DROPFILES
и далее гугль или хелп. Библиотека есть встроена в Виндоус.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:49 15-08-2008
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как можно изменить alignment для выпадающей части комбобокса?
Проблема следующая. Комбобокс расположен по правому краю скрина. Позтому при увеличени длины выпадающей части через SendMessage, правый обрез уходит в заэкраную область(рис. 1). Хотелося бы получить левый alignment, как на рис. 2

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 23:45 18-08-2008 | Исправлено: dneprcomp, 04:16 19-08-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
вот один из вариантов http://www.gotdotnet.ru/Forums/Windows/119896.aspx


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:01 19-08-2008
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
За вариант спасибо. А что, есть другие решения?

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 04:15 19-08-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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);
 
 


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:34 19-08-2008
xeroslov



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста с вырезанием кнопки по региону. Инициализацию всё проходит довольно успешно. Но при нажатии  на кнопку появляется фон по которому я вырезал регион
Вот код обработчика:
 

Код:
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;
}

 
Вот код в проекте с картинками и файлами регионов:
http://rapidshare.com/files/138724570/RGNButton.rar.html

Всего записей: 17 | Зарегистр. 20-08-2008 | Отправлено: 16:03 20-08-2008
Alamer

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите пожалуйста лаба по WinApi  легкая - вытащить значения из реестра
1. Тип ОС с сервиспаком
2. Тип используемого монитора и видеокарты
3. Тип процессора и его характеристики
4. Объем ОЗУ
5. Количество и объем HDD
 
Информацию по процессору смог найти в реестре а все остальное даже не знаю в каких ветвях искать.  
И вообще там ли искать эти параметры?
 
Если в реестре их нет то откуда их надо вытаскивать с помощью WinApi?

Всего записей: 65 | Зарегистр. 23-01-2006 | Отправлено: 09:05 04-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alamer

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

1. GetVersionEx
2. EnumDisplayDevices, EnumDisplayMonitors, GetMonitorInfo
3. GetSystemInfo
4. GlobalMemoryStatusEx
5. GetDriveType, GetVolumeInformation
 
Добавить по вкусу.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 16:23 04-11-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru