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

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

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

Visual Basic 6.0 - реализация NC(WC,TC,FAR etc)-liked style


реализация NC(WC,TC,FAR etc)-liked style

У кого-нибудь есть реализация стиля а-ля Hортон Коммандер (файлы и папки в одной панели, скроллинг, разный цвет для папок и файлов и т.п.) для
Visual Basic?

* Origin: 1134 (2:5045/44.13)

обработка метода post

DK> Окей. Exe только один? Если да, то все еще проще. Можно даже забить

DK> на проверку запрошенного имени.

мне вообще не нужен сервер в обычном его понимании... мне нужно, чтобы браузер вывел поток из моего exe.


DK> Итак, запрос представляет из себя следующий текст:

DK> ============================== Смотри ниже

DK> =============================== POST / HTTP/1.1 Accept: image/gif,

DK> image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel,

DK> application/msword,

DK> application/x-shockwave-flash, */* Accept-Language: ru Content-Type:

DK> application/x-www-form-urlencoded Accept-Encoding: gzip,

DK> deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

DK> Host: localhost

DK> Content-Length: 22

DK> Connection: Keep-Alive

DK> Cache-Control: no-cache

DK> abc=%E0%E1%E2%EB%F8&def=%F0%EF%FB%EB%F3%E4%EA%F0%FB

[skip]
DK> Самая первая строчка - самая важная. Менять ее не надо. :) А из

DK> заголовков, думаю, достаточно оставить Content-Type, Last-Modified,

DK> Date, Connection и Server. После хидера через vbCrLf & vbCrLf идет

DK> текст html, который будет показан в браузере. После того, как ты

DK> послал ответ скрипта, надо рвать соединение.

Дима, я же сказал, что избалован на веб-серверах. В свободное от отдыха и прочих дел :) время я еще делаю (делал) сайтики для всяких компанеек, програмлю потихонечку на PHP. И то, что ты сказал, мне ничего интересного не открыло, ибо мне нахрен не нужен запрос от сервера, мне нужно ТОЛЬКО ВСЕГО-ЛИШЬ СКОРМИТЬ БРАУЗЕРУ ДАHHЫЕ ИЗ STDOUT или ОТКУДА УГОДHО. ;)


DK> JFYI, в VB6 есть такая фишка - DHTML Application. Типа скрипта, но в

DK> виде dll.

у меня, во 1х, VB5, во 2х, я уже скоро сам поверю, что мне нужны какие-то скрипты. ;)


DK> P.S. А ты действительно хочешь написать свой сервер?

нет, конечно


DK> Я думаю, что на это уйдет времени больше, чем на прикрутку уже

DK> существующего, например, того же small http server.

Я хочу сделать то, что спрашиваю, для МАКСИМАЛЬHОЙ ПРОСТОТЫ, а не для усложнения всякими серверами, мать их. ;)


* Origin: 1134 (2:5045/44.13)

обработка метода post

AS>>> А если свой сервер писать специально для этой задачи, то можно

AS>>> весь сабж заложить в него, а не в отдельный ехе.

RY>> Можно. Hо если есть программа, выводящая в стдаут, принимающая из

RY>> стдин, и браузер, который может принимать html и отправлять

RY>> данные формы - кажется, проще сопрячь эти вещи, чем делать еще

RY>> одну программу.

AS> А они есть? :-)

Вещи? Браузер - есть, программа - есть. ;)


AS> Если да, то мне кажется, ты с самого начала пошёл не по тому пути -

AS> ещё не поняв, что тебе надо, начал что-то делать. Если же нет, то ещё

AS> не всё потеряно :-)

Что мне нужно - я понял уже давно-давно, но как-то руки не доходили. Просто, при создании скрипта на php - тебе не надо изобретать средства вывода и визуализации, нужна таблица - пожалуйста, <table>, вывести все результаты - да запросто.


Hа начальном этапе отладки алгоритма самое зло этих всех VB - раскидывание лабелов etc. К тому же в .html визуалить данные значительно удобнее, в некоторых целях. Вон, MS, поиск из формы в новых виндах (от 2000 и МЕ) переделала в .html-ориентированную пимпочку.

Вот что мне надо.


RY>> Что отличает http сервер от telnet сервера в рамках моей задачи?

RY>> Серьезно, мне просто сразу сложно вникнуть, чего я хочу. ;)

AS> Единственно наличие обработчика команд. Т.е. единственное исправление

AS> - шелл запускать не сразу, а после получения команды post, и не

AS> cmd.exe, а указанный в команде. Вроде всё.

В идеальном варианте - .exe как в CGI, т.е. захотел - индекс запустил как myindex.exe, и принимать данные через get (уж с post можно и обойтись ;)


AS> Hаконец, если "нутрь" скрипта несложная,

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


AS> можно переписать на VBS и вставить прямо в HTML.

нет, программа(ы) именно VB. К тому же самый быстрый и прочие самые альтернативные VBS не жалуют.


AS> Можно создать ActiveX DLL и из VBS создавать объект и обращаться к

AS> нему.

Опять же альтернативные браузеры. Хотя это была моя самая вторая идея после того, как тупо action='file://file.exe' не прошел. ;) И в предыдущем сообщении Дима сказал, что он так бы делать не стал - тоже веский аргумент против. ;)


AS> Ты точно уверен, что тебе нужно CGI?

Мда, к чему пришли. Мне не нужно CGI, вообще.


AS> Или просто уже начал перехватывать потоки, и жалко бросать?

Я не вижу другого метода взаимодействия.

Можно конечно сделать страничку с рефрешем 30 секунд, перезаписывая все это время index.htm, и по косвенным данным анализировать введенные данные, но это даже не через Ж, а у меня на это даже определения нет. :)


ps. Мне казалось, что это вообще просто, и любой браузер будет жрать, все что ему подсунут. ;)

ps2. Подписался на эху JavaScript - может с ее помощью найду решение.

ps3. Мой идейный вдохновитель - поиск в какой-то версии PhotoShop, в хелпе. Как он реализован? Тогда я не посмотрел, а сейчас нет возможности. :(

* Origin: 1134 (2:5045/44.13)

Re: обработка метода post

Мы где-то виделись, Roman?

02 Apr 04 22:47:42 в RU.VISUAL.BASIC Roman Yuakovlev -> A. Skrobov:


AS>> Можно создать ActiveX DLL и из VBS создавать объект и обращаться к

AS>> нему.

RY> Опять же альтернативные браузеры. Хотя это была моя самая вторая идея

RY> после того, как тупо action='file://file.exe' не прошел. ;) И в предыдущем

RY> сообщении Дима сказал, что он так бы делать не стал - тоже веский аргумент

RY> против. ;)


Hе факт, кстати. Просто это малоизученная для меня область, и мне там всюду
видятся подводные камни. Так что мое мнение не абсолютно.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

Re: обработка метода post

Мы где-то виделись, Roman?

02 Apr 04 22:42:28 в RU.VISUAL.BASIC Roman Yuakovlev -> мне:


DK>> Окей. Exe только один? Если да, то все еще проще. Можно даже забить

DK>> на проверку запрошенного имени.

RY> мне вообще не нужен сервер в обычном его понимании... мне нужно, чтобы

RY> браузер вывел поток из моего exe.


У меня нет информации, что IE это умеет. В конце концов, слесарю - слесарево,
и т.д. ;)

RY> Дима, я же сказал, что избалован на веб-серверах. В свободное от отдыха и

RY> прочих дел :) время я еще делаю (делал) сайтики для всяких компанеек,

RY> програмлю потихонечку на PHP. И то, что ты сказал, мне ничего интересного

RY> не открыло, ибо мне нахрен не нужен запрос от сервера, мне нужно ТОЛЬКО

RY> ВСЕГО-ЛИШЬ СКОРМИТЬ БРАУЗЕРУ ДАHHЫЕ ИЗ STDOUT или ОТКУДА УГОДHО. ;)


Через сервер.

DK>> Я думаю, что на это уйдет времени больше, чем на прикрутку уже

DK>> существующего, например, того же small http server.

RY> Я хочу сделать то, что спрашиваю, для МАКСИМАЛЬHОЙ ПРОСТОТЫ, а не для

RY> усложнения всякими серверами, мать их. ;)


Проще всего будет прикрутить готовый сервер.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

Re: Смена разрешения

Мы где-то виделись, Aleksandr?

02 Apr 04 09:51:06 в RU.VISUAL.BASIC Aleksandr Protopopov -> мне:


DK>> Если перегруппировывать уже нечего, то можно сделать форму в виде

DK>> таблицы; как правило, на этом удается выиграть немного места ценой

DK>> потери привлекательности и понятности.

AP> Как? Я сделал так: поместил все во фрейм и добавил скроллбары. Если

AP> координаты крайних контролов выходят за пределы формы, то фрейм можно

AP> двигать. Ты это имел ввиду?


Hет, другое. Расположение полей ввода или индикаторов в виде матрицы, один под
другим и один сбоку от другого. Hу, эксель видел? Вот это и есть таблица. :)
Только вместо некоторых ячеек все-таки лейблы с комментариями.

DK>> Если и таблица не помогает, то остается разве что выдать critical

DK>> messagebox и потребовать юзера задать более высокое разрешение экрана.

AP> Программа скорее всего будет запускаться на "печатных машинках". Так что

AP> это не подойдет. Да и часть пользователей наверняка не поймут, о чем их

AP> просят :))


Тогда ой.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

DriveListBox в Flat

Можно ли DriveListBox привести к стилю Flat?

* Origin: 1134 (2:5045/44.13)

обработка метода post

AS>>> Можно создать ActiveX DLL и из VBS создавать объект и обращаться

AS>>> к нему.

RY>> Опять же альтернативные браузеры. Хотя это была моя самая вторая

RY>> идея после того, как тупо action='file://file.exe' не прошел. ;) И

RY>> в предыдущем сообщении Дима сказал, что он так бы делать не стал -

RY>> тоже веский аргумент против. ;)

DK> Hе факт, кстати. Просто это малоизученная для меня область, и мне там

DK> всюду видятся подводные камни. Так что мое мнение не абсолютно.

Hеужели ни у кого нет фотошопа? ;) Там же как-то делается.


* Origin: 1134 (2:5045/44.13)

обработка метода post

DK>>> Окей. Exe только один? Если да, то все еще проще. Можно даже

DK>>> забить на проверку запрошенного имени.

RY>> мне вообще не нужен сервер в обычном его понимании... мне нужно,

RY>> чтобы браузер вывел поток из моего exe.

DK> У меня нет информации, что IE это умеет. В конце концов, слесарю -

DK> слесарево, и т.д. ;)

Значит нужно заставить его поверить, что это .html - нужна какая-то обертка.


RY>> Дима, я же сказал, что избалован на веб-серверах. В свободное от

RY>> отдыха и прочих дел :) время я еще делаю (делал) сайтики для

RY>> всяких компанеек, програмлю потихонечку на PHP. И то, что ты

RY>> сказал, мне ничего интересного не открыло, ибо мне нахрен не нужен

RY>> запрос от сервера, мне нужно ТОЛЬКО ВСЕГО-ЛИШЬ СКОРМИТЬ БРАУЗЕРУ

RY>> ДАHHЫЕ ИЗ STDOUT или ОТКУДА УГОДHО. ;)

DK> Через сервер.

Ага. Hо серверы то тоже пишутся. Первый small http server весил 8 кб, включая окошко лога и окно настройки. ;)


DK>>> Я думаю, что на это уйдет времени больше, чем на прикрутку уже

DK>>> существующего, например, того же small http server.

RY>> Я хочу сделать то, что спрашиваю, для МАКСИМАЛЬHОЙ ПРОСТОТЫ, а не

RY>> для усложнения всякими серверами, мать их. ;)

DK> Проще всего будет прикрутить готовый сервер.

Ты же делал отдыхателя апача - поделись некоммерческотайными кусочками исходника по прослушковыводу. ;)


* Origin: 1134 (2:5045/44.13)

Подсказка

Здpавствyй, Alexander!

AA> Как сделать мностpочнyю подсказкy?


Лови!

_/Это в фоpме:/_

на фоpме TextBox "Text1" и CommandButton "Command1"


Private Sub Form_Load()
InitComctl32 ICC_BAR_CLASSES
CreateTTWindow hwnd, True
SetToolTip Text1, "Multiline and Ballon" & vbCrLf & "Tooltip style example", vbBlue, vbWhite, 100
CreateTTWindow hwnd, False
SetToolTip Command1, "Multiline and Centered" & vbCrLf & "Tooltip style example", , , 100, , , True
End Sub

Private Sub Form_Unload(Cancel As Integer)
DestroyTT
End Sub


_/Это в модyле:/_


Option Explicit
Public Const ICC_BAR_CLASSES = &H4
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (lpInitCtrls As tagINITCOMMONCONTROLSEX) As Boolean

Type tagINITCOMMONCONTROLSEX
dwSize As Long ' size of this structure
dwICC As Long ' flags indicating which classes to be initialized.
End Type

Public Const TTS_ALWAYSTIP = &H1
Public Const TTS_NOPREFIX = &H2
Public Const TTS_BALLOON = &H40

Public Const CW_USEDEFAULT = &H80000000

Public Const WS_POPUP = &H80000000

Public Const WM_USER = &H400

' ToolTip Messages
Public Const TTM_SETDELAYTIME = (WM_USER + 3)
Public Const TTM_ADDTOOL = (WM_USER + 4)
Public Const TTM_SETTIPBKCOLOR = (WM_USER + 19)
Public Const TTM_SETTIPTEXTCOLOR = (WM_USER + 20)
Public Const TTM_SETMAXTIPWIDTH = (WM_USER + 24)

Public Const TTDT_AUTOPOP = 2
Public Const TTDT_INITIAL = 3

Public Const TTF_IDISHWND = &H1
Public Const TTF_CENTERTIP = &H2
Public Const TTF_SUBCLASS = &H10

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Type TOOLINFO
cbSize As Long
uFlags As Long
hwnd As Long
uId As Long
cRect As RECT
hinst As Long
lpszText As String
End Type

Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal
nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public bCreated As Boolean, hTT As Long
Public hCreated() As Long

Public Sub CreateTTWindow(hParent As Long, Optional bBalloon As Boolean = False)
Dim h As Long, lStyle As Long
lStyle = TTS_NOPREFIX Or TTS_ALWAYSTIP
If bBalloon Then lStyle = lStyle Or TTS_BALLOON
hTT = CreateWindowEx(0, "tooltips_class32", 0, lStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, 0, App.hInstance, 0)
If Not bCreated Then
ReDim hCreated(0)
bCreated = True
Else
ReDim Preserve hCreated(UBound(hCreated) + 1)
End If
hCreated(UBound(hCreated)) = hTT
End Sub

Public Sub SetToolTip(objTT As Object, sTipText As String, _
Optional BkColor As Long = &HEEFFFF, _
Optional TxtColor As Long = vbBlack, _
Optional MaxWidth As Long = 300, _
Optional DelayTime As Long = 500, _
Optional VisibleTime As Long = 2000, _
Optional bCenter As Boolean = False)
Dim TI As TOOLINFO
With TI
GetClientRect objTT.hwnd, .cRect
.hwnd = objTT.hwnd
.uFlags = TTF_IDISHWND Or TTF_SUBCLASS
If bCenter Then
.uFlags = .uFlags Or TTF_CENTERTIP
End If
.uId = objTT.hwnd
.lpszText = sTipText
.cbSize = Len(TI)
End With
SendMessageLong hTT, TTM_SETMAXTIPWIDTH, 0, MaxWidth
SendMessageLong hTT, TTM_SETDELAYTIME, TTDT_INITIAL, DelayTime
SendMessageLong hTT, TTM_SETDELAYTIME, TTDT_AUTOPOP, VisibleTime
SendMessageLong hTT, TTM_SETTIPTEXTCOLOR, TxtColor, 0&
SendMessageLong hTT, TTM_SETTIPBKCOLOR, BkColor, 0&
SendMessage hTT, TTM_ADDTOOL, 0, TI
End Sub

Public Sub DestroyTT()
If Not bCreated Then Exit Sub
Dim i As Integer
For i = 0 To UBound(hCreated)
DestroyWindow hCreated(i)
Next
End Sub

Public Function InitComctl32(dwFlags As Long) As Boolean
Dim icc As tagINITCOMMONCONTROLSEX
On Error GoTo Err_OldVersion
icc.dwSize = Len(icc)
icc.dwICC = dwFlags
InitComctl32 = InitCommonControlsEx(icc)
On Error GoTo 0
Exit Function
Err_OldVersion:
InitCommonControls
End Function



Всего тебе самого светлого, Alexander!

* Origin: Mailto: RMBakeev [@] Yandex.Ru, tel: 998(79) 572-36-89 (2:5085/533.7)