Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры



Выпуск # 215


http://www.kbyte.ru/

 

Новый выпуск!

Здравствуйте!
Очередной выпуск рассылки Kbyte.Ru!

 

Содержание выпуска

Система ЭКСПЕРТ

    Вопрос #000603: Свойство компонента Combo в VB 6.0

    Вопрос #000587: Audit

    Вопрос #000582: Активизировать_элемент_формы,_в_процедуре_Form_...

    Вопрос #000580: Visual_Basic_6.0._Как_можно_поместить_картинку_...

    Вопрос #000577: Visual_Basic_6.0._Активизировать_элемент_формы

Последнее на форумах

    опять MS WORD

    Отправка на e-mail из VB

    Закрытое сообщество фрилансеров

    Перечисление >> Коллекция

    WM 5.0 SDK

Последние статьи

    Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)

    Работа с SQL – Запросы

    Использование XML.Serialization

    Выбор языка программирования для научных работ (2-я редакция)

    Работаем с MIME

Интересные коды и решения

Юмор на Kbyte.Ru

 

Система ЭКСПЕРТ

 

Система «Эксперт» - уникальная система, которая поможет решить, если не все, то многие Ваши проблемы с программированием и разработкой! Если у Вас есть какой-либо вопрос по программированию или разработке, то Вы всегда можете задать его нашим Экспертам! При этом каких-либо особых действий от Вас не потребуется! Просто отправьте Ваш вопрос на адрес mailto:expert@kbyte.ru, в теме письма укажите тему вопроса, в тексте – сам вопрос, и все! Эксперты дадут Вам ответ в течение 12-24 часов, на тот адрес, с которого Вы отправите вопрос. Все проще простого! Никакой регистрации и заполнение бесконечных форм, никаких наездов, оскорблений и насмешек со стороны гуру, просто спросите и получите ответ ;-)


Вопрос #000603: Свойство компонента Combo в VB 6.0

Автор вопроса: Федоренко Дмитрий Константинович // 08.11.2007 / 09:27

Здравствуйте уважаемые эксперты.
Скажите пожалуйста есть ли такое свойство у компонента Combo в VB 6.0,
которое задает длинну низпадающего списка.
Например, если у меня, скажем, 3-4 элемента занесено в этот список, то я при
выборе нужного вижу их все сразу, а если их очень много(так что они не
умещаются сразу все в видимую область), то приходится пользоваться бегунком
справа и прокручивать в поиске нужного элемента.
Так вот, есть ли такое свойство, которое позволяет задавать размеры этой
видимой области (длинну низпадающего списка), чтобы я смог увидеть например
не 3-4 элемента, а 10-20, пока мне это будет позволять делать экран монитора
:))) ? И что это за свойство?
Заранее благодарен за ответ.

Отвечает: Алексей Немиро // 08.11.2007 / 09:32

Здравствуйте, Дмитрий!

Нет, стандартного такого свойства нет, но это можно реализовать при помощи API.
Я не так давно добавлял примеры на эту тему в наш Кодообменник:
http://kbyte.ru/Code/ShowList.aspx?lid=1&gid=1&uid=0&sort=0

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000587: Audit

Автор вопроса: -=Andrey=- // 28.10.2007 / 14:57

вопрос: как отследить подключение к MS SQL серверу?(имя пользователя в домене Windows и IP-адрес компа пользователя)
описание: пользователь запускает клиентское приложение через Citrix, в базе данных master..sysprocesses в данном случае будет отображаться только информация о sql-имени пользователя,запустившего приложение, адреса самого citrix-сервера, с которого запускалось приложение, а об адресе локального компа и доменном имени юзера ничего нет...



--------------------------------------
Категория: --- SQL Server

Отвечает: Алексей Немиро // 29.10.2007 / 04:09

Здравствуйте, Андрей!

Попробуйте вот так:
001:
002:
003:
004:
005:
CREATE TABLE #tmp ([output] varchar(255) null)
INSERT INTO #tmp exec master..xp_cmdshell 'arp -a'
SELECT count([output]) FROM #t where [output] like '%dynamic%'
DROP TABLE #tmp
SELECT count(DISTINCT net_address) FROM sysprocesses



--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000582: Активизировать_элемент_формы,_в_процедуре_Form_...

Автор вопроса: Александр Левашов // 24.10.2007 / 20:16

Здравствуйте уважаемые эксперты!

Visual Basic 6.0. Как программно активизировать конкретный элемент формы Text, в процедуре Form_Load()? То есть сразу после загрузки формы.

Спасибо.
Александр Левашов. г.Кострома.

Отвечает: Алексей Немиро // 25.10.2007 / 02:54

Если речь идет о установке фокуса, то в событие Form_Load это сделать
не возможно. Используйте другое событие, либо таймер.

 

Вопрос #000580: Visual_Basic_6.0._Как_можно_поместить_картинку_...

Автор вопроса: Александр Левашов // 24.10.2007 / 14:04

Здравствуйте уважаемые эксперты!

Visual Basic 6.0. Как можно поместить картинку на кнопку.

Спасибо.
Александр Левашов. г.Кострома.

Отвечает: Алексей Немиро // 25.10.2007 / 02:59

Установите свойство Picture, а также style="1" - Graphical.
Еще может понадобиться свойство UseMaskColor и MaskColor, которые
позволяют установить прозрачный цвет картинки.

 

Вопрос #000577: Visual_Basic_6.0._Активизировать_элемент_формы

Автор вопроса: Александр Левашов // 24.10.2007 / 12:28

Здравствуйте уважаемые эксперты!

Visual Basic 6.0. Как программно активизировать конкретный элемент формы Text, чтоб курсор встал на него.

Спасибо.
Александр Левашов. г.Кострома.

Отвечает: Алексей Немиро // 24.10.2007 / 12:40

Здравствуйте, Александр.

Разместите два текстовых поля на форме и одну кнопку, и вставьте следующий код:
001:
002:
003:
Private Sub Command1_Click()
 Text2.SetFocus
End Sub


--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 


Чтобы задать Ваш вопрос, отправьте его на адрес expert@kbyte.ru

Раздел Эксперт на сайте Kbyte.Ru

Наверх

 

 

Последнее на форумах

опять MS WORD | Автор: LIS
Добавлено: 09.11.2007 / 15:56 | ответов: 0 | просмотров: 14

Здрасте,
мож кто знает как подсчитать програмно страницы в ms word

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Отправка на e-mail из VB | Автор: Павел
Добавлено: 08.11.2007 / 16:58 | ответов: 3 | просмотров: 69

Здравствуйте. Скажите, как отправить сообщение на e-mail

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:09.11.2007 / 05:29
Залил несколько примеров в Кодообменник Kbyte.Ru:

Отправка E-Mail средствами Visual Basic 6.0 (пример № 1)


Программная отправка E-Mail средствами Visual Basic 6.0 с использованием Outlook


Программная отправка E-Mail средствами Visual Basic 6.0 с использованием Microsoft Mapi Controls


Отправка E-Mail через Internet Information Services (IIS)


Отправка E-Mail средствами Visual Basic 6.0 с использованием "винсосок"


Отправка E-Mail средствами Visual Basic 6.0 с использованием "винсосок" (простейший пример)



--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/
---
Кодообменник Kbyte.Ru - узнал сам, расскажи другим ;-)

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Павел
Добавлено:09.11.2007 / 11:49
Ни один из способов не работает. Может это потому, что e-mail на mail.ru?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Алексей
Добавлено:09.11.2007 / 13:12
Ни один из способов не работает. Может это потому, что e-mail на mail.ru?

Примеры с сокетами влюбом случае должны работать. Только что проверил вот этот: http://kbyte.ru/Code/Show.aspx?id=64

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Закрытое сообщество фрилансеров | Автор: Алексей
Добавлено: 08.11.2007 / 10:23 | ответов: 5 | просмотров: 85

Предлагаю соорудить на сайте закрытое сообщество фрилансеров, т.е.
главным образом закрытый форум для обсуждения тем связанных с
фрилансом. Что скажите? Здесь вообще есть кто-нибудь, кто активно
занимается фрилансом?

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: SocrAT
Добавлено:08.11.2007 / 10:37
Дайте, пожалуйста, определение "ФРИЛАНСЕР".

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Алексей
Добавлено:08.11.2007 / 10:44
Дайте, пожалуйста, определение "ФРИЛАНСЕР".

Фрилaнсер (англ. freelancer — «свободный копьеносец», наёмник, в переносном значении — вольный художник) — человек, выполняющий работу без заключения долговременного договора с работодателем, нанимаемый только для выполнения определённого перечня работ (внештатный работник). Также фрилансером является работник, приглашенный для выполнения работ в ходе аутстаффинга. Будучи вне постоянного штата какой-либо компании, фрилансер может одновременно выполнять заказы для разных клиентов. Термин фрилансер впервые употребляется Вальтером Скоттом в романе «Айвенго» для описания «средневекового наёмного воина».
В английском языке долгое время «фрилансер» было именем существительным, но в 1903 был признан производный от существительного глагол и внесён в Оксфордский словарь английского языка. И только в последнее время существительное трансформировалось в различные формы глагола и наречия.
Фрилансерство особенно распространено в таких областях деятельности, как журналистика (и другие формы деятельности, связанные с написанием текстов), компьютерное программирование, веб-дизайн, перевод, разного рода консультационная деятельность. Также фрилансерами считаются охотники за вознаграждением и солдаты-наёмники, в противовес полиции/милиции и регулярной армии.

Фрилансерство и интернет


Широкое распространение фрилансерство получило с развитием Интернета: сеть и сопутствующие информационные и банковские технологии позволили некоторым категориям работников уменьшить частоту появления в офисах, а то и полностью перейти на надомную/удалённую работу.
В настоящее время в Интернете сформировалась устойчивая прослойка фрилансеров, зарабатывающих себе на жизнь удалённой работой. Фрилансерство распространено среди дизайнеров, программистов, оптимизаторов, участников партнерских программ. Действует множество специализированных сайтов, призванных помочь фрилансерам найти очередной заказ.


_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: SocrAT
Добавлено:08.11.2007 / 11:04
Ок. Понятно.
А цель создания форума фрилансеров?
Фрилансеры будут друг другу задания подгонять?

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Алексей
Добавлено:08.11.2007 / 11:13
А цель создания форума фрилансеров?

Цель - обмен опытом, мнением, черными списками :)
Обсуждение сомнительных моментов, ценообразования и прочих проблем при фрилансе.

Фрилансеры будут друг другу задания подгонять?

Это кстати тоже вариант, когда пальцев не хватает, а работа прет и прет :)

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: SocrAT
Добавлено:08.11.2007 / 11:29
Это кстати тоже вариант, когда пальцев не хватает, а работа прет и
прет :)


Гы :D

Я не против.
Немного этим занимаюсь.
Может быть "немного" перейдет в "постоянно" :D

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Перечисление >> Коллекция | Автор: SEO-Master
Добавлено: 06.11.2007 / 08:17 | ответов: 1 | просмотров: 68

Здравствуйте!
Такой вопрос, у меня есть перечисление, я могу как-нибудь превратить его в коллекцию?

Например:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
Enum NamesList
 Vasia
 Ivan
 Petr
 Nikolay
 Masha
 Sasha
End Enum

_______________________
Colorized by: Eros.CodeSyntaxColor Engine

Вот из этого надо получить коллекцию, либо массив, чтобы можно было пролистать перечисление циклом.

спсб.

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Edlin
Добавлено:06.11.2007 / 10:32
Попробуй

001:
[Enum].GetValues(GetType(NamesList))


Так же у структуры Enum есть метод GetNames. С аналогичным синтаксисом. Может быть он тебе подойдет больше.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


WM 5.0 SDK | Автор: 5acred Phoenix
Добавлено: 04.11.2007 / 22:00 | ответов: 7 | просмотров: 192

Привет всем! У кого-нибудь есть установленный WM 5.0 Smartphone SDK? Сколько весит папка с примерами? Может, выложил бы кто-нибудь, а то примеры нужны, а тянусь 77-метровый SDK у меня нет возможности.. :(

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:05.11.2007 / 03:40
Зачем тебе примеры? :)
Я пробовал кодить под Windows Mobile 6 в Visual Studio 2005, все практически также как и при разработке любого другого проекта, только Framework немного "другой", но принцип тот же :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: 5acred Phoenix
Добавлено:05.11.2007 / 11:57
Если что, я имею в виду примеры API типа отправки SMS, осущ-ния звонков и прочее. Без этих примеров под рукой достаточно сложно... :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Алексей
Добавлено:05.11.2007 / 12:13
Введение в WM API


API Windows Mobile можно условно разелить на следующие части:
  • WinAPI
  • Memory Manager API – поддержка работы с памятью
  • Power Manager API – поддержка функций энергопотребления
  • File System API
    • EDB API - управление базами данных
    • File IO API - управление файлами и каталогами
    • File Mapping API - управление файлами, проецируемыми в память
    • Storage Manager API - управление хранилищами
  • Networking API
    • Bluetooth - управление устройствами BT
    • CellCore - управление функциями GSM модуля
    • SMS API
    • SIM API
    • Wireless API
    • WinSock API - поддержка сокетов
    • WinInet API - поддержка протокола TC/IP, http, ftp функции
    • Infrared API - поддержка обмена по IrDA
  • Game API (GAPI) - поддержка работы игровых приложений
  • Shell API - поддержка контролов и взаимодействие с GUI
  • ActiveSync API - поддержка соединения с удаленным компьютером
    • Remote API (RAPI) - управление системой через удаленных компьютер
Полную справку по функциям API можно получить из MSDN, ниже мы рассмотрим некоторые функции данных API.

Memory Manager.

Общие положения.
  • Доступная память делится на две части: Storage Memory и Program Memory
  • Память выделяется страницами (для ARM архитектуры по 4Кб )
  • Приложения могут адресовать 4Гб адресного пространства
  • Физическая память, доступная для процесса - 32 Мб
  • Физическая память доступная для одного потока – 1Мб

Получить количество свободной памяти можно с помощью функции:
void GlobalMemoryStatus( LPMEMORYSTATUS lpBuffer );
где lpBuffer – структура описания состояния памяти:

typedef struct _MEMORYSTATUS
{
DWORD dwLength;
DWORD dwMemoryLoad; - процент использования памяти
DWORD dwTotalPhys; - общее кол-во памяти
DWORD dwAvailPhys; - кол-во свободной памяти
DWORD dwTotalPageFile; - кол-во памяти в файле подкачки
DWORD dwAvailPageFile; - кол-во свободной памяти в файле подкачки
DWORD dwTotalVirtual; - размер памяти процесса
DWORD dwAvailVirtual; -свободная память процесса
} MEMORYSTATUS, *LPMEMORYSTATUS;

Память, как и все остальные ресурсы. Имеет обыкновение заканчиваться.
Сущетвует 3 категории нехватки памяти:
LowMemory – свободно 256Кб памяти. Система при этом рассылает приложениям сообщение WM_HIBERNATE. Приложение в ответ на сообщение должно освободить память, выделенную функцией VirtaulAlloc, освободить неиспользуемые ресурсы GDI.
VeryLowMemory – свободно 160Кб памяти. Система рассылает приложениям сообщение WM_CLOSE. В ответ на это сообщение, приложения должны завершить работу и полность освободить память и ресурсы GDI.
CriticalMemory – свободно меньше 32Кб. В этом состоянии запуск программ невозможен. Система показывает стандартный диалог нехватки памяти и перезагружается.

Иногда программе для работы нужно больше памяти, чем свободно. В этом случае можно воспользоваться функцией:
BOOL SHCloseApps( DWORD dwMemNeed );
где, dwMemNeed - объем памяти, который необходимо освободить.
При этом система посылает остальным приложениям сообщение WM_CLOSE до тех пор, пока не будет доступно необходимое количество памяти (если это возможно вообще). Если это не возможно по каким-то причинам, то функция вернет false, и придется использовать столько памяти, сколько доступно, или пойти на ухищрения типа memory-mapped files.

Память делится между памятью программ (Program Memory) и памятью файлов (Storage Memory). В настройках системы можно посмотреть и установить распределение использования память вручную:


Но есть способ сделать это программно/ Для этого существуют недокументированные функции из core.dll:
GetSystemMemoryDivision(LPDWORD,LPDWORD,LPDWORD);
SetSystemMemoryDivision(DWORD);

Получение текущего распределения памяти:
BOOL GetSystemMemoryDivision(
LPDWORD pmemStorage,
LPDWORD pmemRAM,
LPDWORD pmemTotal);
где
pmemStorage – размер памяти, отданной под хранилище
pmemRAM - размер памяти отданной под программы
pmemTotalобщий размер памяти

Установка распределения памяти:
DWORD SetSystemMemoryDivision(DWORD memStorage);
где
memStorage - размер памяти, выделяемый под хранилище, в страницах памяти

Возвращаемое значение:
0 – значение установлено успешно
1- значение будет установлено после перезагрузки
2,3 – ошибка (м.б. функция не поддерживатеся)

Пример использования данных функций:
typedef
BOOL (stdcall *GetSystemMemoryDivisionProc)(LPDWORD,LPDWORD,LPDWORD)
typedef
DWORD (stdcall *SetSystemMemoryDivisionProc)(DWORD);

void ReadMemoryDivision()
{
HINSTANCE hCoreDll = LoadLibrary(_T("coredll.dll"));
GetSystemMemoryDivisionProc procGet = (GetSystemMemoryDivisionProc)GetProcAddress(
hCoreDll, _T("GetSystemMemoryDivision"));
DWORD dwStoragePages;
DWORD dwRamPages;
DWORD dwPageSize;
BOOL bResult = procGet(&dwStoragePages, &dwRamPages, &dwPageSize);
FreeLibrary(hCoreDll);
}

void SetMemoryDivision()
{
int nStoragePages = 30 * 256 ; // 30 Mb
HINSTANCE hCoreDll = LoadLibrary(_T("coredll.dll"));
SetSystemMemoryDivisionProc procSet =
(SetSystemMemoryDivisionProc) GetProcAddress(
hCoreDll, _T("SetSystemMemoryDivision"));
DWORD dwResult = procSet(nStoragePages);
FreeLibrary(hCoreDll);
}

Как было сказано выше, выделение памяти в системе происходит кусками, кратными размеру страницы. Это следует учитывать в приложениях, активно использующих динамическую память.
Размер страницы памяти можно определить с помощью функции GetSystemInfo():
void GetSyetemInfo(LPSYSTEM_INFO lpSystemInfo);
структура LPSYSTEM_INFO описывает характеристики процессора, из которых и можно получит интересующее нас значение:


typedef struct _SYSTEM_INFO { 
 union { DWORD dwOemId;  struct { WORD wProcessorArchitecture; // тип архитектуры процессора  WORD wReserved; }; };
DWORD dwPageSize; // размер страницы памяти LPVOID lpMinimumApplicationAddress; // адрес начала области памяти для приложений  LPVOID lpMaximumApplicationAddress; // адрес конца области памяти для приложений DWORD dwActiveProcessorMask;  DWORD dwNumberOfProcessors; // количество процессоров в системе  DWORD dwProcessorType; // тип процессора DWORD dwAllocationGranularity; WORD wProcessorLevel; WORD wProcessorRevision; }
SYSTEM_INFO, *LPSYSTEM_INFO;
Эта же функция, совместно с функцией GetVersionInfoEx может использоваться для л/р “Просмотр информации о системе”


Power Manager.

Функция получения состояния основной и дополнительной батарей:

DWORD GetSystemPowerStatusEx2( PSYSTEM_POWER_STATUS_EX2 pSystemPowerStatusEx2,
DWORD dwLen,
BOOL fUpdate );

Самый важный параметр функции – структура SYSTEM_POWER_STATUS_EX2:

typedef struct _SYSTEM_POWER_STATUS_EX2
{
BYTE ACLineStatus; - состояние внешнего питания
BYTE BatteryFlag; - состояние основной батареи
BYTE BatteryLifePercent; - процент зарядки основной батареи
DWORD BatteryLifeTime; - время, на которое хватит заряда
DWORD BatteryFullLifeTime; - время, на которое хватит полной батареи
BYTE BackupBatteryFlag; - состояние резервной батареи
BYTE BackupBatteryLifePercent; - процент заряда резервной батареи
DWORD BackupBatteryLifeTime; - время остатка заряда резервной батареи
DWORD BackupBatteryFullLifeTime; - полное время резервной батареи
Физические характеристики батареи:
DWORD BatteryVoltage; - емкость батреи (mV)
DWORD BatteryCurrent; - ток батареи (mA)
DWORD BatteryAverageCurrent; - средний ток
DWORD BatteryAverageInterval; - интервал изменения тока
DWORD BatterymAHourConsumed; - емкость батареи в mAH
DWORD BatteryTemperature; - температура батареи
DWORD BackupBatteryVoltage; - емкость резервной батареи
BYTE BatteryChemistry; - тип батареи (LION, NiCD, NIMN… )
} SYSTEM_POWER_STATUS_EX2

Получение таймаутов выключения девайса

таймаут выключения при использовании батареи
SystemParametersInfo(SPI_GETBATTERYIDLETIMEOUT,0,&batIdle,0);
таймаут выключения при использовании внешнего питания
SystemParametersInfo(SPI_GETEXTERNALIDLETIMEOUT,0,&acIdle,0);

Выключение устройства:
keybd_event(VK_OFF,0,KEYEVENTF_SILENT,0);
sleep(60);
keybd_event(VK_OFF,0,KEYEVENTF_SILENT | KEYEVENTF_KEYUP,0);

Перезагрузка устройства:
#define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)

extern "C" __declspec(dllimport) BOOL KernelIoControl(
DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned);

BOOL ResetPocketPC()
{
return KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL);
}

Работа с базами данных.
Windows Mobile содержит средства для работы с базами данных. Они сосредоточены в специальном CEDB API.
Ниже представлен список функций этого API.

CeAddDatabaseProps

Добавление свойства в существующую БД.

CeBeginTransaction

Функция начала транзакции

CeCreateDatabaseEx2

Функция создания новой БД

CeCreateSession

Функция начала новой сессии

CeDeleteDatabase

Функция удаления БД

CeDeleteRecord

Функция удаления записи

CeEndTransaction

Функция завершения транзакции

CeEnumDBVolumes

Функция перечисления созданных БД по GUID.

CeFindFirstDatabaseEx, CeFindNextDatabaseEx

Функции поиска БД

CeFlushDBVol

Функция сброса внутренних буферов БД

CeGetDatabaseSession

Функция получения открытых сессий для открытой БД.

CeGetDBInformationByHandle

Функция возвращает информацию о открытой БД по ее хендлу.

CeMountDBVol, CeMountDBVolEx

Функции монтируют БД из файла .

CeOpenDatabaseInSession

Функция открытия БД

CeOpenStream

Функция создания потока чтения данных из БД.

CeReadRecordPropsEx

Функция чтения свойств записи .

CeSeekDatabase , CeSeekDatabaseEx

Функция установки указателя на запись .

CeStreamRead

Функция чтения данных из потока БД

CeStreamSaveChanges

Функция записи изменения в БД

CeStreamSeek

Функция позиционирования внутри потока БД

CeStreamSetSize

Функция возвращает размер данных в потоке

CeStreamWrite

Функция записи данных в поток

CeUnmountDBVol

Функция размонтирования БД


Проще всего показать работу с базами данных на примере.
Открытие базы данных осуществляется с помощью пару функций CeCreateDataBase и CeOpen

SORTORDERSPEC sos[n]; // параметры сортировки
sos[0].propid = PROP_LPWSTR;
sos[0].dwFlags = 0;
CEOID CeOID = CeCreateDatabase(szBaseName,dwNewDBType, 0, sos);
HANDLE hNewDB = CeOpenDatabase(&CeOID, szBaseName, 0, 0, hWnd);

Позиционирование на определенную запись осуществляется с помощью функции CeSeekDatabase:
CeSeekDatabase(
hNewDB, // хендл таблицы
CEDB_SEEK_BEGINNING, // условие позиционирования
0, // номер записи в базе данных или указатель на значение
&dwIndex); // индекс записи

Прочитать запись можно с помощью функции CeReadRecordProps:
CeReadRecordProps (
hNewDB, // хендл таблицы
CEDB_ALLOWREALLOC, // флаг управления памятью
&wProps, // количество полей в записи
NULL, // перечень полей
&(LPBYTE)pBuff, // буффер, куда сложены данные
&cbData); // размер буфера

Возвращаемые данные складываются в массив структур:
typedef struct _CEPROPVAL { 
 CEPROPID propid;
// тип поля (строка, целое, дата, BLOB и т.д.) WORD wLenData; // длина данных  WORD wFlags; // флаги CEVALUNION val; // сами данные } CEPROPVAL;
Получить значение можно так :
PCEPROPVAL pRecord = (PCEPROPVAL)pBuff;
szValue = pRecord->val.lpwstr;

Пример чтения всех записей таблицы:
while(CeSeekDatabase(hNewDB, CEDB_SEEK_BEGINNING, i, &dwIndex)!=0)
{
CeReadRecordProps (hNewDB, CEDB_ALLOWREALLOC, &wProps, NULL, &(LPBYTE)pBuff, &cbData);
PCEPROPVAL pRecord = (PCEPROPVAL)pBuff;
szValue = pRecord->val.lpwstr;
OutputDebugString(szValue);
}

Для записи поля используется функция CeWriteRecordProps()
Пример записи для таблицы с двумя полями:
// заполним буфер данными
CEPROPVAL NewRecProps[2];
// первое поле
NewRecProps[0].propid = PROP_LPWSTR;
NewRecProps[0].val.lpwstr = szText;
// второе поле
NewRecProps[1].propid = PROP_LPWSTR;
NewRecProps[1].val.lpwstr = szText2;
// запишем
CeWriteRecordProps(
hNewDB, // хендл таблицы
0, // позиция
2, // кол-во полей в записи
NewRecProps); // данные

И наконец, как удалить запись. Для этого можно воспользоваться функцией CeDeleteRecord.
При этом мы должны быть спозиционированы на эту запись:

CEOID oid = CeSeekDatabase (hNewDB, CEDB_SEEK_BEGINNING, RecIndex, &dwIndex);
CeDeleteRecord (hNewDB, oid);


Remote API (RAPI)
RAPI предназначено для управления девайсом с Windows Mobile с помощью удаленного подключения через ActiveSync.
В состав RAPI входят функции для:
  1. Операций с реестром
  2. Операций с базами данных
  3. Операций с файлами и каталогами
  4. Операции по получению системной информации
  5. Удаленный запуск функций из dll

Shell API
Shell API предоставляет различные функции для взаимодействия GUI с системой.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Алексей
Добавлено:05.11.2007 / 12:15
Как позвонить (программно)?
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
#include "phone.h"


LRESULT MakeCall(WCHAR phoneno[255])
{

PHONEMAKECALLINFO phoneinfo;
int result;

//phoneinfo.dwFlags=PMCF_PROMPTBEFORECALLING;
phoneinfo.dwFlags=PMCF_DEFAULT; //
phoneinfo.pszDestAddress=phoneno; //
phoneinfo.pszAppName=0; //
phoneinfo.pszCalledParty = null; //
phoneinfo.pszComment=0;
phoneinfo.cbSize=sizeof(phoneinfo);

result=(PhoneMakeCall(&phoneinfo));
return 0;
}

Colorized by: Eros.CodeSyntaxColor Engine

Как соединиться с интернетом, как прочитать ветку реестра, и как запустить файл
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
wchar_t rezerva[1024];
HKEY Regentry;
DWORD dwSize=1020, dwType;
SHELLEXECUTEINFO sei = {0};

RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Apps\\mGSLab.com mChat", 0, KEY_QUERY_VALUE, &Regentry);
RegQueryValueEx(Regentry, L"InstallDir" , null, &dwType, (unsigned char*)&rezerva, &dwSize);

CONNMGR_CONNECTIONINFO sConInfo;
HANDLE phWebConnection;
DWORD pdwStatus;

memset(&sConInfo, 0, sizeof(CONNMGR_CONNECTIONINFO));
sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
sConInfo.dwFlags = 0;
sConInfo.bExclusive = false;
sConInfo.bDisabled = false;
sConInfo.guidDestNet = IID_DestNetInternet;
ConnMgrEstablishConnectionSync(&sConInfo, &phWebConnection, 60000,&pdwStatus);

Sleep(3000);

sei.cbSize = sizeof(SHELLEXECUTEINFO);
wcscat(rezerva,L"\\mChat.exe");
sei.lpFile = rezerva;
ShellExecuteEx(&sei);

return 0;
}

Colorized by: Eros.CodeSyntaxColor Engine

Отправка SMS
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
#include <sms.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void SendSMS(bool bSendConfirmation, LPCTSTR lpszRecipient, LPCTSTR lpszMessage)
{


SMS_HANDLE smshHandle;
SMS_ADDRESS smsaDestination;
static TEXT_PROVIDER_SPECIFIC_DATA tpsd;
SMS_MESSAGE_ID smsmidMessageID;


LoopS:
// try to open an SMS Handle
if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, null)))
{
// MessageBox(NULL, TEXT ( "Не могу открыть SMS handle" ), TEXT ( "Ошибка!!!" ), MB_OK | MB_ICONERROR);
// return;

Sleep(50);
goto LoopS;
}

stop:
// Create the destination address
smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL;
_tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH);

// Set up provider specific data
tpsd.dwMessageOptions = bSendConfirmation ? PS_MESSAGE_OPTION_STATUSREPORT : PS_MESSAGE_OPTION_NONE;
tpsd.psMessageClass = PS_MESSAGE_CLASS1;
tpsd.psReplaceOption = PSRO_NONE;
tpsd.dwHeaderDataSize = 0;

SmsSendMessage(smshHandle, // 1
null, // 2
&smsaDestination, // 3
null, // 4
(PBYTE) lpszMessage, // 5
_tcslen(lpszMessage) * sizeof(WCHAR), // 6
(PBYTE) &tpsd, // 7
sizeof(TEXT_PROVIDER_SPECIFIC_DATA), // 8
SMSDE_OPTIMAL, // 9
SMS_OPTION_DELIVERY_NONE , // 10
&smsmidMessageID); // 11

if ( smsmidMessageID == 0 )
{
// MessageBox(NULL, TEXT ( "Ваше сообщение не удалось отправить" ), TEXT ( "Ошибка" ), MB_OK);

goto stop;
}
else
// MessageBox(NULL, TEXT ( "Ваше сообщение удачно отправлено" ), TEXT ( "Удача!!!" ), MB_OK);

VERIFY(SUCCEEDED(SmsClose(smshHandle)));
}

Colorized by: Eros.CodeSyntaxColor Engine

Как получить уровень GSM сигнала?
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
#include <windows.h>
#include <tapi.h>
#include <tsp.h>

#define TAPI_API_LOW_VERSION 0x00020000
#define TAPI_API_HIGH_VERSION 0x00020000

DWORD GSMSignalStrength=260;
HLINE hPhoneHandler=0;
HLINEAPP hPhoneAppHandler=0;

DWORD GetTSPLineDeviceID(const HLINEAPP hLineApp,
const DWORD dwNumberDevices,
const DWORD dwAPIVersionLow,
const DWORD dwAPIVersionHigh,
const TCHAR* const psTSPLineName)
{
DWORD dwReturn = 0xffffffff;
for(DWORD dwCurrentDevID = 0; dwCurrentDevID < dwNumberDevices; dwCurrentDevID++)
{
DWORD dwAPIVersion;
LINEEXTENSIONID LineExtensionID;
if(0 == lineNegotiateAPIVersion(hLineApp, dwCurrentDevID,
dwAPIVersionLow, dwAPIVersionHigh,
&dwAPIVersion, &LineExtensionID))
{
LINEDEVCAPS LineDevCaps;
LineDevCaps.dwTotalSize = sizeof(LineDevCaps);
if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID,
dwAPIVersion, 0, &LineDevCaps))
{
BYTE* pLineDevCapsBytes = new BYTE[LineDevCaps.dwNeededSize];
if(0 != pLineDevCapsBytes)
{
LINEDEVCAPS* pLineDevCaps = (LINEDEVCAPS*)pLineDevCapsBytes;
pLineDevCaps->dwTotalSize = LineDevCaps.dwNeededSize;
if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID,
dwAPIVersion, 0, pLineDevCaps))
{
if(0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset),
psTSPLineName))
{
dwReturn = dwCurrentDevID;
}
}
delete[] pLineDevCapsBytes;
}
}
}
}
return dwReturn;
}


