Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393

Не получается вызвать функцию в dll через LPTHREAD_START_ROUTINE

04.12.2022, 20:36. Показов 1415. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается вызвать функцию в dll через LPTHREAD_START_ROUTINE
Я не понимаю почему? Подскажите, пожалуйста, мне в чём причина

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void MorkerRoutine() {
    printf("op");
};
BOOL __stdcall DllMain(HMODULE hinst,
    DWORD  ul_for_call, PVOID lpReserved){
    DisableThreadLibraryCalls(hinst);
    DWORD ThreadId;
    if (ul_for_call == DLL_PROCESS_ATTACH) {
        HANDLE hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MorkerRoutine, NULL, 0, NULL);
    
        MSG msg;
 
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
 
    }
    return TRUE;
};

injector
C++
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
62
63
64
using namespace std;
 
 
DWORD GetProcessByName(char* process_name) {
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 process;
    DWORD proc_id = 0;
    if (Process32First(snapshot, &process)) {
        while (1) {
            if (_stricmp(process.szExeFile, process_name) == 0) {
                proc_id = process.th32ProcessID;
                break;
            }Process32Next(snapshot, &process);
        }
    }
    CloseHandle(snapshot);
    return proc_id;
};
 
bool FileExist(char* name)
{
    return _access(name, 0) != -1;
}
 
bool Inject(DWORD pID, char* path) {
    HANDLE proc_handle;
    LPVOID RemoteString;
    LPCVOID LoadLibAddy;
    if (pID == 0)
        return false;
    proc_handle = OpenProcess(PROCESS_ALL_ACCESS, NULL, pID);
    if (proc_handle == 0)
        return false;
 
    //printf("DLL found!\n\n");
 
    HMODULE hDLL = LoadLibrary("Dllmain.dll");
 
    LoadLibAddy = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibrary");
    RemoteString = VirtualAllocEx(proc_handle, NULL, strlen(path), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(proc_handle, RemoteString, path, MAX_PATH, NULL);
    CreateRemoteThread(proc_handle, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, RemoteString, NULL, NULL);
 
    MSG msg;
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    CloseHandle(proc_handle);
    FreeLibrary(hDLL);
 
    return true;
};
int main() {
    char path[256]; char process_name[32] = "notepad.exe";
    DWORD pid; char dll_name[32] = "Dllmain.dll";   
        pid = GetProcessByName(process_name);
        GetFullPathName(dll_name, sizeof(path), path, NULL);
        Inject(pid, path);
 
    return 0;
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.12.2022, 20:36
Ответы с готовыми решениями:

Не получается вызвать функцию из динамической библиотеки DLL
#include <iostream> #include "windows.h" HINSTANCE h; typedef int (CALLBACK * function)(int i); BOOL fRunTimeLinkSuccess =...

Не получается вызвать функцию через onmouseover
В общем нужно передать параметр функции. на странице: <a href='proj.php' onmouseover='showtrail(320,240,image.jpg); count(123);' ...

Как вызвать функцию, описанную в DLL через Custom Action в wix?
Не нашел подходящего раздела для вопроса, поэтому решил сделать здесь, тк DLL написана на c++! Вот сама DLL:#include <stdio.h> ...

3
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
05.12.2022, 15:53
У вас сигнатура функции не совпадает. Ваша THREAD_START_ROUTINE должна принимать параметр типа LPVOID и возвращать тип данных DWORD.
https://learn.microsoft.com/en... on-pointer
1
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
05.12.2022, 16:16
Уже обсуждалось миллион раз, в DLLmain не должно быть лишнего кода, а тут бесконечный цикл
C
1
while (GetMessage..
в инжекторе тоже зачем он, если нет окна.

Не по теме:

Почему бы не подучить базовую матчасть перед тем, как кодить что-то более сложное?

1
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
07.12.2022, 14:11  [ТС]
Замабувараев, спасибо вам большое за ваш ответ, крайне Вам признателен за него.
у меня получилось, теперь стараюсь с помощью IDirectInput8 перехватить нажатия кнопки мыши, чтобы вместо неё нажимаешь другая клавиша.

C++
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
DWORD ThreadProc(LPVOID p) {
 
    IDirectInput8* pMouse = nullptr;
    IDirectInputDevice8* pDIDevice; //Create the device object
 
    gethwnd();
 
    if (DirectInput8Create((HINSTANCE)GetModuleHandle(0), DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID*)& pMouse, NULL) != DI_OK) {
        printf("\nDirectInput8Create failed!"); return -1;
    }
    if (FAILED(pMouse->CreateDevice(GUID_SysMouse, &pDIDevice, NULL))) {
        printf(" error CreateDevice");
        return -1;
    }
 
    if (FAILED(pDIDevice->SetDataFormat(&c_dfDIMouse2))) {
        pDIDevice->Release();//Set the data format
        return -1;
    }
    if (FAILED(pDIDevice->Acquire())) {
        pDIDevice->Release();
        return -1;
    }   //устройство  захвачено 
 
    DIMOUSESTATE2 dims; HRESULT hr; DIPROPDWORD dipdw;
    dipdw.diph.dwSize = sizeof(DIPROPDWORD);
    dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
    dipdw.diph.dwObj = 0;
    dipdw.diph.dwHow = DIPH_DEVICE;
    dipdw.dwData = 16; // Arbitrary buffer size
    printf("  ok\n\n\n");
    while (1) {
        pDIDevice->Poll(); // опрашивать устройство
        pDIDevice->Acquire(); // Получить управление устройством
        pDIDevice->SetCooperativeLevel(window_handle, DISCL_BACKGROUND | DISCL_EXCLUSIVE);
        pDIDevice->GetDeviceState(sizeof(dims), (LPVOID)& dims);
 
        if ((dims.rgbButtons[1]) == 0) {
            dims.rgbButtons[1] = 0;
            std::cout << "[RMB]" << std::endl;
            DWORD ntems = 10; //std::array<DIDEVICEOBJECTDATA,20>data1;
            DIDEVICEOBJECTDATA data;
            pDIDevice->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &data, &ntems, 0);
            data.dwData = 0;
            pDIDevice->Unacquire();
 
        }
 
    }
    return 0;
}
скажите пожалуйста как лучше сделать? необходимо отключить клик правой кнопки мыши.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2022, 14:11
Помогаю со студенческими работами здесь

Как вызвать функцию, описанную в DLL через Custom Action в wix?
Тема не относится к веб-мастерингу, но в wix используется xml, поэтому решил задать вопрос здесь! Туториал по wix излазил вдоль и...

Не получается вызвать функции из dll, написанной на Delphi
Использую библиотеку программы Invisible Secrets. А именно jpgcarrier.dll . Она шифрует\дешифрует файлы совмещая их при этом с jpg...

Не вызвать функцию с DLL
Тут такая проблема с DLL!!! Обьясните, что я делаю не так Сама DLL #include &lt;vcl.h&gt; #include &lt;windows.h&gt; #include...

Вызвать функцию c++ из .dll
Имеется dll написанный на с++. В нем одна из вызываемых функций имеет вид extern &quot;C&quot; { /* ADF Test with pointer ...

Вызвать функцию из dll
V8.1 В справке по 1С есть инфа, как подключить dll-ку. Но вот только не написано как вызвать оттуда функцию. Мне нужно что-то вроде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru