Quantcast
Channel: Сообщество PHP DevelStudio - среда разработки программ
Viewing all articles
Browse latest Browse all 6336

Пример ffi класса

$
0
0
Пару дней назад писал ffi класс может кому будет интересно, если что то еще будет выложу сюда по этой теме


Скрытый текст:

PHP код:

class FunctionFFI extends ffi // создаем ffi класс
    
function __construct() {
        
parent::__construct(<<<EOD
            [lib='User32.dll']
                int MessageBoxA(int hWnd, char *lpText, char *lpCaption, int uType);
                int MessageBoxW(int hWnd, char *lpText, char *lpCaption, int uType);
                int GetActiveWindow();
                int GetWindowTextA(int hWnd, char *lpString, int nMaxCount);
                int GetWindowTextW(int hWnd, char *lpString, int nMaxCount);
                int GetWindow(int hWnd, int uCmd);
                int GetParent(int hWnd);
                int GetClassNameA(int hWnd, char *lpClassName, int nMaxCount);
                int GetClassNameW(int hWnd, char *lpClassName, int nMaxCount);
EOD
        );
    }
}

// создаем функции для легкого вызова winapi функций

function FunctionFFI_F() {
static 
$Function;
    if(empty(
$Function)) {
        
$Function = new FunctionFFI;
    }
    return 
$Function;
}

function 
MessageBoxA($hWnd$lpText$lpCaption$uType) {
    return 
FunctionFFI_F()->MessageBoxA($hWnd$lpText$lpCaption$uType);
}

function 
GetActiveWindow() {
    return 
FunctionFFI_F()->GetActiveWindow();
}

function 
GetWindowTextA($hWnd$lpString$nMaxCount) {
    return 
FunctionFFI_F()->GetWindowTextA($hWnd, &$lpString$nMaxCount);
}

function 
GetWindowTextW($hWnd$lpString$nMaxCount) {
    return 
FunctionFFI_F()->GetWindowTextW($hWnd, &$lpString$nMaxCount);
}

function 
GetWindow($hWnd$uCmd) {
    return 
FunctionFFI_F()->GetWindow($hWnd$uCmd);
}

function 
GetParent($hWnd) {
    return 
FunctionFFI_F()->GetParent($hWnd);
}

function 
GetClassNameA($hWnd$lpClassName$nMaxCount) {
    return 
FunctionFFI_F()->GetClassNameA($hWnd, &$lpClassName$nMaxCount);
}
function 
GetClassNameW($hWnd$lpClassName$nMaxCount) {
    return 
FunctionFFI_F()->GetClassNameW($hWnd, &$lpClassName$nMaxCount);
}



// Использование

$Buffer = array();
GetWindowTextA(GetActiveWindow(), &$Buffer256);
MessageBoxA(0'Handle: '.$Buffer'Caption Handle'0); // выводим наш заголовок почему то не полный
unset($Buffer); // очищаем буффер

// тут для теста
$Buffer = array();

$Handle GetActiveWindow();
$Wnd GetWindow($Handle5);

GetClassNameA($Wnd, &$Buffer256);
$Wnd2 GetWindow($Handle2);

print_r($Wnd2."\n\n");
print_r($Wnd."\n\n");
print_r($Buffer); 







для поста
пример
PHP код:

$mpr = new ffi("
        struct LPHANDLE {
            DWORD handle;
        };
        [lib='mpr.dll']
        int WNetOpenEnumA(int dwscope, int dwtype, int dwusage, int ipnetresource, struct LPHANDLE *lphenum);
"
);

$lphenum = new FFIStruct($mpr"LPHANDLE");

if(
$mpr->WNetOpenEnumA(0x000000020x00000000nullnull$lphenum) == 0) {
    
pre($lphenum->handle);
} else {
    
pre("Error");



Viewing all articles
Browse latest Browse all 6336

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>