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

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

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

ShIvADeSt



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

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

на самом деле The RegCreateKeyEx function creates the specified key. If the key already exists in the registry, the function opens it. (я всегда ее юзаю, так как без Ех устарела и просто есть), то есть если ключа нет, то он создается. Проблема в другом, если у тебя нет прав на запись в эту область реестра, то можно АВ схлопотать вроде, поэтому нужно всегда проверять результат открытия создания ключа.

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:51 29-03-2006
Troitsky



Водник Водкин
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt
Тут вроде все понятно. Не понятно другое. Зачем прежде, чем функцией RegCreateKey создается или открывается нужный ключ, открывать еще корневой раздел функцией RegOpenKey? Ведь, насколько я понимаю, для того, чтобы проверить наличие возможности (прав) записи данных в ключ, корневой раздел открывать вовсе не обязательно.

----------
Мы в хорошем настроении гуляем по лесам.
Кто обидеть нас захочет – сам получит по усам.
Сам полу- получит по усам. Сам полу- получит по усам!

Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 10:24 29-03-2006
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, такой вопрос: как эффективно перечислить все открытые сокеты? Во всех процессах?
Или, есть способы эффективного перечисления сокетов из режима ядра?
У кого какие идеи? Интересно будет узнать про недокументированные возможности.

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 06:36 26-04-2006
dyr farot

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
проще, наверное, перехватить socket() из Ws2_32.dll

Всего записей: 697 | Зарегистр. 03-08-2004 | Отправлено: 12:16 26-04-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dyr farot что значит
Цитата:
перехватить socket() из Ws2_32.dll
поясни пожалуйста! каким это образом? и главное - зачем?
 
TeXpert думаю копать надо в сторону GetExtendedTcpTable и GetExtendedUdpTable а уж по возвращаемым значениям (при выборе MIB_TCPTABLE_OWNER_PID или MIB_TCPTABLE_OWNER_MODULE, для UDP соответственно...) можно получить какой процесс пользует открытый порт. (Все это, конечно, как говорит MSDN, только от WinXP SP2 и шире).
Времени маловато, но если интересно - могу копнуть и выложить куском кода.


----------
shr eax, 16. ▄▄▄▄▄° Догоним и перегоним Африку °▄▄▄▄▄

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 13:36 26-04-2006
dyr farot

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
"каким образом" -- по методу "перехват API функций"
"зачем" -- получим сокет "от создателя" (там же определим и процесс)

Всего записей: 697 | Зарегистр. 03-08-2004 | Отправлено: 19:14 26-04-2006
matt

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет!
 
Подскажите плз, как запусть внешнее приложение и получить его хендл? На первый взгляд подходит shellexecute, но при ближайшем рассмотрении оказывается, что при удачном выполнении он всегда возвращает 42. Есть мысли? Кто-то сталкивался?

Всего записей: 176 | Зарегистр. 28-11-2003 | Отправлено: 19:22 26-04-2006
tomegadeth



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

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 19:41 26-04-2006
matt

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tomegadeth
в смысле hProcess или hThread?

Всего записей: 176 | Зарегистр. 28-11-2003 | Отправлено: 11:30 27-04-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
matt так тебе какой хендл нужен - окна, созданного процессом или самого процесса? Если хендл процесса, тогда это hProcess.  А hThread это хендл главного потока, созданный процессом.

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 13:09 27-04-2006
unreal666



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плиз. Как пользоваться функцией SendInput ?  
Читал MSDN - ни фига не понял. Напишите с примерами (для примера, напечатать такое-то слово, выпонить комбинацию ALT + левый клик мышью).

----------
MSI PRO B650-P WIFI / Ryzen 5 7600X / RAM 32Gib / 4 HDD = 10Tib + 1 NVME 2Tib / Radeon RX 560 2Gib / Win 10 x64 // POB, PVD

Всего записей: 6637 | Зарегистр. 14-02-2005 | Отправлено: 23:30 04-05-2006
ShIvADeSt



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

происходит нажатие клавиши КАПСЛОК, первое событие (input[0]) нажатие клавиши, второе событие (input[1]) отпускание клавиши.
Для меня проще mouse_event, keybd_event.


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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:15 05-05-2006
earlzero

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

Заранее спасибо.

Всего записей: 131 | Зарегистр. 02-10-2004 | Отправлено: 15:11 06-05-2006 | Исправлено: earlzero, 15:12 06-05-2006
Mindless



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

 
хотя я конечно сомневаюсь, окошко хоть какое-то то создаётся

Всего записей: 32 | Зарегистр. 31-10-2004 | Отправлено: 01:22 07-05-2006
earlzero

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Unicode по умолчанию я отключил, но даже после того, как я включил его и использовал WC_EDIT ничего особо не изменилось . Те же симптомы. Попробовал visual C++ Toolkit 2003 вместе с SDK за февраль 2003, но та же проблема....  
Добавлено
Совершил глупую ошибку - использовал старый шаблон программы, в котором не оказалось такой мелочи как "TranslateMessage" в цикле обработуи соообщения. Теперь работает. Спасибо за участие .

Всего записей: 131 | Зарегистр. 02-10-2004 | Отправлено: 12:01 07-05-2006 | Исправлено: earlzero, 12:41 07-05-2006
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется утилитка, управляющая иконками на десктопе через профили, которые доступны исключительно через щелчок правой кнопкой мыши по десктопу > Icon Keeper
> Select Active Profile > Имя профиля. Она представляет собой .dll для эксплорера.
Каким образом можно вызвать (сымитировать щелчок мышкой?) из своей программы заданный профиль? Спасибо.

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 22:53 12-06-2006
koderr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть программка, которая по url выкачивает html страничку. Но она не работает с урлами вида ...some_script.php[cgi, pl, etc]?param=value, только со статичными страницами. Как фиксить?

Всего записей: 353 | Зарегистр. 22-06-2005 | Отправлено: 10:30 21-06-2006
dyr farot

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
прикольный вопрос... вот тебе такой же ответ: нужно добавить поддержку урлов вида ...some_script.php[cgi, pl, etc]?param=value.
 
P.S.
код показывай.

Всего записей: 697 | Зарегистр. 03-08-2004 | Отправлено: 11:49 21-06-2006
koderr



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

Всего записей: 353 | Зарегистр. 22-06-2005 | Отправлено: 15:28 21-06-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koderr
название темы читал? C++ WinAPI... чего масм сюда кидать?

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 16:11 21-06-2006
Открыть новую тему     Написать ответ в эту тему

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