Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пример использования Win32::Api, нужен какой нибудь простой примерчик 
:(
    Опции темы
burakov
Дата 22.11.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Добрый день.

Пытаюсь научиться пользоваться Win32::Api. Но чего то ничего не выходит. Раздобыл доки на win32api
нашел в них функцию попроще.
вот такую (выдернул из справочника Win32api)

**********
Функция SwapMouseButton
 Описание:
 function SwapMouseButton(Swap: Bool): Bool
Изменяет на обpатное или восстанавливает назначение левой и пpавой кнопок мыши в соответствии со значением Swap.
Паpаметpы:
  Swap: Не нуль, если нужно поменять местами назначение кнопок или нуль, если нужно восстановить исходные назначения.
 Возвpащаемое значение:
Не нуль, если назначения изменены на обpатные; нуль - если нет.
 функция находится в файле user32.dll
**********

пытаюсь теперь из perl переключить клавиши мыши. вот таким вот образом.

Код


use Win32::Api;

  $function = Win32::API->new (
      user32.dll, SwapMouseButton (Bool) 
  );

$return = $function->Call(3, 2);



Что делает $function вроде понятно. При помощи модуля Win32::Api вызывает внешнюю функцию.
Но непонятно зачем $return?

Ну и весь код не рабочий получился. Пишет 
что
"...Undefined subroutine  &main::SwapMouseButton..."

Может справочник по API г... smile  и такой функции в API дествительно нет, может руки кривые и голова тоже. но не получается.

Пожалуйста приведите пример использования модуля Win32::Api, чтоб он чего нибудь простенькое при помощи функций Win32API делал. Ну например время узнавал, ну или кнопки мыши переключал, как я пытался сделать или может еще чего smile.


Спасибо.




--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
shamber
Дата 22.11.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



Для начала попробуйте почитать мануал повнимательнее и сравните свой код с этим

Код

use Win32::API;
  $function = Win32::API->new(
      'mydll', 'sum_integers', 'II', 'I',
  );
  $return = $function->Call(3, 2);



Если не замечаете, подсказки:

1. кавычки
2. параметры функции

Вот исправленный код.

Код

use strict;
use Win32::API;
  my $f = Win32::API->new(
      'user32.dll', 'bool SwapMouseButton (bool)',
  );  
 my  $return = $f->Call(1);

PM MAIL Jabber   Вверх
KSURi
Дата 22.11.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 5
Всего: 27



Вот небольшой кусок из моего скрипта, если поможет:
Код

my $FindWindow  = Win32::API -> Import('user32',
                                       'HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)');
my $SendMessage = Win32::API -> Import('user32',
                                       'LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)');

($FindWindow && $SendMessage)
    || die 'Failed importing WinAPI';
...
my $lResult = SendMessage($hWnd, 0x0010, 0, 0); # 0x0010 == WM_CLOSE

Это немного другой способ, в отличие от того, который указал shamber. Но оба работают и описаны в документации.

Это сообщение отредактировал(а) KSURi - 22.11.2007, 17:41


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
burakov
Дата 23.11.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Большое спасибо за ответы.

В принципе я попробовал, понял, что модуль работает. Правда он выдает какие то ошибки, (я пробовал с  функцией, которая переключает клавиши мыши туда-сюда). Но клавиши при этом ПЕРЕКЛЮЧАЮТСЯ. Что меня вполне удовлетворило smile.

но теперь вопросов еще больше... smile.

Вот например. Функция
my $FindWindow  = Win32::API -> Import('user32',
                                       'HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)');

требует параметрами имя класса, и имя окна. Мне допустим, нужно закрыть окно интернет-эксплойера. Как узнать (в каких справочниках это написано?) какого класса это окно и какое у него имя?

Ну по последнему примеру у понял, что закрыть его можно функцией SendMessage smile

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

Спасибо.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
burakov
Дата 23.11.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



И еще вопросик от начинающего (и запутавшегося).

читаю вот всякую литературу, в которой написано примерно следующее.
Что мол, каждый язык программирования, конечно заточен для своих нужд, ну т.е. в Perl (например, очень удобно работать со строками) а для C++ уже написаны куча классов, которыми бери и пользуйся, не надо сочинять свои. вот кстати и WINAPI тоже вроде как на С++ написаны.

Ну и тут же я читаю, что в принципе на любом языке (будь то перл или Си) можно написать все что угодно. (в принципе модуль ТК для перл и подтверждает то, что вот можно и окошки рисовать).

Ну а как это все самому написать? 
Вот например (отбросим окна - там все сложнее). Ну вот обыкновенная консоль.
Хочу чтобы вывод в нее осуществлялся зеленым цветом. Как это сделать не используя модули ?
как самому описать то, что вывод на консоль осуществлять зеленым цветом?

Какую книгу не откроешь - там переменные, массивы да циклы + набор уже написанных функций. Все.
Но это же уже укрупненные структуры. Смотрел на модуль Win32::Console - там к этому модулю еще идут и console.dll, console.ext. Про DLL в книгах про перл чего то вообще не пишут (или не там читаю?). Как средствами перл написать DLL?

Опишите пожалуйста эту "вертикаль" - от зеленых букв в консоли до того как это описать.
На чем написан сам Перл?...

Чего то никак я структуру от красивого оконного интерфейса до машинного кода понять не могу...
может чего почитать посоветуете?





--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
shamber
Дата 23.11.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 1
Всего: 18



Уважаемый
burakov
по поводу ваших впоросов, аля Ну а как это все самому написать? 
Вам уже давно дали дельный совет. Читайте литературу..... чем больше тем лучше. и задавайте конкретные вопросы.
А так вы ничего не добьетесь ИМХО.
PM MAIL Jabber   Вверх
burakov
Дата 23.11.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



На счет литературы я согласен.
За некорректные вопросы я извиняюсь... (попытка не пытка)...

Вопрос какую литературу читать???
Так можно всю жизнь читать, читать и вовсе не понять, то чего хочется узнать ... Тем более что хочется читать по-русски smile. (так пытаясь выстроить свою "вертикаль" от окошек к машинным кодам - я зашел на intuit.ru и попытался почитать про архитектуру и принцип работы ЭВМ. Так там меня как спусили в регистры, прерывания... чуть голову не снесло). 

Поэтому хочется читать еще и эффективно... smile
В какой книге по перл описано создание DLL на перл?


Еще раз извиняюсь за свои некорректные вопросы.

Всем спасибо. smile.




--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
KSURi
Дата 23.11.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 5
Всего: 27



Цитата
Как узнать (в каких справочниках это написано?) какого класса это окно и какое у него имя?

Есть много программ, позволяющих узнавать служебную информацию об окнах. Одна из таких, WindowSpy вроде, если память не изменяет, входит в поставку Microsoft Visual Studio.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
aksined
Дата 5.12.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 26.12.2005

Репутация: 1
Всего: 1




Привет
Цитата

Чего то никак я структуру от красивого оконного интерфейса до машинного кода понять не могу...

Думаю, ты не с того конца начал.
На перле можно много чего сделать.
Но написание приложений под винапи, по-моему, уже изыск. Так же, как и написание пользовательского ГУИ средствами ТК.
Есть более удобные средства для этого.
Это мое мнение и просьба сильно не бить.

Могу посоветовать книгу Т. Кристиансена и Н. Торкингтона "Perl: библиотека программиста".
Там есть рецепт по выводу на консоль другим цветом. Не уверен, правда, что этот модуль реализован для Windows.

Не очень понятно желание писать без модулей. Для успешного использования устройства ведь необязательно писать собственный драйвер.


Это сообщение отредактировал(а) aksined - 5.12.2007, 18:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0979 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.