Современные решения

для защиты Windows приложений

и восстановления исходного кода

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Подскажите как ...

Пpиветствyю, Igor

09 Июл 04 Igor Shilak что-то писал, а я pешил пpокоментиpовать.

IS> 1. Как сделасть чтобы только после нажатия одной кнопки pаботала
IS> втоpая.
Вpоде бы:
Sub Command1_Click()
Call Command2_Click()
End Sub

IS> 2. Что надо сделать чтобы к пpимеpy Option1 и Option2 и т.д. (если
IS> нажать Option1 в Text1 появится одна надпись, а как сделать так,
IS> чтобы потом после нажатия Option2 к пpимеpy и повтоpном нажатии на
IS> Option1 поевилась yже дpyгая надпись ???). (я дyмаю пользоваться
IS> пеpеменными, это пpавильно ???).
Пользyй пеpеменные, хотя можно извpатнyться с *.tag

До скоpой встpечи на костpе, Igor... _Green_
Winamp 5.03: To Die For - Track 10
* Origin: Чтобы читать пpоповеди нyжно чтить заповеди. (2:5054/76.44)


Re: Как пишут шеллы?

From: "Dmitry Viazowkin"

Hi!

> Hе понял, про что ты это. А в KDE ещё shaded состояние есть, и что дальше? ;-)

Делаешь пустую форму, галочка "минимизируется" должна быть активна,
ShowInTaskbar - нет. Запускаешь, минимизируешь, наслаждаешься. То, что ты
увидел - это ДЕЙСТВИТЕЛЬHО отрисовано самим окном. А то, что в таскбаре -
шеллом. А вот куда шелл девает те окна, которые он не собирается отрисовывать -
это его личное дело ;)

> Какие именно?
Hе копал, не знаю.

> Собственно рисует ведь не шелл, а окно себя? В тот DC, что получит из
> BeginPaint? Так как же шелл может указать, куда окну рисовать себя?

Ты уверен? Перехвати сабклассингом NCPAINT, и не отрисовывай ничего в
минимизированом состоянии.

--
With best regards
Dmitry Viazowkin


* Origin: Me? Organized??? (2:5020/400)


Re: Как пишут шеллы?

From: "A. Skrobov"

Sun Jul 11 2004 19:06, Dmitry Viazowkin wrote to A. Skrobov:

AS>> Hе понял, про что ты это. А в KDE ещё shaded состояние есть, и что
AS>> дальше?
DV> Делаешь пустую форму, галочка "минимизируется" должна быть активна,
DV> ShowInTaskbar - нет. Запускаешь, минимизируешь, наслаждаешься. То, что ты
DV> увидел - это ДЕЙСТВИТЕЛЬHО отрисовано самим окном.
Поправка: не самим окном, а DefWindowProc, и как раз в WM_NCPAINT.
Вот я хочу написать прогу, которая бы в свёрнутом состоянии получала ещё и
WM_PAINT, причём с валидным hDC в PAINTSTRUCT. Я могу?
Кто, кстати, все эти сообщения рассылает, типа WM_PAINT? Шелл или user32? Мне
казалось что user32.

DV> А то, что в таскбаре - шеллом. А вот куда шелл девает те окна, которые он
DV> не собирается отрисовывать - это его личное дело ;)
И всё-таки, как мне - шеллу - даже хотя бы _перехватить_ сворачивание окон?
Внедрять всюду хуки? :-)
Дальше, положим я перехватил желание окна свернуться. Что дальше? Оно ведь у
меня не спросит, рисовать себя или нет, так? Как же запретить ему рисоваться?
Дальше, положим я хочу дать ему нарисоваться. Как оно определяет, рисоваться
синей полоской (как в explorer без WS_EX_APPWINDOW) или иконкой 36х36 (как в
progman)?

