Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: Альтернатива ICQ-ActiveX контролу!! Обсуждение Добавлено: 26.09.05 00:43  

Автор вопроса:  Apache2 | ICQ: 162823477 

Ответить

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

Номер ответа: 31
Автор ответа:
 MastMan



Вопросов: 0
Ответов: 51
 Web-сайт: microsoft.com
 Профиль | | #31
Добавлено: 27.09.05 15:53
Только ОпенСорс меня не интерисовал, это не засчитывается.

Ты правда программист? :)

Да. Только пишу не Open Source-проекты и не ICQ-клиенты.

Ответить

Номер ответа: 32
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #32
Добавлено: 27.09.05 16:07

MastMan это Артем

Ответить

Номер ответа: 33
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #33
Добавлено: 27.09.05 16:26
Может и не артём, но похожи очень:

1)Зарегились в 2002 году
2)Фанфты Microsoft
3)Защищают .NET
4)Пишут очень серьезные приложения
5)Обожают поспорить в соответствующей компании
6)Любят поучить HACKER'а как жить

А может это Бренд на поезде с другом по ноутбуку прикалываются...

Ответить

Номер ответа: 34
Автор ответа:
 MastMan



Вопросов: 0
Ответов: 51
 Web-сайт: microsoft.com
 Профиль | | #34
Добавлено: 27.09.05 17:17
MastMan это Артем

?
Ребята, вы меня с кем-то спутали, наверное.

Последний год я в инете не вел вообще никакой активности (не считаю корпоративного форума, но это не инет).

2)Фанфты Microsoft

Я несколько лет использую технолгии Microsoft, разумеется, я их фанат.

3)Защищают .NET

Где я его защищаю?
Я его использую, и этого достаточно мне.

4)Пишут очень серьезные приложения

Многие люди пишут серьезные приложений, что здесь странного?

Ответить

Номер ответа: 35
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #35
Добавлено: 27.09.05 18:36
MastMan, и что ты уже написал?

Ответить

Номер ответа: 36
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #36
Добавлено: 27.09.05 18:49
2 DaSharm:
вот в профиле ж написано :)
У меня есть небольшой шароварный сайт (вы можете с него скачать много полезных и интересных программ): www.microsoft.com

Ответить

Номер ответа: 37
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #37
Добавлено: 27.09.05 23:26
Все эти слова (пайпы, оконные сообщения и т.д.) очень подробно описаны в MSDN, сомневаюсь, что смогу рассказать лучше. Пайп по-английски pipe.
MastMan не может быть Артемом, тот бы не стал одновременно заводить 2 акка :)
Да. Только пишу не Open Source-проекты и не ICQ-клиенты.
А разве из этого следует, что открытый код вообще никак не интересует?

Ответить

Номер ответа: 38
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #38
Добавлено: 28.09.05 01:13
>Пожалуйста, подробней.. я с таким ещё не сталкивался.. приведите примеры на разных языках его реализации..
План работы.
1. Берёшь структуру COPYDATASTRUCT, засовываешь в неё всё, что надо (в раздел lpData). Это может быть всё, что угодно, главное, чтобы ты сам потом головой о стену не бился, чтобы писать парсер (у асечников наверняка все лбы отбиты).
2. SendMessage'ем отправляешь сообщение окну с этой структурой и командой WM_COPYDATA. Винда сама проаллочит память, копирнёт твои данные в память другого процесса и известит нужное окно. Насколько я понимаю PostMessage для этой команды не катит, т.к. надо чтобы винда сама же ту память и освободила.
Все более-менее серьёзные виндовые языки, с поддержкой api сделают это безо всяких проблем, т.к. им и делать-то ничего не надо. Единственное, что приём сообщений на VB6 придётся ромадить через сабклассинг, но это, имхо, уже стандартый васюковый метод - можно даже сказать "встроенные средства VB"! 8))))
>пожалуйста, расшифровывайте ваши слова.. многим не понятно, и не забывайте примеры.
не, ну я же вроде ясно говорю?
Да и откуда мне знать, что кому-то непонятно?
Примеры влом писать - это же обычные вещи, здесь механизм важен, а реализация, это только вопрос времени.
Пайпы я не пробовал, но точно знаю, что в реале всё это выглядит абсолютно одинаково, просто фейс программный вуалирует проецирование файлов в память, поэтому кажется, что способы разные. Самое лучшее, это использовать самый низкий уровень - собс-на эти самые файлы. Когда мне понадобилось переступать границы процессов, я сначала зацепился за этот метод, но потом увидел, что он не избавляет от необходимости отправлять оконные сообщения с целью оповещения другого процесса об изменении данных и поэтому остановился на WM_COPYDATA. Файлы же нужны, если данных за один обмен много. Винамп вон, вообще обошёлся простыми оконными сообщениями - зато расширений сколько к нему!
Для аськоподобных же вещей, надо как минимум строки передавать.

