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

» C++ WinAPI

Автор: TeXpert
Дата сообщения: 15.03.2006 02:16
tomegadeth
Если об этом, то лучше Visual Studio, нарисовал, что тебе надо, сохранил в виде rc-файла.
Автор: ShIvADeSt
Дата сообщения: 15.03.2006 03:50
tomegadeth
TeXpert
Народ, тут про WinAPI, а не про программы разработки ГУИ, прекращаем оффтоп. Выбор ГУИ в сравнениях компиляторов.
Автор: BukaP
Дата сообщения: 15.03.2006 23:11
Люди помогите плиз! Знаю, что вопрос тупой, но все-таки.

Использую диалоговое окно для вывода через MoveTo и LineTo графика. В некоторых случаех график вылазит немного дальше чем нужно (рисует на кнопках и т.п.). После отработки подпрограммы вывода необходимо очистить окно диалога по кнопке. Вопрос в том, как это сделать? Вариант с заданием ограничений не устраивает, а если залить окно прямоугольником цвета Bk, то кнопки на время пропадают. Помогите, плиз!
Автор: Abs62
Дата сообщения: 15.03.2006 23:34
BukaP
А просто сделать InvalidateRect этому окну диалога?
Автор: BukaP
Дата сообщения: 16.03.2006 00:22
Abs62: Огромное спасибо Проверил все рулит. Пошел клипать PI и PID законы управления
Автор: BukaP
Дата сообщения: 17.03.2006 20:59
Еще один тупой вопрос
У IDC_EDIT заданы параметры ограничения от 0 до 1.1 (тип float), когда просиходит обновление UpdateData при неверном вводе срабатывает событие о неверном формате. Что это за событие и как его перехватить. Необходимо заставить прогу задать верное значение.
Автор: Abs62
Дата сообщения: 18.03.2006 01:03
BukaP
Хм. У стандартного Edit control таких ограничений не бывает. Максимум, можно задать стиль ES_NUMBER. Или речь идёт уже не о WinAPI?

PS. Заставлять вводить данные правильно надо всё же юзера, а не прогу.
Автор: BukaP
Дата сообщения: 18.03.2006 10:01
Спасибо!
Автор: Troitsky
Дата сообщения: 28.03.2006 16:33
Давно хотел задать такой вопрос методического характера.

При сохранении данных в реестре сам пользуюсь такой комбинацией функций:
Код: ' Создаю (или открываю) нужный раздел
RegCreateKey
' Записываю туда данные
RegSetValueEx
' Закрываю раздел
RegCloseKey
Автор: ShIvADeSt
Дата сообщения: 28.03.2006 23:51
Troitsky

Цитата:
Не совсем понятна целесообразность использования выделенной части.

на самом деле The RegCreateKeyEx function creates the specified key. If the key already exists in the registry, the function opens it. (я всегда ее юзаю, так как без Ех устарела и просто есть), то есть если ключа нет, то он создается. Проблема в другом, если у тебя нет прав на запись в эту область реестра, то можно АВ схлопотать вроде, поэтому нужно всегда проверять результат открытия создания ключа.
Автор: Troitsky
Дата сообщения: 29.03.2006 08:24
ShIvADeSt
Тут вроде все понятно. Не понятно другое. Зачем прежде, чем функцией RegCreateKey создается или открывается нужный ключ, открывать еще корневой раздел функцией RegOpenKey? Ведь, насколько я понимаю, для того, чтобы проверить наличие возможности (прав) записи данных в ключ, корневой раздел открывать вовсе не обязательно.
Автор: TeXpert
Дата сообщения: 26.04.2006 05:36
Господа, такой вопрос: как эффективно перечислить все открытые сокеты? Во всех процессах?
Или, есть способы эффективного перечисления сокетов из режима ядра?
У кого какие идеи? Интересно будет узнать про недокументированные возможности.
Автор: dyr farot
Дата сообщения: 26.04.2006 11:16
проще, наверное, перехватить socket() из Ws2_32.dll
Автор: tomegadeth
Дата сообщения: 26.04.2006 12:36
dyr farot что значит
Цитата:
перехватить socket() из Ws2_32.dll
поясни пожалуйста! каким это образом? и главное - зачем?

