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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

SergejKa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NSentinel Дык... Почти то же самое, что и у меня, только на си... Не работает у меня это из ненавижуал васика...  
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0) - просто пролетает мимо и всё тут

 
Добавлено
Всё, разобрался, всё работает
 
NSentinel, спасибо за помощь

Всего записей: 469 | Зарегистр. 04-03-2002 | Отправлено: 07:11 25-11-2002
NSentinel



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergejKa
На здоровье
 
Проблема была в том, что не скорректировал привилегии для процесса?

Всего записей: 138 | Зарегистр. 27-08-2002 | Отправлено: 17:14 25-11-2002
SergejKa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NSentinel да Ты знал!!!!! Так не честно!!!!!!!

Всего записей: 469 | Зарегистр. 04-03-2002 | Отправлено: 03:10 26-11-2002
react



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плиз можно ли какой-то Сишной функцией узнать номер  
текущей недели в году ?
 И еще, подскажите плиз как перенести директорию со всем ее  
  содержимым с одного диска на другой тоже с помощью Сишной  
  функции(можно под DOS или под Win32), а то MoveFile не хочет
  переносить директории...
 
  Заранее спасибо !

Всего записей: 773 | Зарегистр. 08-02-2002 | Отправлено: 00:37 06-12-2002
NSentinel



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

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

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

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

 
Что ты подразумеваешь под Сишной функцией - использовать АПИ нельзя?
 
Если все же использовать API (Shell API), то все решается с помощью SHFileOperation. Все корректно пашет и юзается родной код системы.

Всего записей: 138 | Зарегистр. 27-08-2002 | Отправлено: 02:43 06-12-2002
react



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

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

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

Цитата:
Что ты подразумеваешь под Сишной функцией - использовать АПИ нельзя?  
 
Если все же использовать API (Shell API), то все решается с помощью SHFileOperation. Все корректно пашет и юзается родной код системы.

 API использовать можно, так что за совет спасибо - буду  
  пробовать...

Всего записей: 773 | Зарегистр. 08-02-2002 | Отправлено: 08:43 06-12-2002
DV



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Люди, помогите плиз... Я с API пока не работал. Подскажите, что нужно, чтоб в С++ вызывать APIшные функции, в частности нужна функция открытия файлов для чтения заданного каталога (FAT32), т.е. формат вызова функции, какие библиотеки подключать в #include ...? Буду рад, если дадите ссылочку на материал, где это подробно расписано... (Вообще нужно написать программу, к-я рекурсивно искала бы все файлы в заданном каталоге и всех подкаталогах...)

Всего записей: 56 | Зарегистр. 19-11-2002 | Отправлено: 23:12 10-12-2002
SergejKa

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

Поиск файла это отдельная песня. Можно искать несколькими способами, но я использую функции FindFirstFile и FindNextFile.
Всё это в виндовой библиотеке kernel32.dll, но вызов из С++ будет явно по другому. Если эта информация поможет тебе хоть немного, напиши, я распишу остальные апишки по доступу к файлам (опять таки только с точки зрения ненавижуал васика ).

Всего записей: 469 | Зарегистр. 04-03-2002 | Отправлено: 04:00 11-12-2002
amnick

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

Всего записей: 130 | Зарегистр. 16-12-2001 | Отправлено: 21:50 11-12-2002
DV



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SergejKa
Фух... с поиском файла кое-как разобрался. Ищет, блин... аж душа радуется. Даже рекурсивно, во все подкаталоги рекурсивно заглядывает и ни одного файла не пропускает!!! Что-ж, дело за малым остаётся - считать содержимое файла в память и поискать там подстроку, а это дело техники!
Спасибо, больше не надо апишек - сыт ими по горло . То есть хватило мне и этих двух вполне...
Совет: переходи на С++ - обалденная штуковина, куча возможностей, только несколько корявая, но я уже привыкаю...
 
Добавлено
SergejKa
- зто я забыл подписаться на получение ответа! Спасибо ещё раз!amnick - тоже спасибо!!!