bool RegisterPhoneFunctions(HINSTANCE hinst)
{
DWORD dwNumDevs;
DWORD dwAPIVersion = TAPI_API_HIGH_VERSION;
LINEINITIALIZEEXPARAMS liep;
// DWORD dwExtVersion;
LPBYTE pLineGeneralInfoBytes = null;
DWORD dwTAPILineDeviceID;
const DWORD dwMediaMode = LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_INTERACTIVEVOICE;

liep.dwTotalSize = sizeof(liep);
liep.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;

if (lineInitializeEx(&hPhoneAppHandler, 0, 0, TEXT("VobisStart"),
&dwNumDevs, &dwAPIVersion, &liep))
{
return false;
}
dwTAPILineDeviceID = GetTSPLineDeviceID(hPhoneAppHandler, dwNumDevs,
TAPI_API_LOW_VERSION,
TAPI_API_HIGH_VERSION,
CELLTSP_LINENAME_STRING);

if (0xffffffff == dwTAPILineDeviceID)
{
if (hPhoneAppHandler) lineShutdown(hPhoneAppHandler);
return false;
}

// now try and open the line
if(lineOpen(hPhoneAppHandler, dwTAPILineDeviceID,
&hPhoneHandler, dwAPIVersion, 0, 0,
LINECALLPRIVILEGE_MONITOR , 0, 0))
{
if (hPhoneAppHandler) lineShutdown(hPhoneAppHandler);
return false;
}
return true;
}

void UpdatePhoneStatus()
{
LINEDEVSTATUS stat;
if(!lineGetLineDevStatus(hPhoneHandler,&stat))
MessageBox(0,TEXT("error"),TEXT("GSM signal"),MB_OK);
GSMSignalStrength=0;
wchar_t str[20]={0};
_itow(stat.dwSignalLevel,str,16);
MessageBox(0,str,TEXT("GSM signal"),MB_OK);
}

void UnRegisterPhoneFunctions()
{
if (hPhoneHandler) lineClose(hPhoneHandler);
if (hPhoneAppHandler) lineShutdown(hPhoneAppHandler);
}

Colorized by: Eros.CodeSyntaxColor Engine


поиск рулит :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: 5acred Phoenix
Добавлено:05.11.2007 / 12:44
Ммм... Здорово :-)
Тогда ещё вопрос: смотрю все пишут на eMbedded C++. А вижуалстудийный C++ подойдёт? :-)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Алексей
Добавлено:05.11.2007 / 12:51
А вижуалстудийный C++ подойдёт?

Полагаю, что подойдет :)

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: 5acred Phoenix
Добавлено:05.11.2007 / 15:21
Ух ты, дас ист фантастиш! :-))
Thanks a lot.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Наверх

 

Последние статьи

Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)
Автор: Немиро Алексей | добавлено: 27.07.2007 / 14:01 | просмотров: 1326

В данной статье речь пойдет о том, как можно программно заполнить и отправить Web-форму, а также получить результат с использованием довольно простых классов - HttpWebRequest и HttpWebResponse.

Работа с SQL – Запросы
Автор: Хабибулин А. (aka Bille Gates) | добавлено: 22.07.2007 / 04:43 | просмотров: 2388

В данной статье рассмотрены часто используемые SQL-запросы и приведены примеры их использования.

Использование XML.Serialization
Автор: Немиро Алексей | добавлено: 19.07.2007 / 15:38 | просмотров: 661

В данном обзоре речь пойдет об использование XML.Serialization в .NET и ее применении на примере сохранения и считывания настроек программы с использованием синтаксиса языка Visual Basic .NET.

Выбор языка программирования для научных работ (2-я редакция)
Автор: Юдин С. Ю. | добавлено: 15.03.2007 / 02:49 | просмотров: 2703

Идея написания этой статьи возникла после того, как на одном из сайтов по физике http://physics.nad.ru/aniboard/messages/291.html я обнаружил интересный алгоритм моделирования движения тела в поле постоянной напряженности по различным направляющим. Вернее, меня заинтересовал не весь алгоритм, т.к. основа их всех одна (принцип Даламбера, если не считать квазиалгоритма с применением уравнений Лагранжа 2-го рода) и различаются они только способом определения реакций в месте соприкосновения тел. ...

Работаем с MIME
Автор: Немиро Алексей | добавлено: 29.11.2006 / 14:46 | просмотров: 2564

Не так давно мне пришлось немного поработать MIME (Multipurpose Internet Mail Extension) - это стандарт почтовых сообщений, в РуНете (Russian Internet) я не нашел нормального описания спецификации MIME, и посему решил написать небольшую статейку на эту тему. В данной статье вы узнаете об основных особенностях и стандартах MIME, а также научитесь «читать» MIME с использованием синтаксиса языка Visual Basic .NET 2005.

 

Статьи на Kbyte.Ru

Наверх

 

Интересные коды и решения

Поиск и замена
Дата добавления: 16.08.2006 / 18:54 | просмотров: 1065 | платформа: VB

Как переключиться в любое окно?
Дата добавления: 31.07.2006 / 12:51 | просмотров: 937 | платформа: VB

Перекодировка текста из DOS в Windows и обратно
Дата добавления: 31.07.2006 / 12:31 | просмотров: 1054 | платформа: VB

Как удалить все ноды (Nodes) из TreeView?
Дата добавления: 24.03.2007 / 12:15 | просмотров: 573 | платформа: VB .NET

Как запретить перезагрузку страницы при нажатии на кнопку (Button/LinkButton)?
Дата добавления: 31.07.2006 / 13:08 | просмотров: 1386 | платформа: ASP .NET (VB)

Как преобразовать десятичное число в восьмиричное?
Дата добавления: 16.08.2006 / 20:36 | просмотров: 899 | платформа: VB

Форма поверх всех окон
Дата добавления: 31.07.2006 / 12:14 | просмотров: 926 | платформа: VB

Как сделать, чтобы при «редиректе» сервер выдал 301 код статуса, а не 302?
Дата добавления: 31.07.2006 / 13:50 | просмотров: 984 | платформа: ASP .NET (VB)

Как запретить пользователю закрыть форму?
Дата добавления: 31.07.2006 / 12:10 | просмотров: 805 | платформа: VB

Как сделать полупрозрачную форму?
Дата добавления: 01.08.2006 / 17:25 | просмотров: 1180 | платформа: VB .NET

 

Универсальные коды на Kbyte.Ru

Наверх

 

Юмор на Kbyte.Ru

Приходит програмист с работы, а на него жена набрасывается с кулаками:
- Негодяй! Я столько лет тебя кормила, поила, ублажала, а ты, паразит, мне изменяешь!
- ???
- Не прикидывайся! Звонил Витька, спрашивал адрес твоей Аськи!

 

Рейтинг: 422
Всего голосов: 627
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Дедушка, а правда, что в Ленинграде во время блокады
хлеба не было?
- Да, внучек, правда. Масло на колбасу мазали.

 

Рейтинг: 78
Всего голосов: 140
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Хакер приходит к специалисту по паранормальным явлениям:
- Доктор, помогите мне! У меня дома такое творится. Диски по комнате летают, сами в компьютер ставятся и Windows устанавливают!
- У-у! Батенька, да у вас полтерГейтс!

 

Рейтинг: 180
Всего голосов: 269
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Америка, конец 1999 года, сотрудники компании Microsoft сидят в самолете. Полетели куда-то...
Стюардесса:
- ...и в качестве приятной новости хочу сообщить вам, что бортовые компьютеры нашего лайнера управляются операционной системой Windows-2000! Командир и экипаж желают вам приятного полета!
Через секунду - в дверях пробки - все лезут через головы, чтобы побыстрее выбраться!
А один - самый умный - сидит. Стюардесса:
- А вы почему не торопитесь?
- А он у вас и не взлетит!

 

Рейтинг: 458
Всего голосов: 661
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Летят в самолете програмист и инженер. Инженер собрался поспать. Тут програмер к нему с предложением.
(П): - Давай играть в загадки. Ответишь - я тебе 5 баксов, нет - ты мне 5 баксов и наоборот.
(И): - Да я спать хочу, отстань...
(П): - Ну, давай! простая игрушка-то!
(И): - Да не хочу я играть. Я спать вот собрался...
(П): - Ну, ладно. Давай так. Я угадываю - ты мне 5 баксов, ты угадываешь - я тебе 50 баксов. Пойдет?
(И): - Ладно, давай.
(П): - Сколько абонентов ICQ в мире на сегодняшний день?
Инженер молча достает бумажник, вынимает 5 баксов, отдает програмеру.
(П): - Теперь ты спрашивай!
Инженер задумался на пару минут, потом говорит:
- Ладно, что на трех ногах встает, а на четырех опускается?
Програмер распахнул ноутбук, подключился к сетке, обшарил все поисковики на свете, залез в чаты, опросил всех знакомых, пошарился по всем библиотекам и архивам мира, ничего не нашел. Достает 50 "зеленых",отдает инженеру. Инженер достает бумажник, кладет полтинник в него, закрывает бумажник, убирает его в карман и начинает устраиваться для сна.
(П): - Эй, а что это такое, что на трех ногах встает, на четыре опускается?
Инженер молча лезет в карман, достает бумажник, вынимает 5 баксов, отдает програмисту, закрывает бумажник,убирает и ложится спать.

 

Рейтинг: 138
Всего голосов: 204
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

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

 

Рейтинг: 217
Всего голосов: 298
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

История об узком профессиональном мышлении.
Офис-менеджер попросила посидеть за неё в приёмной. Сижу. Заходит тётенька и задаёт вопрос в лоб:
- У вас мыши есть?!
Я, недоумевая, нафига ей наши мыши:
- Только ЮЭСБИшные!
- КАКИЕ-КАКИЕ??!!! - грозно спрашивает она.
Кое-как мы друг друга поняли. Оказалось, что тётка с эпидемстанции пришла мышей на складе травить!

 

Рейтинг: 738
Всего голосов: 1050
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Гуляя по лесу, программист набрел на пещеру.
- А! - крикнул он.
- А!...А!...А... - ответило эхо.
- Эхо! - позвал он.
- Echo is ON, - ответило эхо.

 

Рейтинг: 556
Всего голосов: 825
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Три летучие мыши висят вниз головами.
Вдруг одна - рраз - вверх головой.
(1) - ???
(2) - А, это у нее обморок!

 

Рейтинг: 415
Всего голосов: 606
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

В нашем подъезде около охранника стоит аквариум с рыбками. Аквариум большой, рыбки красивые. За ними постоянно ухаживают. Рядом на стенде висит объявление: "Рыбок не кормить!"
Ниже нетрезвой дрожащей рукой подписано: "А поить можно".

 

Рейтинг: 434
Всего голосов: 656
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Весь юмор на Kbyte.Ru

Наверх


Выпуск подготовил: R-KDR-19826

Редактор: Немиро Алексей

Copyright (c) Nemiro AS, 2005-2007


В избранное