Ответить

Номер ответа: 39
Автор ответа:
 Apache2



ICQ: 162823477 

Вопросов: 31
Ответов: 114
 Профиль | | #39 Добавлено: 28.09.05 01:35
не знаю что там есть в MSDN
я ввёл в поиск по нему.. и там спец. раздла по
pipe не было.
былы другие слова связанные с получением нового процесса и канала связи.. или типа того:
Visual Basic]
Dim myProcess As New Process()
Dim myProcessStartInfo As New ProcessStartInfo("Process_StandardOutput_Sample.exe";)
myProcessStartInfo.UseShellExecute = False
myProcessStartInfo.RedirectStandardOutput = True
myProcess.StartInfo = myProcessStartInfo
myProcess.Start()

Dim myStreamReader As StreamReader = myProcess.StandardOutput
' Read the standard output of the spawned process.
Dim myString As String = myStreamReader.ReadLine()
Console.WriteLine(myString)
myProcess.Close()


ты про это? можешь дать ссылку раздела с сайта мелкософта.. или скопируй текст.. хочу разобраться


и что насчёт способа оконных сообщений?

(к примеру: хэндл отсылающего,номер протокола, команда, целочисленный параметр, строковый параметр*128, reserved 8 байт!) и потом WM_COPYDATA.


кто-нить знает про это?

Ответить

Номер ответа: 40
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #40
Добавлено: 28.09.05 01:42
Я прочитал все посты! 8)
Просто хочу выразить несогласие по поводу ненужности 3000-го файлового менеджера. Он нужен - нужен тому, кто его пишет, иначе он никогда ничему не научиться. Это ступенька и задача форума (ИМХО) помочь перешагнуть всю ботву и двигаться вперёд. Мне вот нужны дрова на мой мопед для линуха, но я их не напишу, пока не перепишу парочку никому ненужных дров на существующие девайсы под винду. Тут важно понимание.
Кроме того, важно научиться УЧИТЬСЯ. Т.е. знать, где найти инфу, где и с кем порассуждать на эту тему.
Ещё остаются наработки (готовые классы, контролы, библии), которые в будущем помогут при изготовлении тех самых узкоспециализированных прог.
Да и что толку от форума, где обсуждают такие проги? Это же реально никому ненужные (и даже неинтересные) проги с точки зрения большинства форумлян.
Мне вот нужна прога для удалённого сброса альтивара, когда тот уходит в даун, после падения напряжения на городской линии. Интересующиеся есть?

Короче, народ, - кончайте снобить, а то создаётся впечатление, что это форум не для программирования, а для того, чтобы это направление забросили.

Ответить

Номер ответа: 41
Автор ответа:
 Apache2



ICQ: 162823477 

Вопросов: 31
Ответов: 114
 Профиль | | #41 Добавлено: 28.09.05 01:45
1. Берёшь структуру COPYDATASTRUCT, засовываешь в неё всё, что надо (в раздел lpData). Это может быть всё, что угодно, главное, чтобы ты сам потом головой о стену не бился, чтобы писать парсер (у асечников наверняка все лбы отбиты).
2. SendMessage'ем отправляешь сообщение окну с этой структурой и командой WM_COPYDATA. Винда сама проаллочит память, копирнёт твои данные в память другого процесса и известит нужное окно. Насколько я понимаю PostMessage для этой команды не катит, т.к. надо чтобы винда сама же ту память и освободила.