Всего записей: 56 | Зарегистр. 19-11-2002 | Отправлено: 03:38 13-12-2002
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как реалзуется цвет окна в WINAPI ?

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 19:49 12-02-2003
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
STEEL
При регистрации класса окна, структура WNDCLASSEX.
Из MSDN:

Цитата:
 
.....
hbrBackground
Handle to the class background brush. This member can be a handle to the physical brush to be used for painting the background, or it can be a color value. A color value must be one of the following standard system colors (the value 1 must be added to the chosen color). If a color value is given, you must convert it to one of the following HBRUSH types:  
COLOR_ACTIVEBORDER
COLOR_ACTIVECAPTION
COLOR_APPWORKSPACE
COLOR_BACKGROUND
COLOR_BTNFACE
COLOR_BTNSHADOW
COLOR_BTNTEXT
COLOR_CAPTIONTEXT
COLOR_GRAYTEXT
COLOR_HIGHLIGHT
COLOR_HIGHLIGHTTEXT
COLOR_INACTIVEBORDER
COLOR_INACTIVECAPTION
COLOR_MENU
COLOR_MENUTEXT
COLOR_SCROLLBAR
COLOR_WINDOW
COLOR_WINDOWFRAME
COLOR_WINDOWTEXT  
The system automatically deletes class background brushes when the class is unregistered by using UnregisterClass. An application should not delete these brushes.
.....
 

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 11:38 13-02-2003
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
--------------------Configuration: GraphDemo - Win32 Debug--------------------
Compiling...
main.cpp
: error C2065: 'randomize' : undeclared identifier
: error C2065: 'random' : undeclared identifier
: error C2440: '=' : cannot convert from 'void *' to 'struct HBITMAP__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

Код:
 
LRESULT CALLBACK GraphDemoWndProc(HWND, UINT, UINT, LONG);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = "GraphDemo";
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = GraphDemoWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = 0;
WndClass.hCursor = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hIcon = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = szClassName;
if(!RegisterClass(&WndClass))
{
MessageBox(0, "Can't create window", "Error", MB_OK);
return 0;
}
hWnd = CreateWindow(szClassName, "GraphDemo",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if(!hWnd)
{
MessageBox(0,"","", MB_OK);
return 0;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
 
LRESULT CALLBACK GraphDemoWndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam)
{
HDC hDC, hCompatibleDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
HBITMAP hCompatibleBitmap, hOldBitmap;
HPEN hOldPen;
static HPEN Pens[5];
HBRUSH hOldBrush;
static HBRUSH Brushes[6];
int i;
 
switch(Message)
{
case WM_PAINT:
randomize();
for(i = 0; i <= 4; i++)
{
Pens[i] = (CreatePen(i, 1, RGB(random(255), random(255), random(255))));
Brushes[i] = (CreateHatchBrush(i, RGB(random(255), random(255),random(255))));
}
GetClientRect(hWnd, &Rect);
hDC = BeginPaint(hWnd, &PaintStruct);
hCompatibleDC = CreateCompatibleDC(hDC);
GetClientRect (hWnd, &Rect);
hCompatibleBitmap = CreateCompatibleBitmap(hDC, Rect.right, Rect.bottom);
hOldBitmap = SelectObject(hCompatibleDC, hCompatibleBitmap);
PatBlt(hCompatibleDC, 0, 0, Rect.right, Rect.bottom, PATCOPY);
for(i = 0; i <= 9999; i++)
SetPixel(hCompatibleDC, random(Rect.right), random(Rect.bottom), RGB(random(255), random(255), random(255)));
for(i=0; i <= 9; i++)
{
hOldPen = SelectObject(hCompatibleDC, Pens(random(4)));
MoveToEx(hCompatibleDC, random(Rect.right, random(Rect.bottom), NULL));
LineTo(hCompatibleDC, random(Rect.right), random(Rect.bottom));
SelectObject(hCompatibleDC, hOldPen);
}
for(i = 0; i <= 5; i++)
{
hOldBrush = SelectObject(hCompatibleDC, Brushes(random(4)));
Rectangle(hCompatibleDC, random(Rect.right),
random(Rect.bottom),
random(Rect.right),
random(Rect.bottom));
Ellipse(hCompatibleDC, random(Rect.right),
random(Rect.bottom),
random(Rect.right),
random(Rect.bottom));
SelectObject(hCompatibleDC, hOldBrush);
}
BitBlt(hDC, PaintStruct.rcPaint.left, PaintStruct.rcPaint.top,
PaintStruct.rcPaint.right,
PaintStruct.rcPaint.bottom,
hCompatibleDC,
PaintStruct.rcPaint.left,
PaintStruct.rcPaint.top,
SRCCOPY);
for(i = 0; i<=4;i++)
{
DeleteObject(Pens[i]);
DeleteObject(Brushes[i]);
}
SelectObject(hCompatibleDC, hOldBitmap);
DeleteObject(hCompatibleBitmap);
DeleteDC(hCompatibleDC);
EndPaint(hWnd, &PaintStruct);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
 
return DefWindowProc(hWnd,Message,wParam, lParam);
}
 

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 23:11 18-02-2003
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
STEEL
Вместо randomize() и random() используй srand(), rand().
Пример из MSDN:

Код:
 
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
void main( void )
{
   int i;
 
   /* Seed the random-number generator with current time so that
    * the numbers will be different every time we run.
    */
   srand( (unsigned)time( NULL ) );
 
   /* Display 10 numbers. */
   for( i = 0;   i < 10;i++ )
      printf( "  %6d\n", rand() );
}
 

 

Цитата:
 : error C2440: '=' : cannot convert from 'void *' to 'struct HBITMAP__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast

 
В какой строке хоть?

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 06:03 19-02-2003
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Заменил всё, как ты сказал.
 
C:\Program Files\Microsoft Visual Studio\MyProjects\GraphDemo\main.cpp(66) : error C2065: 'random' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\GraphDemo\main.cpp(77) : error C2440: '=' : cannot convert from 'void *' to 'struct HBITMAP__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.
 
GraphDemo.exe - 2 error(s), 0 warning(s)

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 07:17 20-02-2003
f_serg



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

Цитата:
random

Будь внимательнее, rand().

Цитата:
main.cpp(77) : error C2440: '=' : cannot convert

77 мне ни о чем не говорит, ты же не весь main.cpp запостил.
 
Добавлено
 
Просто пометь строчку, например в своем предыдущем посте.

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 10:41 20-02-2003 | Исправлено: f_serg, 10:43 20-02-2003
Medium



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, нужен большой хелп...
Необходима функция определения типа операционной системы (Win98, WinNT...Linux, Unix и т.д.) на Си. Или хотя бы как определить это Win или Linux(Unix).
 
Сам я пишу строго на Delphi, но тут понадобилась такая весч на Си.
Прошу не проходить мимо

Всего записей: 587 | Зарегистр. 09-04-2002 | Отправлено: 19:58 12-03-2003
Tom

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BOOL GetVersionEx(
    LPOSVERSIONINFO lpVersionInformation // pointer to version information structure
   );
typedef struct _OSVERSIONINFO{  
    DWORD dwOSVersionInfoSize;  
    DWORD dwMajorVersion;  
    DWORD dwMinorVersion;  
    DWORD dwBuildNumber;  
    DWORD dwPlatformId;  
    TCHAR szCSDVersion[ 128 ];  
} OSVERSIONINFO;  

Всего записей: 12 | Зарегистр. 10-03-2003 | Отправлено: 21:52 12-03-2003
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GetVersion
Добавил
Том раньше успел.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 22:18 12-03-2003 | Исправлено: dneprcomp, 22:27 12-03-2003
f_serg



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

Цитата:
Или хотя бы как определить это Win или Linux(Unix).

Это как? Один бинарник на две ОС?

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 06:18 13-03-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 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