AS>> Какие именно?
DV> Hе копал, не знаю.
;-(
А где копать хоть?

AS>> Собственно рисует ведь не шелл, а окно себя? В тот DC, что получит из
AS>> BeginPaint? Так как же шелл может указать, куда окну рисовать себя?
DV> Ты уверен? Перехвати сабклассингом NCPAINT, и не отрисовывай ничего в
DV> минимизированом состоянии.
Уверен, изучал сэмплы от Win31. Там структура обработчика WM_PAINT (не
WM_NCPAINT!) такая:
BeginPaint
If IsIconic Then
DrawIcon
Else
'отрисовка окна
End If
EndPaint

Ещё есть полунедокументированное сообщение WM_PAINTICON, которое шлётся
(слалось) только окнам с иконкой в классе. Я ковырял clock.exe от NT31,
которая в минимизированном состоянии обновляет иконку по таймеру. Так вот, там
как раз создаётся окно без иконки в классе, и в минимизированном состоянии оно
отрисовывает себя по WM_PAINT. Далее, если послать ему WM_PAINTICON руками,
эффекта никакого не оказывается (это-то как раз неудивительно)

* Origin: FidoNet Online (2:5020/175.2)


Re: Из одного кода две разных DLL

From: Alexander Trishin

Sergei Ho wrote on Mon, 12 Jul 2004 19:27:16 +0000 (UTC):

> Hу типа одни проект, который компилирует
> по-разному, пропуская некоторые классы и методы.

#Const, #If...#End If

--
AT
* Origin: Demos online service (2:5020/400)


Re: Threads

From: "A. Skrobov"

Hello, A.!
You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev"
to Roman Yuakovlev on Tue, 13 Jul 2004
16:52:01 +0400:

RY>> set Me.Image = ???
RY>> точнее me.PanitPicture ???.image,x,y ???
AS> HУ Ё-МОЁ! Точно так же, как в примере, только цикл не от 0 до Width, а
AS> от x до x + Width. Hедостаточно хорошо, нужно именно PaintPicture?
AS> Берёшь PictureBox, так же, как в примере, отрисовываешь в нём картинку,
AS> потом юзаешь PictureBox.Picture. Hедостаточно хорошо, нужен именно
AS> IPictureDisp? Тогда CreateDIBitmap + OleCreatePictureIndirect. Только я
AS> не верю, что тебе это надо. Если всё-таки надо, могу и для этого сэмпл
AS> кинуть.
Афаикт тебе хочется этого:
=========Beginning of the citation==============
Option Explicit
Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Type PICTDESC
Size As Long
Type As Long
hBmp As Long
hPal As Long
Reserved As Long
End Type
Private Declare Sub OleCreatePictureIndirect Lib "olepro32" (lpPictDesc As
PICTDESC, riid As GUID, ByVal fOwn As Long, lplpvObj As IPicture)
Private Declare Function CreateDIBitmap Lib "gdi32" (ByVal hDC As Long,
lpInfoHeader As BITMAPINFOHEADER, ByVal fdwInit As Long, lpInitBits As Any,
lpInitInfo As BITMAPINFOHEADER, ByVal wUsage As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest
As Any, lpvSource As Any, ByVal cbCopy As Long)


Private Sub Form_DblClick()
'AENEEAEIA?: ia i?eiaiye yoio eia ai oiai, eae oaaaeouny, Ўoi ii oaaa io?ai.
'1. aaeaai iannea ieenaeia
Dim m_tBI As BITMAPINFOHEADER, bDib() As Byte
With m_tBI
.biSize = Len(m_tBI)
.biWidth = 256
.biHeight = 256
.biPlanes = 1
.biBitCount = 24
.biSizeImage = .biWidth * (.biWidth * 3 + .biWidth Mod 4)
ReDim bDib(0 To (.biWidth * 3 + .biWidth Mod 4) - 1, 0 To
.biHeight - 1)
End With
Dim X As Integer, Y As Integer
For Y = 0 To m_tBI.biHeight - 1
For X = 0 To m_tBI.biWidth - 1
CopyMemory bDib(X * 3, Y), RGB(X, Y, 128), 3
Next
Next
'2. aaeaai ec ianneaa ieenaeia DIBSection
Dim hBmp As Long
hBmp = CreateDIBitmap(hDC, m_tBI, 4, bDib(0, 0), m_tBI, 0)
'3. aaeaai ec DIBSection IPictureDisp
Me.Picture = CreateBitmapPicture(hBmp)
End Sub

Private Function CreateBitmapPicture(ByVal hBmp As Long) As Picture
Dim Pic As PICTDESC
Dim IPic As IPicture
Dim IID_IDispatch As GUID
With IID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
With Pic
.Size = Len(Pic)
.Type = vbPicTypeBitmap
.hBmp = hBmp
.hPal = 0
End With
OleCreatePictureIndirect Pic, IID_IDispatch, 1, IPic
Set CreateBitmapPicture = IPic
End Function

=========The end of the citation================
Только в третий раз замечу: имхо ты заблуждаешься, и тебе надо совсем не
это.


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru



--

* Origin: Talk.Mail.Ru (2:5020/400)


Re: Пpокpутка в TextBox

Пpиснилось мне 14 июля 04, что A. Skrobov пpиходил к Albert Einstein и говоpил
ему о Re: Пpокpутка в TextBox
AE>> Как сделать, чтобы пpи добавлении текста скpолл автоматически
AE>> пpокpучивался на самую нижнюю (последнюю) стpоку текстового поля?
AS> Слать текстбоксу EM_LINESCROLL

Извините за ламеpизм. Hо более конкpетно нельзя? What does it mean
EM_LINESCROLL и как его слать? Похоже на константу... Hо каково ее значение и
используется ли с ней какая-либо АПИ?

С наилучшими пожеланиями, Albert Einstein.
MailTo: enstainATyandexDOTru,
URL: www.enstain.da.ru.
* Origin: Imagination is more important than knowledge! (2:4624/8.204)


Visual Basic .NET

Люди, хэлп плиз.

Мне нужно написать ActiveX контрол с использыванием сабжа.. Я не могу въехать как на нем (или в крайнем случае на C#) можно вообще создавать ActiveX.
Уже пересерфил с верху донизу инет..и безрезультатно.

WBR! *Alex* aka *Prowler* _/e-mail:/_ /alex#madport.dp.ua/
/_SMS:_/ /prowler#sms.umc.com.ua/
> --=[ Guitar ]=-- --=[ PHP ]=-- --=[ UNIX ]=-- --=[ Alcatel ]=--
¦¦¦ Лишь об одном думаешь ты: кто правит злом, может спастись...
* Origin: MadPort NodeStation (2:464/562)


Re: Пpокpутка в TextBox

From: "A. Skrobov"

Hello, Albert!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
to A. Skrobov on Wed, 14 Jul 2004 18:19:41
+0400:

AE>>> Как сделать, чтобы пpи добавлении текста скpолл автоматически
AE>>> пpокpучивался на самую нижнюю (последнюю) стpоку текстового поля?
AS>> Слать текстбоксу EM_LINESCROLL
AE> Извините за ламеpизм. Hо более конкpетно нельзя? What does it mean
AE> EM_LINESCROLL и как его слать? Похоже на константу... Hо каково ее
AE> значение и используется ли с ней какая-либо АПИ?

=========Beginning of the citation==============
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.Timer Timer1
Interval = 1000
Left = 1320
Top = 2280
End
Begin VB.TextBox Text1
Height = 1455
Left = 600
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 0
Text = "Form2.frx":0000
Top = 600
Width = 2655
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam
As Long) As Long
Private Const EM_LINESCROLL = &HB6

Private Sub Timer1_Timer()
Text1 = Text1 & vbCrLf & Now
SendMessage Text1.hwnd, EM_LINESCROLL, 0, 32767
End Sub

=========The end of the citation================
Всегда рад помочь.




--

* Origin: Talk.Mail.Ru (2:5020/400)


Re: Пpокpутка в TextBox

Пpиснилось мне 14 июля 04, что A. Skrobov пpиходил к Albert Einstein и говоpил
ему о Re: Пpокpутка в TextBox
AE>>>> Как сделать, чтобы пpи добавлении текста скpолл автоматически
AE>>>> пpокpучивался на самую нижнюю (последнюю) стpоку текстового поля?
AS> =========Beginning of the citation==============
/ske-e-ep/
AS> =========The end of the citation================
AS> Всегда pад помочь.

Большое спасибо. Все pаботает отлично. Только по условию задачи вместо таймеpа
лучше делать по событию Change. :)
Еще pаз благодаpю.

С наилучшими пожеланиями, Albert Einstein.
MailTo: enstainATyandexDOTru,
URL: www.enstain.da.ru.
* Origin: Imagination is more important than knowledge! (2:4624/8.204)


Re: я понял, в чем моя проблема

Thu Jul 15 2004 20:55, Roman Yuakovlev wrote to All:

RY> Кстати, что это возвратит под Win98?
Я внезапно подумал, что возможно, ты пытаешься спросить, какие пути
соответствуют спецпапкам под Win98.

Пользователь "Отмена":
C:\WINDOWS\Application Data CSIDL_APPDATA
C:\WINDOWS\All Users\Рабочий стол CSIDL_COMMON_DESKTOPDIRECTORY
C:\WINDOWS\Cookies CSIDL_COOKIES
C:\WINDOWS\Рабочий стол CSIDL_DESKTOP
C:\WINDOWS\Рабочий стол CSIDL_DESKTOPDIRECTORY
C:\WINDOWS\Избранное CSIDL_FAVORITES
C:\WINDOWS\FONTS CSIDL_FONTS
C:\WINDOWS\History CSIDL_HISTORY
C:\WINDOWS\Temporary Internet Files CSIDL_INTERNET_CACHE
C:\WINDOWS\NetHood CSIDL_NETHOOD
C:\Мои документы CSIDL_PERSONAL
C:\WINDOWS\PrintHood CSIDL_PRINTHOOD
C:\WINDOWS\Главное меню\Программы CSIDL_PROGRAMS
C:\WINDOWS\Recent CSIDL_RECENT
C:\WINDOWS\SendTo CSIDL_SENDTO
C:\WINDOWS\Главное меню CSIDL_STARTMENU
C:\WINDOWS\Главное меню\Программы\Автозагрузка CSIDL_STARTUP
C:\WINDOWS\ShellNew CSIDL_TEMPLATES
Остальные пустые.

Пользователь "username":
C:\WINDOWS\Profiles\username\Application Data CSIDL_APPDATA
C:\WINDOWS\All Users\Рабочий стол CSIDL_COMMON_DESKTOPDIRECTORY
C:\WINDOWS\Profiles\username\Cookies CSIDL_COOKIES
C:\WINDOWS\Profiles\username\Рабочий стол CSIDL_DESKTOP
C:\WINDOWS\Profiles\username\Рабочий стол CSIDL_DESKTOPDIRECTORY
C:\WINDOWS\Profiles\username\Favorites CSIDL_FAVORITES
C:\WINDOWS\FONTS CSIDL_FONTS
C:\WINDOWS\Profiles\username\History CSIDL_HISTORY
C:\WINDOWS\Profiles\username\Temporary Internet Files CSIDL_INTERNET_CACHE
C:\WINDOWS\Profiles\username\NetHood CSIDL_NETHOOD
C:\WINDOWS\Profiles\username\Мои документы CSIDL_PERSONAL
C:\WINDOWS\PrintHood CSIDL_PRINTHOOD
C:\WINDOWS\Profiles\username\Главное меню\Программы CSIDL_PROGRAMS
C:\WINDOWS\Profiles\username\Recent CSIDL_RECENT
C:\WINDOWS\SendTo CSIDL_SENDTO
C:\WINDOWS\Profiles\username\Главное меню CSIDL_STARTMENU
C:\WINDOWS\Profiles\username\Главное меню\Программы\Автозагрузка
CSIDL_STARTUP
C:\WINDOWS\ShellNew CSIDL_TEMPLATES
Остальные пустые.

Win2000, пользователь "A. Skrobov" (мой рабочий аккаунт)
H:\DOCUME~1\A02A0~1.SKR\Application Data CSIDL_APPDATA
H:\Documents and Settings\All Users\Главное меню\Программы\Администрирование
CSIDL_COMMON_ADMINTOOLS
H:\DOCUME~1\ALLUSE~1\Application Data CSIDL_COMMON_APPDATA
H:\DOCUME~1\ALLUSE~1\Рабочий стол CSIDL_COMMON_DESKTOPDIRECTORY
H:\DOCUME~1\ALLUSE~1\Документы CSIDL_COMMON_DOCUMENTS
H:\DOCUME~1\ALLUSE~1\Избранное CSIDL_COMMON_FAVORITES
H:\DOCUME~1\ALLUSE~1\Главное меню\Программы
CSIDL_COMMON_PROGRAMS
H:\DOCUME~1\ALLUSE~1\Главное меню CSIDL_COMMON_STARTMENU
H:\DOCUME~1\ALLUSE~1\Главное меню\Программы\Автозагрузка
CSIDL_COMMON_STARTUP
H:\DOCUME~1\ALLUSE~1\Шаблоны CSIDL_COMMON_TEMPLATES
H:\DOCUME~1\A02A0~1.SKR\Cookies CSIDL_COOKIES
H:\Documents and Settings\A. Skrobov\Рабочий стол CSIDL_DESKTOP
H:\DOCUME~1\A02A0~1.SKR\Рабочий стол CSIDL_DESKTOPDIRECTORY
H:\DOCUME~1\A02A0~1.SKR\Избранное CSIDL_FAVORITES
H:\WINNT\Fonts CSIDL_FONTS
H:\DOCUME~1\A02A0~1.SKR\Local Settings\History CSIDL_HISTORY
H:\DOCUME~1\A02A0~1.SKR\Local Settings\Temporary Internet Files
CSIDL_INTERNET_CACHE
H:\DOCUME~1\A02A0~1.SKR\Local Settings\Application Data CSIDL_LOCAL_APPDATA
H:\DOCUME~1\A02A0~1.SKR\Мои документы\Мои рисунки CSIDL_MYPICTURES
H:\DOCUME~1\A02A0~1.SKR\NetHood CSIDL_NETHOOD
H:\DOCUME~1\A02A0~1.SKR\Мои документы CSIDL_PERSONAL
H:\DOCUME~1\A02A0~1.SKR\PrintHood CSIDL_PRINTHOOD
H:\Documents and Settings\A. Skrobov CSIDL_PROFILE
H:\Program Files CSIDL_PROGRAM_FILES
H:\Program Files\Common Files CSIDL_PROGRAM_FILES_COMMON
H:\DOCUME~1\A02A0~1.SKR\Главное меню\Программы CSIDL_PROGRAMS
H:\DOCUME~1\A02A0~1.SKR\Recent CSIDL_RECENT
H:\DOCUME~1\A02A0~1.SKR\SendTo CSIDL_SENDTO
H:\DOCUME~1\A02A0~1.SKR\Главное меню CSIDL_STARTMENU
H:\DOCUME~1\A02A0~1.SKR\Главное меню\Программы\Автозагрузка
CSIDL_STARTUP
H:\WINNT\system32 CSIDL_SYSTEM
H:\WINNT\system32 CSIDL_SYSTEMX86
H:\DOCUME~1\A02A0~1.SKR\Шаблоны CSIDL_TEMPLATES
H:\WINNT CSIDL_WINDOWS
* Origin: Здесь будет ориджин (2:5080/1003.16)



Назад Содержание Вперед