Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Вниз

Инициация события   Найти похожие ветки 

 
Igor1984   (2002-12-01 18:03) [0]

Обработка события это как раз понятно. Но передо мной встала дуругая задача - инициация события. Как дать понять виндам что нажалась левая клавиша мышки или клаиша на клавиатуре без собственно физического действия? Очень прошу, помогите.

Заранее спасибо.


 
LongIsland   (2002-12-01 18:17) [1]

А PostMessage?


 
Igor1984   (2002-12-01 20:03) [2]

А поподробнее :)?

Вот что я прочитал в справке:

BOOL PostMessage(

HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

Это же всего лишь проверка посланно ли сообщение,верно? Ведь результат функции boolean.

Люди, HELP. Просто кусок кода для нажатия клавиши на клаве и на мышке.


 
Сергей Бушин   (2002-12-01 20:29) [3]

Функция PsotMessage возрващает результат и указывает удалось ли поместить сообщение в очередь.
Есть SendMessage аналогичная предыдущей по смыслу, но ожидает окончания обработки сообщения, и возвращает результат обработки.

PostMessage(Handle,WM_MOUSEMOVE,MK_LBUTTON,XPos,YPos)


 
LongIsland   (2002-12-01 20:31) [4]


> Igor1984 (01.12.02 20:03)


> Это же всего лишь проверка посланно ли сообщение,верно?
> Ведь результат функции boolean.

Сам-то понял, что написал?

Тип BOOL - это Виндосовский тип. Возвращаемой значение - имеет ненулевое значение, если сообщение послано. В чем проблема-то?


 
Diamond Cat   (2002-12-01 23:58) [5]

МДА богат кладезь знаний, postmessage ставит сообщение в очередь на обработку того приложения к которому оно было отправлено (hwnd), sendmessage ставит сообщение непосредственно на обработку, result у этих функций разный в случае с postmessage это булево значение, при sendmessage это Lresult или попросту некая цифра которая для разных сообщений может означать разный результат.

-> Тип BOOL - это Виндосовский тип , интересно с каких это пор


 
Igor1984   (2002-12-02 11:34) [6]


> PostMessage(Handle,WM_MOUSEMOVE,MK_LBUTTON,XPos,YPos)


Чё то не пашет :( Но всё равно спасибо.

Пишет Undeclared identifier WM_MOUSEMOVE. Все стандартные модули подключены (D5). Можно работающий код для мышки и клавы. Ау, отзовитесь!


 
Song   (2002-12-02 11:37) [7]

>>Все стандартные модули подключены (D5).
Messages.dcu не подключён.


 
Igor1984   (2002-12-02 13:01) [8]

Ладно, подключил uses messages. Теперь на PostMessage(Handle,WM_MOUSEMOVE,MK_LBUTTON,XPos,YPos) пишет too many actual parametrs. Удаляю ypos - компилится, но ни фига не происходит. В качестве handle указал form1.handle но ни фига нужного мне не происходит.


 
Song   (2002-12-02 13:07) [9]

Надо LParam и WParam составлять из координат.


 
Igor1984   (2002-12-02 13:14) [10]

Ты имеешь в виду
PostMessage(Handle,WM_MOUSEMOVE,MK_LBUTTON,mouse.cursorpos.x,mouse.cursorpos.y);

Всё равно too many actual parameters.
Будь другом, дай пожалуйста
1)полный кусок процедуры которая бы клацала мышкой вне окна совей программы.
2) -"-"- клацала клавишей клавиатуры вне окна своей программы.


 
Song   (2002-12-02 13:31) [11]

Ты бы, если в хэлп бы глянул сразу бы всё понял:

The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse.

WM_MOUSEMOVE
fwKeys = wParam; // key flags
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor


Parameters

fwKeys

Value of wParam. Indicates whether various virtual keys are down. This parameter can be any combination of the following values:

Value Description
MK_CONTROL Set if the CTRL key is down.
MK_LBUTTON Set if the left mouse button is down.
MK_MBUTTON Set if the middle mouse button is down.
MK_RBUTTON Set if the right mouse button is down.
MK_SHIFT Set if the SHIFT key is down.


xPos

Value of the low-order word of lParam. Specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.

yPos

Value of the high-order word of lParam. Specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.



Remarks

The MAKEPOINTS macro can be used to convert the lParam parameter to a POINTS structure.

Если лень гемороится можешь использовать mouse_event()


 
igor_1984   (2002-12-02 13:39) [12]

У меня и близко не такой help. Но спасибо, всё встало на свои места. Действительно, спасибо.


 
Song   (2002-12-02 13:43) [13]

2igor_1984 (02.12.02 13:39)
Такой хэлп нахоится в меню хэлп - WinSDK


 
Igor1984   (2002-12-02 13:50) [14]

Угу, а нет чего вроде keyboard_event()? А то mouse event это как раз то что мне нужно.


 
Игорь Шевченко   (2002-12-02 14:14) [15]

keybd_event


 
Igor1984   (2002-12-02 14:33) [16]

Ich bin du hast! В смысле спасибо. Но опять вопрос:
keybd_event(vk_add,0,0,0); работает-жмёт "+"
А вот keybd_event(vk_A,0,0,0); нет. В смысле что букву А жало. Пишет undeclared identifier. Чё делать? Ведь в таблице этих virtual кодов пишется что код букву а это vk_a.


 
Song   (2002-12-02 14:47) [17]

Ord("A")


 
igor_1984   (2002-12-02 14:56) [18]

Ну да. ord("a") жмёт еденицу. ord("b")-двойку и.т.д. А чтобы именно символ?

kebd_event(ord("a"),0,0,0); жмёт еденицу,проверил-точно.


 
Игорь Шевченко   (2002-12-02 15:27) [19]

keybd_event ($65,0,0,0) жмет "a" :-)


 
Игорь Шевченко   (2002-12-02 15:28) [20]

Виноват, keybd_event($61,0,0,0) жмет "a", $65 - "e" :-)


 
Igor1984   (2002-12-02 22:37) [21]


> Виноват, keybd_event($61,0,0,0) жмет "a", $65 - "e" :-)


Неа $61 это "1" а $65 это "5". А что же с "a" всё-таки???


 
Игорь Шевченко   (2002-12-03 11:17) [22]

Igor1984 © (02.12.02 22:37)

Угу. Воистину "5"

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.SetFocus();
keybd_event($41,0,0,0);
keybd_event($41,0,KEYEVENTF_KEYUP,0);
end;

а вот так вот "a" выводится. See Virtual Key codes in win32.hlp



 
Igor1984   (2002-12-03 12:12) [23]

Угу, точно.Фенкс. А я ещё один изврат нашёл
keybd_event(MapVirtualKey(ord(65),2),0,0,0); Тоже а :)


 
Игорь Шевченко   (2002-12-03 13:06) [24]

Igor1984 © (03.12.02 12:12)

Я вот тоже изврат нашел - ord(65) - это круто!


 
Игорь1984   (2002-12-03 19:50) [25]

Неа ord(65) это всё та же еденица! так что это не круто :)



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.011 c
1-28894
XPatriot[d.m.b]
2003-01-30 20:55
2003.02.10
Графическая область


1-28929
kva
2003-01-31 10:54
2003.02.10
Глюк UpDown


1-28790
Drohen
2003-02-01 23:38
2003.02.10
Как записать в реестр значение типа DWORD?


3-28689
Ag2002
2003-01-24 15:10
2003.02.10
Знак минус


4-29150
malkolinge
2002-12-26 12:29
2003.02.10
TreeView with CheckBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский