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

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

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

Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
getwellsoon
Ну, если важно знать, что всё записалось нормально, то надо проверять. А если наплевать, записалось или нет, то не надо.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 15:12 11-07-2010
getwellsoon

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
 
Ну, функция и так сообщает была ли ошибка. Так как функция универсальная, то количество записанных байтов, возможно, актуально для каких-то случаев типа записи в мейлслот или в пайп, а вот при записи в файл я подумал, что может и не бывает такого случая как частичная запись данных без наличия сообщения об ошибке.

Всего записей: 382 | Зарегистр. 26-07-2008 | Отправлено: 15:01 12-07-2010 | Исправлено: getwellsoon, 15:02 12-07-2010
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
getwellsoon
Не будет никакого сообщения об ошибке. Хочешь сообщение - проверяй результат функции, если ошибка(зеро), то получи сообщение через FormatMessage.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 15:24 12-07-2010
Andrey32

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне нужно окно (окно верхнего уровня), размеры которого нельзя изменить.  
Я это делаю через отлов WM_SIZING. Но еще остается возможность развертывания окна. Как деактивировать кнопку развертывания?

Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 21:37 05-10-2010
Abs62



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

Цитата:
Как деактивировать кнопку развертывания?

Не ставить соответствующий стиль окна при его создании - WS_MAXIMIZEBOX.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:52 05-10-2010
Andrey32

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня стиль - WS_OVERLAPPEDWINDOW.

Цитата:
Не ставить соответствующий стиль окна при его создании - WS_MAXIMIZEBOX.

Вот так: ^WS_MAXIMIZEBOX ?

Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 22:10 05-10-2010
Abs62



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

Цитата:
У меня стиль - WS_OVERLAPPEDWINDOW

WS_OVERLAPPEDWINDOW - это комбинация стилей WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX.  
Можно самому нужные стили скомбинировать, можно в WS_OVERLAPPEDWINDOW ненужный затереть.  
Вроде (WS_OVERLAPPEDWINDOW)&(~WS_MAXIMIZEBOX) (Это на C/C++). Как удобнее.


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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:20 05-10-2010
Andrey32

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробовал,  ^WS_MAXIMIZEBOX работает. Комбинация это -"|" , "или"; убрать из комбинации - "^", "исключающее или". На С, /++.
Спасибо большое. Я сейчас только воткнул, что стили- это всего лишь набор битов, комбинируемых с помощью |. На WinAPI недавно пробую писать.

Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 22:33 05-10-2010
stazher

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Хочу программно найти и завершить процесс "proga.exe" с помощью tlhelp32.h и вот такого кода (Borland C++):
 

Код:
 
#include <windows.hpp>
#include <sysutils.hpp>
#include <tlhelp32.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    //создаётся снимок состояния системы
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    HANDLE hProcess;
    //параметр TH32CS_SNAPPROCESS означает, что мы хотим узнать
    //только информацию о процессах
    bool Result = true;
    bool Find = false;
    //опишем структуру, в которой будет храниться эта информация
    PROCESSENTRY32 *ProcEntry = new PROCESSENTRY32();
    char* FileName;
    //Поиск запущенной программы "proga.exe"
    Result = Process32First(hSnapshot, ProcEntry);
    FileName = ExtractFileName(ProcEntry->szExeFile).c_str();
    if(FileName == "proga.exe")
    {
        hProcess = OpenProcess(PROCESS_TERMINATE, false, ProcEntry->th32ProcessID);
        //Программа найдена
        Find = true;
        //Вырубаем ее
        if(TerminateProcess(hProcess, 0)) //Ok
        {
            delete ProcEntry;
            //выгрузим из памяти системный снимок
            CloseHandle(hSnapshot);
            exit(0);
        }
        else
        {
            MessageBox(0,"Не удалось завершить-1",0,MB_OK);
        }
    }
    //Вызываемые функции - булевские. Поэтому, когда вернется false,
    //значит, информации боьше нет. => можно использовать цикл
    while(Result)
    {
        Result = Process32Next(hSnapshot, ProcEntry);
        if(Result)
        {
            FileName = ExtractFileName(ProcEntry->szExeFile).c_str();
            if(FileName == "proga.exe")
            {
                hProcess = OpenProcess(PROCESS_TERMINATE, false, ProcEntry->th32ProcessID);
                //Программа найдена
                Find = true;
                //Вырубаем ее
                    if(TerminateProcess(hProcess, 0)) //Ok
                    {
                        delete ProcEntry;
                        //выгрузим из памяти системный снимок
                        CloseHandle(hSnapshot);
                        exit(0);
                    }
                    else
                    {
                        MessageBox(0,"Не удалось завершить-2",0,MB_OK);
                    }
            }
        }
    }
    if(!Find) //Программа не найдена
    {
        MessageBox(0,"Программа не найдена",0,MB_OK);
    }
    return 0;
}
 

 
Компилится, но почему-то не может найти искомую прогу. Подскажите в чем дело плз.

Всего записей: 108 | Зарегистр. 16-03-2006 | Отправлено: 12:16 05-12-2010 | Исправлено: stazher, 12:43 05-12-2010
Abs62



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

Цитата:
PROCESSENTRY32 *ProcEntry = new PROCESSENTRY32();
 

Код:
PROCESSENTRY32 *ProcEntry = new PROCESSENTRY32;  
ProcEntry->dwSize=sizeof(PROCESSENTRY32);


Цитата:
char* FileName;


Код:
char FileName[260];


Цитата:
FileName = ExtractFileName(ProcEntry->szExeFile).c_str();


Код:
lstrcpyn(FileName, ExtractFileName(ProcEntry->szExeFile).c_str(), 260);


Цитата:
if(FileName == "proga.exe")


Код:
if(lstrcmpi(FileName,"proga.exe")==0)


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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 13:21 05-12-2010
stazher

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, понял, работает .
 
С этой прогой ещё небольшая заморочка - не хочет линковаться без runtime packages. Насколько знаю, это из-за использования AnsiString, советуется их заменять на строки char*. Но чем можно заменить функцию ExtractFileName которая AnsiString - непонятно.

Всего записей: 108 | Зарегистр. 16-03-2006 | Отправлено: 15:50 05-12-2010
Abs62



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

Цитата:
Но чем можно заменить функцию ExtractFileName которая AnsiString - непонятно.

Посмотри PathFindFileName.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 16:21 05-12-2010
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ковыряю код. В обработчике OnToolTipNotify вижу продублированные структуры:
TOOLTIPTEXTA, TOOLTIPTEXTW;
TTN_NEEDTEXTA, TTN_NEEDTEXTW.
 
В одном из примеров видел тоже самое но без суффиксов A и W:
TOOLTIPTEXT, TTN_NEEDTEXT.
 
Я так понимаю A = ANSI, W = UNICODE. А для чего структуры без суффиксов?
 
Если я пишу для Windows XP и выше, то я могу обойтись без дублирования? Если да, то какого вида из трех структур нужно использовать?

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 09:21 09-12-2010
Abs62



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

Цитата:
А для чего структуры без суффиксов?

Они раскрываются в ANSI или UNICODE при компиляции. Вот кусочек из commctl.h:

Код:
#define TOOLTIPTEXT    NMTTDISPINFO
...
#ifdef UNICODE
#define NMTTDISPINFO            NMTTDISPINFOW
#define LPNMTTDISPINFO          LPNMTTDISPINFOW
#define NMTTDISPINFO_V1_SIZE NMTTDISPINFOW_V1_SIZE
#else
#define NMTTDISPINFO            NMTTDISPINFOA
#define LPNMTTDISPINFO          LPNMTTDISPINFOA
#define NMTTDISPINFO_V1_SIZE NMTTDISPINFOA_V1_SIZE
#endif

Если было задано "#define UNICODE", раскроется в "W", не задано - в "A".

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:33 09-12-2010
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Тогда такой вопрос. Струтуры с суффиксом A (ANSI) нужны толькр для работы в Win98? На WinXP без них можно?

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 19:33 09-12-2010
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V0lt
У тебя может быть скомпилировано и не юникодное приложение, и оно тоже будет нормально работать в WinXP.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 19:56 09-12-2010
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V0lt
Зачем программисту ANSI-структуры и функции, должен сказать он сам. Мало ли, может надо файл прочитать, в котором такая ANSI-структура записана, к примеру. Или с другой программой пообщаться, которая юникод не понимает. Или просто привычнее ему так. Но если каких-то особых причин нет, то вполне резонно работать именно в юникоде.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 20:02 09-12-2010
V0lt



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

Цитата:
Но если каких-то особых причин нет, то вполне резонно работать именно в юникоде

Вообщем весь проект как бы в уникоде, но в некоторых местах есть такие дубли. Я только что спросил: стоит ли мне тоже дублировать. Мне сказали, что не надо, попробуй сделать только в уникоде и посмотри, что получиться

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 20:39 09-12-2010
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть CSliderCtrl.
Как узнать растояние между начальным и конечным положениями в пикселях?
Всю документацию по CSliderCtrl уже перерыл, нет ничего подобного.

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 22:20 08-02-2011 | Исправлено: V0lt, 22:21 08-02-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V0lt
А GetChannelRect - это не то?

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 00:15 09-02-2011
Открыть новую тему     Написать ответ в эту тему

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