Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с клавиатурой
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
klem4
Можно ли передать клавиатуре (имитировать) нажатие клавиши, 2-х клавишь ? например alt+enter "разворот" на весь экран ?

хотелось бы осуществить это автоматически, не прибешая к граф режиму.
Может есть какой-то другой способ ?
APAL
Можно, если заносить коды нажатия прямо в буффер клавиатуры.
Altair
Для разворота не пойдет.... windows в этомслучае не будет обрабатывать что там поместили в буфер... это только внутри программы.... виндовс и ушами не пошевелит на это.

Развернуть на весь экран можно если написать 2 прогу на 32 битном, и использоватьдля этого winapi
Altair
на весь экран развернуть программу
ShowWindow(FindWindow(nil, 'Безымянный - Блокнот'), <XXXX>);

где <XXXX> :

Цитата
SW_HIDE Скрывает окно и активизирует другое.
SW_MAXIMIZE Разворачивает окно.
SW_MINIMIZE Сворачивает окно.
SW_RESTORE Активизирует и выводит окно. Если окно было развёрнуто или свёрнуто - восстанавливает исходный размер и позицию.
SW_SHOW Активизирует и выводит окно с его оригинальным размером и положением.
SW_SHOWDEFAULT Активизирует с установками, заданными в структуре STARTUPINFO, которая была передана при создании процесса приложением запускающим нужную программу.
SW_SHOWMAXIMIZED Выводит окно в развёрнутом виде.
SW_SHOWMINIMIZED Выводит окно в виде пиктограммы на панели задач.
SW_SHOWMINNOACTIVE Выводит окно в свёрнутом виде на панели задач и не передаёт ему фокус ввода, т.е. окно, которое до этого было активно остаётся активно по прежнему.
SW_SHOWNA Отображает окно в его текущем состоянии. Активное окно остаётся активным по прежнему.
SW_SHOWNOACTIVATE Выводит окно в его последнем положении и с последними используемыми размерами. Активное окно остаётся активным по прежнему.
SW_SHOWNORMAL Выводит окно. Если оно было свёрнуто или развёрнуто - восстанавливает его оригинальные размеры и позицию


это для Дельфи или FPC ...
volvo
SHnur
Я надеюсь, это не аналог вот этой темы? angry.gif
http://forum.pascal.net.ru/index.php?showt...indpost&p=35672

Что именно подразумевается под словами
Цитата
имитировать нажатие кнопок клавиатуры и мыши, причём именно в Винду

Сразу возникает вопрос: чем пользуемся? В смысле, какой компилятор. И что именно необходимо сделать, если можно - поточнее...
Romtek
На компиляторе FPC пробовал такой вариант, у меня работает в WinXP:
{ Взято с _http://delphiworld.narod.ru }
{Переключение консольного приложения в полный экран }

{  
  There is no documented way to make a console application fullscreen.  
  The following code works for both NT and Win9x.  
  For win NT I used the undocumented SetConsoleDisplayMode and  
  GetConsoleDisplayMode functions.  
}  

Uses Windows, SysUtils;

{  
function GetConsoleDisplayMode(var lpdwMode: DWORD): BOOL; stdcall;  
  external 'kernel32.dll';  
 // lpdwMode: address of variable for current value of display mode  
}  

function NT_GetConsoleDisplayMode(var lpdwMode: DWORD): Boolean;  
type  
 TGetConsoleDisplayMode = function(var lpdwMode: DWORD): BOOL;  
 stdcall;  
var  
 hKernel: THandle;  
 GetConsoleDisplayMode: TGetConsoleDisplayMode;  
begin  
 Result := False;  
 hKernel := GetModuleHandle('kernel32.dll');  
 if (hKernel > 0) then  
 begin @GetConsoleDisplayMode :=  
     GetProcAddress(hKernel, 'GetConsoleDisplayMode');  
   if Assigned(GetConsoleDisplayMode) then  
   begin  
     Result := GetConsoleDisplayMode(lpdwMode);  
   end;  
 end;  
end;  

{
 function SetConsoleDisplayMode(hOut: THandle; // standard output handle  
 dwNewMode: DWORD;         // specifies the display mode  
 var lpdwOldMode: DWORD    // address of variable for previous value of display mode  
 ): BOOL; stdcall; external 'kernel32.dll';  
}  

function NT_SetConsoleDisplayMode(hOut: THandle; dwNewMode: DWORD;  
 var lpdwOldMode: DWORD): Boolean;  
type  
 TSetConsoleDisplayMode = function(hOut: THandle; dwNewMode: DWORD;  
 var lpdwOldMode: DWORD): BOOL;  
 stdcall;  
var  
 hKernel: THandle;  
 SetConsoleDisplayMode: TSetConsoleDisplayMode;  
begin  
 Result := False;  
 hKernel := GetModuleHandle('kernel32.dll');  
 if (hKernel > 0) then  
 begin @SetConsoleDisplayMode :=  
     GetProcAddress(hKernel, 'SetConsoleDisplayMode');
   if Assigned(SetConsoleDisplayMode) then  
   begin  
     Result := SetConsoleDisplayMode(hOut, dwNewMode, lpdwOldMode);  
   end;  
 end;  
end;  

function GetConsoleWindow: THandle;  
var  
 S: AnsiString;  
 C: Char;  
begin  
 Result := 0;  
 Setlength(S, MAX_PATH + 1);  
 if GetConsoleTitle(PChar(S), MAX_PATH) <> 0 then  
 begin  
   C := S[1];  
   S[1] := '$';  
   SetConsoleTitle(PChar(S));  
   Result := FindWindow(nil, PChar(S));  
   S[1] := C;
   SetConsoleTitle(PChar(S));  
 end;  
end;  

function SetConsoleFullScreen(bFullScreen: Boolean): Boolean;  
const  
 MAGIC_CONSOLE_TOGGLE = 57359;  
var  
 dwOldMode: DWORD;  
 dwNewMode: DWORD;  
 hOut: THandle;  
 hConsole: THandle;  
begin  
 if Win32Platform = VER_PLATFORM_WIN32_NT then
 begin
   dwNewMode := Ord(bFullScreen);  
   NT_GetConsoleDisplayMode(dwOldMode);  
   hOut := GetStdHandle(STD_OUTPUT_HANDLE);  
   Result := NT_SetConsoleDisplayMode(hOut, dwNewMode, dwOldMode);  
 end  
 else  
 begin  
   hConsole := GetConsoleWindow;  
   Result := hConsole <> 0;  
   if Result then  
   begin  
     if bFullScreen then  
     begin  
       SendMessage(GetConsoleWindow, WM_COMMAND, MAGIC_CONSOLE_TOGGLE, 0);  
     end  
     else  
     begin  
       // Better solution than keybd_event under Win9X ?  
       keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);  
       keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);
       keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), KEYEVENTF_KEYUP, 0);  
       keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);  
     end;  
   end;  
 end;  
end;  

{procedure TForm1.Button1Click(Sender: TObject);  }
var  
 s: string;  
begin  
 AllocConsole;  
 try  
   SetConsoleFullScreen(True);  
   Write('Hi, you are in full screen mode now. Type something [Return]: ');  
   Readln(s);  
   SetConsoleFullScreen(False);  
   // ShowMessage(Format('You typed: "%s"', [s]));  
 finally  
   FreeConsole;  
 end;

end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.