Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 |

 

  Вопрос: Пример для общ. форума Добавлено: 22.11.06 18:35  

Автор вопроса:  JMP
здесь http://www.vbnet.ru/forum/show.aspx?id=123230 справшивали

Тут отвечаем :)

' Жертва с текстовым полем по которому будем мочить
' из другой программы
#COMPILE EXE
#DIM ALL
'
#INCLUDE "win32api.inc"
'
%IDC_TextBox = 1234
'
CALLBACK FUNCTION cbDLGProc()
    SELECT CASE AS LONG CBMSG
        CASE %WM_COMMAND
            SELECT CASE AS LONG CBCTL
                CASE %IDCANCEL
                   DIALOG END CBHNDL
            END SELECT
    END SELECT
END FUNCTION
'
FUNCTION PBMAIN()
    LOCAL hDlg AS DWORD
    '
    DIALOG NEW  0 , "Жертва по которой будут стрелять", , , 220, 60, %WS_OVERLAPPEDWIN TO hDlg
    CONTROL ADD TEXTBOX, hDlg, %IDC_TextBox,"ТексБокс в который будет вставляться текс", 10,10,200,14
    DIALOG SHOW MODAL hDlg, CALL cbDLGProc
END FUNCTION



А это сама стрелялка по чужим окнам


#COMPILE EXE
#DIM ALL
#INCLUDE "WIN32API.INC"
'
%IDC_SC1 = 5001
%IDC_SC2 = 5002
%IDC_TextBox1 = 1001  ' вот это называется IDC(Identificator of control).
%IDC_TextBox2 = 1002  ' И эти номера назначаются програмером или
%IDC_TextBox3 = 1003  ' автоматической рисовалкой диалога.
%IDC_BUTTON   = 1004  ' Каждый контрол в Винде имет свой ID-номер !!!
'
CALLBACK FUNCTION cbDLGProc()
  STATIC hWnd, hTxtBx AS DWORD
  STATIC szTemp AS ASCIIZ *256
    SELECT CASE AS LONG CBMSG
        CASE %WM_COMMAND
            SELECT CASE AS LONG CBCTL
                CASE %IDC_TextBox3
                CASE %IDC_BUTTON
                    IF CBCTLMSG=%BN_CLICKED THEN
                       CONTROL GET TEXT CBHNDL,%IDC_TextBox1 TO szTemp
                       hWnd=FindWindow("",szTemp)
                       IF hWnd=0 THEN ? "Неправильно ввели текст имени чужого диалога" : EXIT FUNCTION
                       CONTROL GET TEXT CBHNDL,%IDC_TextBox2 TO szTemp
                       hTxtBx=GetDlgItem(hWnd,VAL(szTemp))
                       IF hTxtBx=0 THEN ? "Неверный номер чужого тексбокса" : EXIT FUNCTION
                       CONTROL GET TEXT CBHNDL,%IDC_TextBox3 TO szTemp
                       IF SendMessage(hTxtBx,%WM_SETTEXT, 0, BYVAL VARPTR(szTemp))=%FALSE THEN _
                           ? "Чет не получется установить, наверное жертва умная и блокирует нас :)"
                    END IF
            END SELECT
    END SELECT
END FUNCTION
'---------------------------------------------------------------------
FUNCTION PBMAIN()
    LOCAL hDlg AS DWORD
    '
    DIALOG NEW  0 , "Стелялка по чужим тексбоксам", 70, 70, 201, 130, %WS_OVERLAPPEDWIN TO hDlg
    CONTROL ADD LABEL, hDlg, %IDC_SC1,"Здесь ввести точное имя чужого диалога", 10,10,180,10
    CONTROL ADD TEXTBOX, hDlg, %IDC_TextBox1,"Жертва по которой будут стрелять", 10,20,180,14
    CONTROL ADD LABEL, hDlg, %IDC_SC2,"Здесь ввести номер IDC-чужого textbox", 10,40,180,10
    CONTROL ADD TEXTBOX, hDlg, %IDC_TextBox2,"1234", 10,50,180,14, _
                           %ES_NUMBER OR %WS_CHILD OR %WS_VISIBLE OR %ES_CENTER  ,%WS_EX_CLIENTEDGE
    CONTROL ADD TEXTBOX, hDlg, %IDC_TextBox3,"Этот текст будет вставлен", 40,90,100,14
    CONTROL ADD BUTTON,  hDlg, %IDC_BUTTON, "Поменять текс в чужом проиложении",20,115,150,12
    '
    DIALOG SHOW MODAL hDlg, CALL cbDLGProc
END FUNCTION
                                         

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #1
Добавлено: 22.11.06 23:10
Эх, PB я только начинаю изучать.
И собственно моя проблема - описана в соседней теме.
Буду признателен за помощь. (или может быть скачать другой pb где подскажете)

Но тем не менее спасибо!
Я кажется (:))))) понял про номер контрола, и что это такое. :)

Сегодня вечером встретил в С++:
#define IDC_MYEDIT 102

А затем в коде:
if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
CRect(40,100,140,120),this,IDC_MYEDIT);
По видимому это то.