TeXpert думаю копать надо в сторону GetExtendedTcpTable и GetExtendedUdpTable а уж по возвращаемым значениям (при выборе MIB_TCPTABLE_OWNER_PID или MIB_TCPTABLE_OWNER_MODULE, для UDP соответственно...) можно получить какой процесс пользует открытый порт. (Все это, конечно, как говорит MSDN, только от WinXP SP2 и шире).
Времени маловато, но если интересно - могу копнуть и выложить куском кода.
Автор: dyr farot
Дата сообщения: 26.04.2006 18:14
"каким образом" -- по методу "перехват API функций"
"зачем" -- получим сокет "от создателя" (там же определим и процесс)
Автор: matt
Дата сообщения: 26.04.2006 18:22
Привет!

Подскажите плз, как запусть внешнее приложение и получить его хендл? На первый взгляд подходит shellexecute, но при ближайшем рассмотрении оказывается, что при удачном выполнении он всегда возвращает 42. Есть мысли? Кто-то сталкивался?
Автор: tomegadeth
Дата сообщения: 26.04.2006 18:41
dyr farot
Цитата:
получим сокет "от создателя"
таким образом (если сможешь такое сотворить) ты, возможно и получишь сокет во время его создания - но что ты будешь делать если он уже создан, перед запуском твоего "перехвата"?

matt из MSDN
Цитата:
shellexecute - Returns a value greater than 32 if successful, or an error value that is less than or equal to 32. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.
и это правильно.
Пользуй CreateProcess и там в структуре PROCESS_INFORMATION и найдешь свой хендл.


Автор: matt
Дата сообщения: 27.04.2006 10:30
tomegadeth
в смысле hProcess или hThread?
Автор: tomegadeth
Дата сообщения: 27.04.2006 12:09
matt так тебе какой хендл нужен - окна, созданного процессом или самого процесса? Если хендл процесса, тогда это hProcess. А hThread это хендл главного потока, созданный процессом.
Автор: unreal666
Дата сообщения: 04.05.2006 22:30
Подскажите плиз. Как пользоваться функцией SendInput ?
Читал MSDN - ни фига не понял. Напишите с примерами (для примера, напечатать такое-то слово, выпонить комбинацию ALT + левый клик мышью).
Автор: ShIvADeSt
Дата сообщения: 05.05.2006 01:15
unreal666

Цитата:
Подскажите плиз. Как пользоваться функцией SendInput ?


Код:
//
#include <WinAble.h> // Required for the ::SendInput function
//...
// Toggle Caps Lock key:
INPUT input[2];
::ZeroMemory(input, sizeof(input));
input[0].type = input[1].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[1].ki.wVk = VK_CAPITAL;
input[1].ki.dwFlags = KEYEVENTF_KEYUP; // THIS IS IMPORTANT
::SendInput(2, input, sizeof(INPUT));
//
Автор: earlzero
Дата сообщения: 06.05.2006 14:11
Столкнулся с проблемой. Пытаюсь создать EDIT в обычном приложении Windows. EDIT создается, но не позволяет вводить в него данные(Только копирование из буфера обмена по Shift-Insert, выделеие текста, и удаление с помощью кнопки delete(кнопка backspace не работает)). Компилятор - Visual Studio 2005 .NET Express Edition.Не знает ли кто-нибудь где я ошибся?

Создание главного окна.

Цитата:

WNDCLASS wc;
ZeroMemory(&wc, sizeof(wc));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszClassName = "mywndclass";
wc.lpfnWndProc = MainWindowProc;

if( !RegisterClass(&wc) )
return 0;
hInst=instance;
HWND AppWnd = CreateWindow
(
"mywndclass",
"Hello!",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 450, 400,
NULL,
NULL,
instance,
NULL
);

Создание самого EDITа(в функции обработки сообщений).
hInst копируется из соотвутствующего параметра WinMain.

Цитата:

case WM_CREATE:
hEdit=CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT",
NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
110, 110, 200, 20,
hwnd,
(HMENU)100,
hInst,
NULL);
break;

Заранее спасибо.
Автор: Mindless
Дата сообщения: 07.05.2006 00:22
Вообще я не уверен совсем, но наверное по дефолту в 2005 стоит юникод, вместо "EDIT" попробуйте WC_EDIT - константа

Код:
case WM_CREATE:
hEdit=CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT,
NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
110, 110, 200, 20,
hWnd,
(HMENU)100,
hInst,
NULL);
break;
Автор: earlzero
Дата сообщения: 07.05.2006 11:01
Unicode по умолчанию я отключил, но даже после того, как я включил его и использовал WC_EDIT ничего особо не изменилось . Те же симптомы. Попробовал visual C++ Toolkit 2003 вместе с SDK за февраль 2003, но та же проблема....
Добавлено
Совершил глупую ошибку - использовал старый шаблон программы, в котором не оказалось такой мелочи как "TranslateMessage" в цикле обработуи соообщения. Теперь работает. Спасибо за участие .
Автор: TomasVercetti
Дата сообщения: 12.06.2006 21:53
Имеется утилитка, управляющая иконками на десктопе через профили, которые доступны исключительно через щелчок правой кнопкой мыши по десктопу > Icon Keeper
> Select Active Profile > Имя профиля. Она представляет собой .dll для эксплорера.
Каким образом можно вызвать (сымитировать щелчок мышкой?) из своей программы заданный профиль? Спасибо.
Автор: koderr
Дата сообщения: 21.06.2006 09:30
Есть программка, которая по url выкачивает html страничку. Но она не работает с урлами вида ...some_script.php[cgi, pl, etc]?param=value, только со статичными страницами. Как фиксить?
Автор: dyr farot
Дата сообщения: 21.06.2006 10:49
прикольный вопрос... вот тебе такой же ответ: нужно добавить поддержку урлов вида ...some_script.php[cgi, pl, etc]?param=value.

P.S.
код показывай.
Автор: koderr
Дата сообщения: 21.06.2006 14:28
dyr farot

Код:

szUserAgent     db "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)",0
szUrl         db "http://forum.ru-board.com/forum.cgi?forum=bm",0

URLDownloadToBuffer proc uses ebx lpszURL:LPSTR, lpBuffer:LPVOID, dwMaxBufferSize:DWORD
local hInternet:HANDLE
local hFile:HANDLE
local dwSize:DWORD
local nBytesRead:DWORD

    xor ebx, ebx
    invoke InternetOpen, offset szUserAgent, INTERNET_OPEN_TYPE_DIRECT + INTERNET_FLAG_HYPERLINK + INTERNET_FLAG_RAW_DATA, NULL, NULL, 0
    .if eax != 0
        mov hInternet, eax
        invoke InternetOpenUrl, hInternet, lpszURL, NULL, 0, INTERNET_FLAG_RELOAD, NULL
        .if eax != 0
            mov hFile, eax
            .while TRUE
                invoke InternetQueryDataAvailable, hFile, addr dwSize, 0, 0
                .if eax == TRUE
                    .break .if dwSize == 0
                    invoke InternetReadFile, hFile, lpBuffer, dwSize, addr nBytesRead
                    test eax, eax
                    jz @error
                    mov eax, nBytesRead
                    add ebx, eax
                    add lpBuffer, eax
                .else
@error:
                    xor ebx, ebx
                    .break
                .endif
            .endw
            invoke InternetCloseHandle, hFile
        .endif
        invoke InternetCloseHandle, hInternet
    .endif

    mov eax, ebx
    ret
URLDownloadToBuffer endp

Автор: tomegadeth
Дата сообщения: 21.06.2006 15:11
koderr
название темы читал? C++ WinAPI... чего масм сюда кидать?
Автор: dyr farot
Дата сообщения: 21.06.2006 16:42
что в szUrl -- вижу, а в lpszURL что?
и что в ответ на это InternetOpenUrl возвращает?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

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


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