Страница: 1 |
Страница: 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-сайт:
Профиль | | #1
Добавлено: 22.11.06 23:10
Эх, PB я только начинаю изучать.
И собственно моя проблема - описана в соседней теме.
Буду признателен за помощь. (или может быть скачать другой pb где подскажете)
Но тем не менее спасибо!
Я кажется ()))) понял про номер контрола, и что это такое.
Сегодня вечером встретил в С++:
А затем в коде:
CRect(40,100,140,120),this,IDC_MYEDIT);
А нумерация контролов начинается с нуля в каждом прложении или по всей ОС? И что если ИД двух контролов совпадает?
Номер ответа: 2
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #2
Добавлено: 22.11.06 23:31
Буду признателен за помощь. (или может быть скачать другой pb где подскажете)
Завтра на свежую голову запущу пример, а то уже глаза закрываются
Номер ответа: 3
Автор ответа:
JMP
Вопросов: 6
Ответов: 171
Профиль | | #3
Добавлено: 23.11.06 21:07
Искрене рад если смог чем то помочь.
#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-сайт:
Профиль | | #4
Добавлено: 25.11.06 10:40
Я только исправил
на
И знаки ? на MsgBox
Потому что PB не понял, что такое "?" и я тоже.
Но дальше все ok.
Ты мне открыл, что оказывается PB - замечательная среда. А главное указал направление.
Спасибо, JMP!
Номер ответа: 5
Автор ответа:
JMP
Вопросов: 6
Ответов: 171
Профиль | | #5
Добавлено: 25.11.06 17:13
Сорри, забыл что 7-ка не понимает этого.
в 8.х можно так как у меня было написано.
? - это в 8.х и 4.х сокращение для MsgBox(PBwin) и PRINT для PBcc(console compiler)
Удачи.
Номер ответа: 6
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #6
Добавлено: 25.11.06 20:22