Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

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

SARCAZM

Это что за покемон?
Команда форума
Рег
5 Июн 2015
Сообщения
1,446
Реакции
1
Trovo
SARCAZM
В данном примере, используются 4 системных функции которые находятся системных DLL Windows.

1. MessageBox >> см.описание у microsoft
2. ShellExecute >> см.описание у microsoft
3. FindWindow >> см.описание у microsoft
4. SetWindowText >> см.описание у microsoft

Скрипт выводит диалог, после нажатия "ОК" запускает Калькулятор, ищет его окно и меняет текст.


function MessageBoxW(hWnd: integer; Text, Caption: PChar; uType: integer): integer; stdcall; external 'user32.dll';
function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar; nShowCmd: integer): integer; stdcall; external 'Shell32.dll';
function FindWindowW(lpClassName, lpWindowName: PChar): integer; stdcall; external 'user32.dll';
function SetWindowTextW(hWnd: integer; lpString: PChar): boolean; stdcall; external 'user32.dll';

var H: integer;
begin
MessageBoxW(0, 'HELLO !', 'Пример WinAPI', 0);
ShellExecuteW(0, 'open', 'calc', nil, nil, 0);
Delay(500); // даем время запуститься калькулятору
H := FindWindowW(nil,'Калькулятор');
SetWindowTextW(H, 'Shadow - WinAPI DEMO');
end.

Потоки:



function TerminateThread(hThread: THandle; dwExitCode: integer): Boolean; stdcall;external 'kernel32';
function CloseHandle(hObject: THandle):boolean; stdcall;external 'kernel32';
function SuspendThread(hThread: THandle):boolean; stdcall;external 'kernel32';
function ResumeThread(hThread: THandle):boolean; stdcall;external 'kernel32';
procedure Schet;
var
i:integer;
begin
while true do
begin
Delay(1000);
Print(i);
inc(i);
end;
EndThread(0);
end;

var
th:THandle;
TID: cardinal;

procedure onfree;
begin
TerminateThread(th,0);
CloseHandle(th);
end;
begin
th:=beginthread(nil, 0, @Schet, nil, 0, TID);
delay(10000);
end.


Автор скрипта: Ivanius
 
Назад
Сверху