Pull to refresh

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

Development for Windows *
Translation
Если в документации сказано, что вы должны вызвать функцию, значит, вы должны. Возможно, функция ничего не делает, но это не значит, что она ничего не будет делать в будущем.

Сегодняшний пример — функция GetEnvironmentStrings, которая возвращает все переменные окружения текущего процесса в одном блоке для изучения на досуге. Когда вы с этим закончите, предполагается, что вы используете FreeEnvironmentStrings. Так сказано в документации, и если вы это сделаете — вы в порядке (you're in good shape).
Читать дальше →
Total votes 64: ↑58 and ↓6 +52
Views 1.5K
Comments 29

Как мне узнать, что каталог на самом деле — Корзина?

Development for Windows *
Translation
Вот вопрос, вызванный реальным запросом клиента:

Мне нужна функция, которая по пути определяет, является ли это частью Корзины. Я пробовал использовать SHGetSpecialFolderPath с CSIDL_BITBUCKET, но это не работает, потому что Корзина — виртуальный каталог, который является объединением Корзин со всех дисков.

Читать дальше →
Total votes 11: ↑7 and ↓4 +3
Views 1.2K
Comments 12

Работа с альтернативными потоками данных через WinAPI

Development for Windows *
Translation
В прошлой статье я описал, что такое альтернативные потоки и как их можно использовать. Там были примеры работы с ними через командную строку, но можно делать тоже самое и программно стандартными средствами WinAPI.
Ниже дан свободный перевод части статьи, касающейся данного вопроса.
Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Views 4.8K
Comments 11

Программа для работы с окнами как в Windows 7 — при помощи hotkeys: Win + [Up|Down|Left|Right]

Lumber room
Редко пользуешься тем, что пишешь сам. Но вот тот самый редкий случай.
В Windows 7 мне очень понравилась возможность позиционирования окон при помощи сочетаний клавиш:
Win + Left — окно крепиться к левому краю
Win + Right — окно крепиться к правому краю
Win + Up — окно максимизируется
Win + Bottom — окно в нормальном состоянии.
Причем крепление окон к правому краю и левому, по-моему, уж очень удобная штука, ведь сколько раз приходилось самому располагать два окна на экране, с возможностью сравнения или перепечатывания…

Windows 7 не хочу использовать в качестве основной ОСь — потому что бета (или CR, главное что не Release), а возможность описанную выше использовать хочу. И вот — не поленился, и написал программку на C#, которая реализует данный функционал в Vista (скорее всего работает и более ранних версиях — просто не проверял). И как оказалось — задача не такая уж и сложная. Пришлось проимпортировать множество WinApi функций, а сама реализация разделилась на две: а) функционал, который перехватывает нажатия необходимых сочетаний клавиш б) позиционирование окон.
Читать дальше →
Total votes 19: ↑14 and ↓5 +9
Views 608
Comments 24

Работа с окнами как в Windows 7: исправления и дополнения

IT-companies
Программа для работы с окнами в Windows (работает в Vista и WinXP как в x64 так и в x86), написанная пару дней назад, оказалась полезная не только мне. Пару слов о назначении: эта программа упрощает работу с окнами (максимизация, свертывания, перемещение), и самое главное, позволяет запросто размещать окна вот так:

Так вот: были выдвинуты предложения и замечания по реализации, которые я воплотил в жизнь.
Читать дальше →
Total votes 70: ↑55 and ↓15 +40
Views 1.7K
Comments 77

Работа с окнами как в Windows 7: обновление

IT-companies
Программа для работы с окнами в Windows, идеи и удобства были позаимствованы из Windows 7. Программа позволяет при помощи горячих клавиш передвигать окно по экрану, размещать его в стадиях максимизации, обычного окна, а так же самое основное — размещать окна максимизированные на половину экрана. Работает с Vista и WinXP (как x86, так и x64).

В новой версии программы исправлены некоторые ошибки:
а) Не минимизировались диалоговые окна (те, которые не могут менять размер).
б) Программа не работала с окном Google Chrome (об этом подробнее немного ниже).
А так же основное добавлены возможности перемещения окна между экранами.
Скачать новую версию можно отсюда.

Читать дальше →
Total votes 33: ↑19 and ↓14 +5
Views 1.1K
Comments 12

WinAPI хук, который подменяет обращения к реестру

Lumber room
Пытаясь привести любую программу к portable-варианту чаще всего сталкиваюсь с проблемой реестра. Многие любят сохранять там свои настройки что делает их невыносимыми не переносимыми (примеры — Last.fm, ProcExp, etc)

Возникла идея — написать лаунчер, который будет транслировать обращения к определенной ветке в реестре в запись/чтение из файла (например .ini)

Может быть такая программа уже существует? Гугление ни к чему не привело. Можно попробовать самому, но знаний WinAPI явно не хватит. Может у кого-то есть какие-то наработки в этом направлении?

Upd: YasonBy подсказал готовые решения: JauntePE, BoxedApp. Будем пробовать!
Total votes 12: ↑11 and ↓1 +10
Views 839
Comments 32

Перевод: 30 дней Windows Mobile — день первый (С# vs WinAPI)

Development of mobile applications *
Translation

Вступление


Многие Windows Mobile разработчики, пишущие на .NET, слышали или читали замечательный цикл постов Криса Крафта «30 Days of .NET [Windows Mobile Applications]». Я решил начать цикл переводов этих постов, но чтобы было интереснее, в статьях будет представлен перевод не только оригинального поста из блога Криса с примерами на С#, но также и перевод статей от Кристофера Фэрбейрна — энтузиаста, который решил портировать все примеры Криса на C++! На текущий момент портировано 8 из 30 приложений, но это тоже очень неплохо.

При переводе я постараюсь свести к минимуму неотносящиеся к делу лирические отступления, потому что «вода» в переводе становится ещё более жидкой и читать становится невозможно :)

Итак, приступим — первое приложение, обратный отсчёт до полуночи.

Читать дальше →
Total votes 57: ↑43 and ↓14 +29
Views 2.2K
Comments 32

Перевод: 30 дней Windows Mobile — день второй (Winforms/С# vs WinAPI/C)

Development of mobile applications *
Translation
Итак, продолжаем перевод цикла статей 30 дней .NET [Windows Mobile]. Напоминаю, что для большего интереса переводятся сразу две статьи — из блога Криса Крафта (Windows Forms — C#) и Кристофера Фэрбейрна (WinAPI — C). На очереди день второй — управление bluetooth. Предыдущая статья из цикла —
http://habrahabr.ru/blogs/mobiledev/61248/.

Читать дальше →
Total votes 30: ↑22 and ↓8 +14
Views 1.4K
Comments 11

Перевод: 30 дней Windows Mobile, день третий — GPS Compass (.NET vs WinAPI/C)

Development of mobile applications *
Translation
Третья часть из цикла переводов. Сегодня у нас на очереди GPS Compass. Предыдущая статья, менеджер Bluetooth — http://habrahabr.ru/blogs/mobiledev/61703/.

Крис Крафт. C#


Оригинал находится здесь.

Я не дизайнер, но как уже говорилось раньше, приложение должно выглядеть привлекательным. Поэтому для GPS компаса я нашёл очень хорошее бесплатное изображение в Wikimedia. Когда основа для оформления была выбрана, осталось определиться с механизмом получения GPS-данных. Были доступны следующие варианты:
  1. получать данные через последовательный порт
  2. с помощью OpenNetCF GPS библиотеки
  3. используя GPS Intermediate Driver


Читать дальше →
Total votes 24: ↑16 and ↓8 +8
Views 1.9K
Comments 16

Скорость флешек

Computer hardware
Здравствуйте уважаемые любители железа!

Проблема


В сети невозможно найти информацию о скорости конкретной модели USB Flash накопителя(в простонародии флешки). Причина секретности этой информации мне не известна.

Наше решение


Была разработана утилита для проведения тестирования флешки и отсылки результатов на сайт.
image
Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Views 6.1K
Comments 40

Автоматизация тестирования Windows-приложений с использованием .Net

.NET *

Автоматизация тестирования.


Тестирование – деятельность, выполняемая для оценки и улучшения качества программного обеспечения. Эта деятельность, в общем случае, базируется на обнаружении дефектов и проблем в программных системах.
Тестирование программных систем состоит из динамической верификации поведения программ на конечном (ограниченном) наборе тестов, выбранных соответствующим образом из обычно выполняемых действий прикладной области и обеспечивающих проверку соответствия ожидаемому поведению системы.
Основным подходом при тестировании программного обеспечения является тестирование «черного ящика». При данном подходе тестировщику неизвестно внутреннее устройство программы. Тестировщик взаимодействует с программой: вводит данные, нажимает кнопки, манипулирует другими визуальными компонентами и оценивает результаты.
Читать дальше →
Total votes 26: ↑16 and ↓10 +6
Views 9.1K
Comments 17

FTP-протокол + WinSocks на примере простого FTP-клиента (зеркала) на ASM!

Abnormal programming *
Это еще одна статья «давно гуляющая» по интернету, и опять, как автор, сделаю перепост. Думаю пригодиться и тут.

Введение


В этой статье я не ставлю себе целью пересказать все RFC касающиеся протокола FTP, коих не мало, в них вы сможете найти информацию гораздо полнее, попытаюсь лишь в общих чертах познакомить Вас с протоколом FTP и основными приемами работы с ним со стороны клиента.
Читать дальше →
Total votes 10: ↑7 and ↓3 +4
Views 12K
Comments 9

Работа с мониторами через WinAPI

.NET *
Возможности

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

Зачем нужно

В частности мне понадобилась подобная функциональность для создания своей панели в WPF, наподобие панели задач. Собрал информацию по интернету и оформил в удобном для себя виде.

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

В своей программе пишем:

DisplayDispatcher dispatcher = new DisplayDispatcher();


При этом автоматически произойдет поиск мониторов и определение их параметров. Выведем данные в ListBox:

for (int i = 0; i < dispatcher.Count; i++)
                lbMonitors.Items.Add(String.Format("Экран #{0} ({1}x{2}) {3}", 
                    i, dispatcher[i].ScreenWidth, dispatcher[i].ScreenHeight, 
                    ((dispatcher[i].Availability) ? " Основной" : "")));


Кроме ширины и выоты также доступны данные о занимаемой области на виртуальном рабочем столе (MonitorArea) и рабочей области на нем же (WorkArea).
Читать дальше →
Total votes 42: ↑28 and ↓14 +14
Views 6.3K
Comments 16

Создание простой обертки над WinAPI для оконных приложений

C++ *
Sandbox
Некоторое время назад я увлекался созданием оконной библиотеки под Windows на C++. И сегодня я расскажу как написать простую обертку над WinAPI для создания оконных приложений.
Читать дальше →
Total votes 38: ↑19 and ↓19 0
Views 29K
Comments 34

Разбираемся в WinAPI

C++ *
Sandbox

Для кого эта статья


Эта статья адресована таким же, как и я новичкам в программировании на С++ которые по воле случая или по желанию решили изучать WinAPI.
Хочу сразу предупредить:
Я не претендую на звание гуру по C++ или WinAPI.
Я только учусь и хочу привести здесь несколько примеров и советов которые облегчают мне изучение функций и механизмов WinAPI.

Читать дальше →
Total votes 32: ↑13 and ↓19 -6
Views 117K
Comments 31

Пример использования недокументированной функции Windows

Development for Windows *
Sandbox
Большая часть программ от Sysinternals использует недокументированные функции. Мне хватило этого факта, чтобы заинтересоваться этой темой. Интересно, как крутые дядьки используют неописанные функции в своих не менее крутых программах.

Предполагаем, что мы в нужной степени ленивые программисты, знаем С, в ладах с WinAPI и с архитектурой современной ОС Windows и у нас есть Ida Pro, хе-хе. Хотим красиво, быстро и эффективно выполнить задачу, не изобретая велосипед (и чтоб ещё сильно не перенапрячь руки и голову).
Читать дальше →
Total votes 98: ↑89 and ↓9 +80
Views 7.6K
Comments 75

Вызываем функции Windows API (и любые другие функции, написанные на языке Си) джаваскриптом из Node.js

Node.JS *
Tutorial
Со вчерашнего дня, господа, можно написать вот такой скрипт:

// функция преобразования строки JavaScript (UTF-8) в UTF-16
function TEXT(text){
   return new Buffer(text, 'ucs2').toString('binary');
}

var FFI = require('node-ffi');

// подключаемся к user32.dll
var user32 = new FFI.Library('user32', {
   'MessageBoxW': [
      'int32', [ 'int32', 'string', 'string', 'int32' ]
   ]
});

// диалоговое окно
var OK_or_Cancel = user32.MessageBoxW(
   0, TEXT('Привет, Хабрахабр!'), TEXT('Заголовок окна'), 1
);

и, запустив его в Windows, получить желаемый результат — диалоговое окно Windows.

Это стало возможным потому, что модуль node-ffi (обёртку вокруг той необыкновенно полезной библиотеки libffi, которая используется для вызова библиотек на языке Си не менее чем в восьми других языках) вчера портировали на Windows.

Читать дальше →
Total votes 65: ↑51 and ↓14 +37
Views 22K
Comments 33

Библиотека для регистрации и отлова нажатий 'горячих' комбинация клавиш

.NET *
Под комбинацией клавиш понимается любое количество одновременно нажатых клавиш, нажатых в любом порядке, которое может позволить ваша клавиатура. Для конечного пользователя, однако, не стоит превышать количество более пяти в одной комбинации, т.к. игровые клавиатуры есть не у всех.

Пример использования

HotKeysManager manager = new HotKeysManager();
manager.AddHotKey(new HotKeyCombination(() => { MessageBox.Show("Привет, Хабр!"); }) { Keys.LControlKey, Keys.H });

Другой вариант добавления, где в качестве комбинации берутся текущие нажатые клавиши, удобно в случае когда пользователь назначает комбинацию сам. В демке есть пример подобной записи комбинаций.
manager.AddHotKey(new HotKeyCombination(HookManager.CurrentDownedKeys.ToArray(), () => { MessageBox.Show("Привет, Хабр!"); }));


Теперь при нажатии комбинации LeftCtrl+H (или H+LeftControl), мы увидим приветственное сообщение.
Читать дальше →
Total votes 23: ↑22 and ↓1 +21
Views 5.7K
Comments 4

Организация рабочих потоков: синхронизационный канал

C++ *Designing and refactoring *
Представьте себе архитектуру типичного приложения:

Есть рабочий поток движка, выполняющий какую-то функциональность, допустим копирование файлов (архивирование, поиск простых чисел). В общем что-то длительное.
Данный поток должен периодически сообщать информацию о текущем копируемом файле, а также уметь обрабатывать ошибки, допустим ошибка нехватки места на диске.

Графический интерфейс такого приложения должен позволять запускать процесс копирования файлов, уметь приостановить копирование, а также, в случае ошибки, отобразить соответствующий диалог с вопросом к пользователю.

Казалось бы, как можно допустить ошибку в такой простой ситуации?
Читать дальше →
Total votes 14: ↑9 and ↓5 +4
Views 8.2K
Comments 8