Neco, огробное спасибо, убедил..
но нельзяли хоть каплю кода написать.. а то я с такими вещами не сталкивался..
как отправить и как принять.. хотя бы на VB.

Ответить

Номер ответа: 42
Автор ответа:
 Apache2



ICQ: 162823477 

Вопросов: 31
Ответов: 114
 Профиль | | #42 Добавлено: 28.09.05 01:48
это получаеться API функция..


Public Type COPYDATASTRUCT
        dwData As Long
        cbData As Long
        lpData As Long
End Type

Ответить

Номер ответа: 43
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #43
Добавлено: 28.09.05 01:51
Имхо, этот код про редиректинг стандартного аутпута, о чём говорит RedirectStandardOutput.
Наверное, может получиться, но плохо представляю себе реализацию на С++, а следовательно не вполне понимаю, чтобы что-то советовать.

Ответить

Номер ответа: 44
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #44
Добавлено: 28.09.05 02:07
Собс-на вытащил из кода библиотеки перехвата, которая должна сообщать моей проге, что какой-нить там эксплорер или блокнот пытается (падла!) вызвать MsgBox.

int WINAPI clsCatcher::MyMessageBoxW(HWND hWnd ,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)
{
int FuncRez=0;
LRESULT rez=0;
COPYDATASTRUCT cpyData;char* Data;int fullsz=0;
char* tmpStr;int tmpInt;

Data="";
tmpStr=GetANSIText(lpText);
Data=GetSummLP(Data,tmpStr,&fullsz,strlen(tmpStr));

tmpStr="Вива лас Мексика!";
Data=GetSummLP(Data,tmpStr,&fullsz,strlen(tmpStr));

tmpInt=555;
Data=GetSummLP(Data,&tmpInt,&fullsz,sizeof(tmpInt));

tmpStr=GetANSIText(lpCaption);
Data=GetSummLP(Data,tmpStr,&fullsz,strlen(tmpStr));

// имеет значение лишь отсюда
cpyData.dwData=0;
cpyData.cbData=fullsz;
cpyData.lpData=Data;

rez=SendMessage(wndChief,WM_COPYDATA,NULL,(LPARAM)&cpyData);
// и до сюда

if (rez) {
FuncRez=MessageBoxW(hWnd,lpText,lpCaption,uType);
}else{
FuncRez=2;
}
return FuncRez;
}

Приём на VB6 должен быть реализован через сабклассинг, а в моём случае (это был VB.NET), всё чуть проще:

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_COPYDATA Then
            Debug.WriteLine("Оно!";)
            Dim cpyData As COPYDATASTRUCT
            Dim ptr As New IntPtr
            Dim md As String, mdr As myData
            Dim arr() As Byte
            Dim tmpSz As Integer, tmpInt As Integer, tmpStr As String

            cpyData = CType(Marshal.PtrToStructure(m.LParam, GetType(COPYDATASTRUCT)), COPYDATASTRUCT)
            ptr = New IntPtr(cpyData.lpData)

            tmpSz = CType(GetValue(ptr), Integer)
            tmpStr = CType(GetValue(ptr, tmpSz), String)
            MsgBox(tmpStr)

            tmpSz = CType(GetValue(ptr), Integer)
            tmpStr = CType(GetValue(ptr, tmpSz), String)
            MsgBox(tmpStr)

            tmpSz = CType(GetValue(ptr), Integer)
            tmpInt = CType(GetValue(ptr), Integer)
            MsgBox(tmpInt.ToString)

            tmpSz = CType(GetValue(ptr), Integer)
            tmpStr = CType(GetValue(ptr, tmpSz), String)
            MsgBox(tmpStr)
            m.Result = New IntPtr(102)
            Exit Sub
        End If
        MyBase.WndProc(m)
    End Sub

Ответить

Номер ответа: 45
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #45
Добавлено: 28.09.05 04:20
MastMan это Артем

 Мож Тёма, а мож и .нет :)
 Во всяком случае самомнение как миниму такое же. Не удивлюсь если уровень знаний будет схожим.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

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



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