{{notification.text}}

MirGames

Почетный ламер :)
02.03.06 03:20
0
как програмно симитировать нажатие клавиши <Windows>?
#1
аксакал
02.03.06 03:28
0
Чтобы "обмануть" какое-то приложение:
Код
  PostMessage(Handle, WM_KEYDOWN, VK_LWIN, 0);
  PostMessage(Handle, WM_KEYUP, VK_LWIN, 0);
Handle - хэндл того окна, что "обманываешь"...

Для полноценной эмуляции нажатия:
Код
  keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, 0);
  keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
"Обманывает" всю систему :)

P.S.
Точно так же для правой Win клавиши (VK_RWIN)
Отредактировано: 02.03.06 03:36
#2
Почетный ламер :)
02.03.06 04:03
0
опа, где нашел... :blink:
такушки теперь бы разобраться кто такой хендл с кем его едят и где его взять....
#3
аксакал
02.03.06 04:24
0
Нашёл в яндексе, но т.к. решили народ туда не посылать - результат запроса разместил здесь ;)

У каждого окна в Windows есть свой уникальный идентификатор - Handle. Чтобы найти Handle окна, имя или класс которого тебе известны - необходимо воспользоваться WinAPI функцией FindWindow.
Cтандартная форма VCL также имеет свой Handle (т.к. она тоже - окно) Form1.Handle.
#4
Почетный ламер :)
02.03.06 21:27
0
в uses что-нибудь добавлять надо?
Отредактировано: 02.03.06 21:28
#5
аксакал
02.03.06 21:32
0
Windows
#6
Почетный ламер :)
02.03.06 21:53
0
ок
положим обмануль и она (форма) свернулась.
как сэмулировать щелчек мыши по иконке- развернуть окно?
#7
MirGames Dev
02.03.06 22:37
0
У тебя неэффективные решения :) Т.к. можно послать окну команду на сворачивание или на разворачивание. ;)
#8
аксакал
02.03.06 22:42
0
Murzik18
Извращенец, найди хэндл окна, и передай ему WM_ACTIVATE, или WM_ACTIVATEAPP c "w" параметром WA_ACTIVE...

Но если без щелчка мыши - никуда... Найди хэндл панели с пуском, затем найди дочерние окна (кнопочки), среди них выдели нужное тебе окно. Затем найди его Rect, SetCursorPos в центр этого Rect'а и
Код
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);...
#9
Почетный ламер :)
03.03.06 15:16
0
я не извращенец.
я искал других путей. но никто не указал мне дорогу.
я пробовал другие способы, но ни один из них не осветил мне путь
я взывал, но ответом мне было-"это невозможно".
я ждал ответа, но все решали задачки по делфи.
я научился делать это рукаим,но руками было неприемлимо для проекта.
и вот я хочу чтоб программа делала это сама.


http://forum.mirg.ru/index.php?showtopic=1411
http://forum.mirg.ru/index.php?showtopic=1452
http://forum.mirg.ru/index.php?showtopic=1437

о познавшие свет. укажите же не столь тернистый путь.
Отредактировано: 03.03.06 15:20
#10
Почетный ламер :)
06.03.06 15:17
0
окошко уже исправно сворачивается
Цитата(XProger @ 2.03.2006 - 15:42)
[snapback]18946[/snapback]
Извращенец, найди хэндл окна, и передай ему WM_ACTIVATE, или WM_ACTIVATEAPP c "w" параметром WA_ACTIVE...

пробовал и то и другое, окно становится активным но не разворачивается.

Цитата(XProger @ 2.03.2006 - 15:42)
[snapback]18946[/snapback]
Но если без щелчка мыши - никуда... Найди хэндл панели с пуском, затем найди дочерние окна (кнопочки), среди них выдели нужное тебе окно. Затем найди его Rect, SetCursorPos в центр этого Rect'а и


как это сделать ?
Отредактировано: 06.03.06 15:18
#11
Почётный лектор
06.03.06 17:45
0
Цитата(Murzik18 @ Сегодня, 11:17)
[snapback]19086[/snapback]
пробовал и то и другое, окно становится активным но не разворачивается.

Конечно, потому что надо ShowWindow с парматром SW_RESTORE вызывать, и никаких WM_ACTIVATE.

Цитата(MSDN)
SW_RESTORE
Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
Отредактировано: 06.03.06 17:47
#12
Почетный ламер :)
06.03.06 18:31
0
В КОДЕ ЭТО КАК ДОЛЖНО ВЫГЛЯДЕТЬ?
#13
if not b then b:=not b;
06.03.06 18:47
0
Код
ShowWindow(Form1.Handle, SW_RESTORE);
#14
аксакал
06.03.06 23:01
0
1)
Код
WM_ACTIVATEAPP :
  if LOWORD(wParam) = WA_ACTIVE then
    ShowWindow(wnd_handle, SW_SHOWNORMAL)
  else
    ShowWindow(wnd_handle, SW_SHOWMINIMIZED);

2)
FindWindowEx + MSDN
#15
Почетный ламер :)
07.03.06 03:57
0
спасибо всем- оно работает!!!!
#16
if not b then b:=not b;
10.03.06 02:22
0
примечание:
SW_RESTORE работает также, как и SW_SHOWNORMAL
#17
Почётный лектор
10.03.06 19:18
0
Примечание: в данном случае.
#18
Почетный ламер :)
18.05.06 15:20
0
теперь вопрос обратный, как в программе заблокировать эту вонючую клавишу <Windows>?
#19
Mirage
18.05.06 23:14
0
Не надо ее блокировать. Лучше корректно обработать потерю девайса.;)
#20
Почетный ламер :)
19.05.06 14:20
0
как?
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}