А нумерация контролов начинается с нуля в каждом прложении или по всей ОС? И что если ИД двух контролов совпадает?

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 22.11.06 23:31
И собственно моя проблема - описана в соседней теме.
Буду признателен за помощь. (или может быть скачать другой pb где подскажете)
Есть, с ней я разобрался.
Завтра на свежую голову запущу пример, а то уже глаза закрываются

Ответить

Номер ответа: 3
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #3 Добавлено: 23.11.06 21:07
Буду признателен за помощь. (или может быть скачать другой pb где подскажете)


Искрене рад если смог чем то помочь.
Сегодня вечером встретил в С++:

#define IDC_MYEDIT 102


Оно самое. Точно также назначаются ИД и в ресурс файлах.
так как ЦПУ может работать только с цифрами, то люди просто придумали для себя понятный для человека переходник. Т.Е. вместо того чтобы говорить контрол номер 2345 назначаеться
константа %IDC_MyDearTextBoxNumber01 =23423 .
если глянете в ПБ на файл win32api.inc Вы найдете что больше чем 2/3 файла занимает описание виндовых констант

А затем в коде:
if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
CRect(40,100,140,120),this,IDC_MYEDIT);
По видимому это то.


то самое. WS_CHILD - это тоже константа со своим номером.
в данном случае расшифровывается как WS- окошечный Стиль.
 дальше WS_CHILD - обозначет что данное окошко будет ребенком какого то друго окна и.д. Вообще в Винде все что Вы видите на экране - это все-окна. т.е тот же самый ТексБокс-это тоже окно которое можно создать через CreateWindow с предопределенным классом "Edit".

А нумерация контролов начинается с нуля в каждом прложении или по всей ОС? И что если ИД двух контролов совпадает?


Нет. Константы от 0-100 рекомендуется не трогать, т.к они могут использоваться системой. например константа =1
назначена для VersionInfo в ресурсах.

И назначеные константы для контролов действуют только для вашего приложения. Глобальные константы винды можно найти в заголовочных файлах *.INC.

Т.е. как винда находит нужный элемент:

 Создаеться процесс и получает от винды свой номерИД.
Но процесс это еще не программа. Процесс сам по себе абстрактное понятие - это комбинация ресурсов(память.. и прочее пассивное "что-то";) И действия. Под действиями подразумевается выполнение каких то действий или кратко ТРИД. Т.е. любой процесс должен иметь как миниум ресурс-память(где расположится код, данные) и как миниум один трид - код предназначеный к выполнению. Трид тоже имеет свой ИД. и дальше пошло поехало, трид создает диалог(ему присваивается виндой его номер-так называемый хэндл) на диалог(родитель) кидаються контролы(дети) которые в свою очередь получают от винды свой хэндл который образуется очень грубо говоря из комбинации хэндл-родителя+номер-контрола.

Т.е. на самом деле все очень просто(когда все это уложится в мозги). Пройдя эту виндовозную школу, Вы запросто сможете переключится и на С и на дельфи и на ассемблер(кстати под виндой писать на асме гораздо просче чем под досом, так как есть куча готовых АПИ, вызывая которые сразу получаем то что нужно.

И что если ИД двух контролов совпадает?


То что и должно быть. Если стоит два домика с одинаковым номером, как Вы думаете в какой из них почтальон будет скидывать письма ?

Т.е. это ответственность програмиста что бы номера не пересекнулись.

ПБ вообще занимает на рынке компиляторов определенное место, - мощь С и ассемлера и простота бэйсика. Но для того чтобы использовать его, надо знать как устроена сама винда и как она работает.

Постарайтесь найти книгу Петзольда, где то есть в рунете.
как освоите базу можно переходить к Рихтеру(более глубокая книга , но требующая предварительных знаний о винде)

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

Ну все пиво закончилось :(

P.S.
В моем расписании как работает винда, возможно кое кто найдет неточности. Сразу хочу сказать, что просто пытался дать человеку наиупращенейшую модель, чтоб стартануть. Знаете как луше преподнести - милости просим. Так что если будут дополнения, зная наш ментиталитет ;), то лучше по существу чтоб не сбивать человека. А вообще лучший подсказчик книги и работа с примерами ИМХО.

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 25.11.06 10:40
Я только исправил

  STATIC hWnd, hTxtBx AS DWORD

на
  STATIC hWnd AS LONG, hTxtBx AS DWORD

И знаки ? на MsgBox
Потому что PB не понял, что такое "?" и я тоже.
Но дальше все ok.

Ты мне открыл, что оказывается PB - замечательная среда. А главное указал направление.
Спасибо, JMP!

Искрене рад если смог чем то помочь.
Не то слово

Ответить

Номер ответа: 5
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #5 Добавлено: 25.11.06 17:13
STATIC hWnd, hTxtBx AS DWORD


Сорри, забыл что 7-ка не понимает этого.
в 8.х можно так как у меня было написано.
И знаки ? на MsgBox


? - это в 8.х и 4.х сокращение для MsgBox(PBwin) и PRINT для PBcc(console compiler)

Удачи.

Ответить

Номер ответа: 6
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #6
Добавлено: 25.11.06 20:22
Удачи.
Спасибо, JMP.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам