Или без внешней зависимости:
/**
Walk directory,
list tree without regex excludes
*/
var fs = require('fs');
var path = require('path');
var walk = function (dir, regExcludes, done) {
var results = [];
fs.readdir(dir, function (err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null, results);
list.forEach(function (file) {
file = path.join(dir, file);
var excluded = false;
var len = regExcludes.length;
var i = 0;
for (; i < len; i++) {
if (file.match(regExcludes[i])) {
excluded = true;
}
}
// Add if not in regExcludes
if(excluded === false) {
results.push(file);
// Check if its a folder
fs.stat(file, function (err, stat) {
if (stat && stat.isDirectory()) {
// If it is, walk again
walk(file, regExcludes, function (err, res) {
results = results.concat(res);
if (!--pending) { done(null, results); }
});
} else {
if (!--pending) { done(null, results); }
}
});
} else {
if (!--pending) { done(null, results); }
}
});
});
};
var regExcludes = [/index\.html/, /js\/lib\.js/, /node_modules/];
walk('.', regExcludes, function(err, results) {
if (err) {
throw err;
}
console.log(results);
});
Взгляните на эту ссылку . Возможно, вас заинтересует вариант №3. Вам потребуется обернуть некоторый собственный код, но он должен работать. Также внизу ссылки есть комментарий, который показывает более простой способ сделать это. Взято из комментария (не могу поверить в это, но я сэкономлю вам поиск):
protected override void WndProc(ref Message message)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MOVE = 0xF010;
switch(message.Msg)
{
case WM_SYSCOMMAND:
int command = message.WParam.ToInt32() & 0xfff0;
if (command == SC_MOVE)
return;
break;
}
base.WndProc(ref message);
}
Я сомневаюсь, что вам нужно сделать форму неподвижной. Звучит не очень хорошо. Конечно, вы можете сохранить местоположение окна, когда оно закрывается, и снова открыть окно в этом положении. Это дает пользователю некоторый контроль над расположением окна.
В Windows стиль WS_CAPTION - это неклиентская область, которая позволяет перемещать ваше окно с помощью мыши. Итак, самый простой способ сделать то, что вы хотите, - удалить этот стиль из вашего окна.
Однако, если вам нужна подпись и вы все равно добиваетесь желаемого, то следующий стиль будет заключаться в захвате сообщения WM_NCHITTEST и проверке для HTCAPTION. Если код - HTCAPTION, верните NTNOWHERE. Это предотвратит выполнение стандартной оконной процедурой процедуры перемещения окна по умолчанию.
Это не совсем красиво (при попытке переместить некоторые мигает форма), но вы можете использовать свойство LocationChanged, чтобы сохранить форму там, где вы хотите:
private Point _desiredLocation;
// assign the _desiredLocation variable with the form location at some
// point in the code where you know that the form is in the "correct" position
private void Form_LocationChanged(object sender, EventArgs e)
{
if (this.Location != _desiredLocation)
{
this.Location = _desiredLocation;
}
}
Из любопытства; зачем вам это нужно?