Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: Yakon
Дата сообщения: 26.06.2008 21:14
А в том то и проблема, что я не знаю какие окна могут быть открыты.
У меня служба висит, которая должна при наступлении события запускать плейер в полноэкранном режиме.
Вернее он всегда в таком режиме стартует.
Так вот если я делаю прогу, которая затем запускает плейер, работающую как Windows application или Console Application, то есть явно в виде окна, то плейер стартует нормально. Он по умолчанию выходит в полный экран.
А если прога как Windows Service, то запускающийся из неё плейер появляется на заднем плане и в
панеле винды мигает строка этого окна.
А так как прога постоянно отслеживает события, то у меня возможно её работа только в фоне.
Что делать? Как бороться? Может это что-то в политиках Windows XP?
Может в винде нужно что-то подкрутить чтобы запускающиеся от фоновой программы приложения получали фокус?
Автор: Mike13x13
Дата сообщения: 27.06.2008 13:24
На счет подкручивания винды - весьма сомневаюсь
На VB не пишу, не знаю, есть ли там средства передать фокус запущенному приложению/процессу, по идее должны быть, но кто его знает. Посему, могу лищь посоветовать запускать не плеер напрямую, а свое приложение, вся функциональность которого - это запустить плеер поверх всего, возможно перейти в фон и закрыться. Вроде, как доложно сработать.

У меня тоже вопорсик: делел ли кто адд-ины к 2007 офису? Интересует механизм интеграции в офис. Более детально: в 2008 студии делаю адд-ин к, при запуске на выполнее из студии он запускает соответствующее приложение офиса и я его там уже вижу. В самой папке проекта появляюстя файлы манифеста, пдб, всто и длл. Но меня интересует, как сделать типа инсталяшку, чтобы можно было этот адд-ин ставить клиенту, у которого, понятное дело, наличие студии вовсе не предвидится.
Автор: feor
Дата сообщения: 27.06.2008 15:01
Yakon
не силен в WinAPI, но, возможно, сработает посылание приложению чего-нить типа WM_ACTIVATE или WM_SETFOCUS. Чтобы послать сообщение, нужно импортировать функцию SendMessage. Сорри, бейсика не знаю, поэтому пример на шарпе:


Код:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
Автор: BaluBig
Дата сообщения: 28.06.2008 07:12
Yakon
Копай в сторону API-функции SetWindowPos (описание для бейсика есть на www.pinvoke.net). Ей понадобится хендл окна, которым будешь управлять, его получишь через проперть Process.MainWindowHandle.
Автор: recvezitor
Дата сообщения: 01.07.2008 08:02
Нужно чтото похожее на TinyMCE для вэба только для WinForms. Т.е. хотя бы поминимуму RichTextBox с кнопками параграф, шрифт, размер шрифта(мини Word). Наверяка есть чтото готовое(и желаьелно бесплатно)
Автор: dkankind
Дата сообщения: 04.07.2008 10:56
проблема с рекурсивными функциями

Добавлено:
с помощью этих функций провожу копирование ноуда:

public void copy_nodes_from(graph_node from)
{
foreach (graph_node t_gn in from.Nodes) // здесь забывает последний ноуд
{
graph_node temp = new graph_node(t_gn.Text);
this.Nodes.Add(temp);
temp.copy_nodes_from(t_gn);
}
foreach (graph_node t_gn in from.Nodes)
{
foreach (graph_node t_gn_2 in t_gn.ar)
{
graph_node temp = (graph_node)this.Nodes[t_gn.Index];
temp.connect(find_analog_to(t_gn_2));

}
}
}

private graph_node find_analog_to(graph_node to)
{
graph_node parent_to = to;
graph_node parent_this = this;
ArrayList al = new ArrayList();
al.Clear();

for (int i = 0; i < to.Level; i++)
{
int k = parent_to.Index;
al.Insert(0, k);
parent_to = (graph_node)parent_to.Parent;
}
for (int i = 0; i < this.Level; i++)
{
parent_this = (graph_node)parent_this.Parent;
}
foreach (int k in al)
{
parent_this = (graph_node)parent_this.Nodes[k]; // здесь выход за предел
}
return parent_this;
}

затем преобразовываю иерархию и снова копирую и тп. до тех пор, пока не переберутся все возможные варианты. На простом примере отлично работает (несколько ноудов), уже с пяти в середине выполнения возникает ошибка выхода за предел массива.
Не могу понять, в чем дело. Нахожу место, где это происходит. Такое ощущение, что просто в цикле копирования забывает про последний ноуд, так как в ноуде-образце детей четыре, а цикл выполняется только три раза. Проверяю в дебаге.
Может дело в неправильном обращении с памятью? Не может быть переполнение стека или что-нибудь в этом роде, т.к. функции рекурсивные..
Автор: Lihonosov
Дата сообщения: 04.07.2008 12:08
Захотелось сделать интерфейс 2007 офиса.
Какие компоненты нужны для этого?
Автор: GastonR
Дата сообщения: 04.07.2008 15:28
Lihonosov

Цитата:
Захотелось сделать интерфейс 2007 офиса.
Какие компоненты нужны для этого?

Можно DotNetBar
Так же можешь посмотреть в сторону DXperience и ComponentOne
Автор: Mike13x13
Дата сообщения: 04.07.2008 18:30
Lihonosov

Цитата:
Захотелось сделать интерфейс 2007 офиса.
Какие компоненты нужны для этого?

Альтернативное предложение: .Net Framework 3.5+WPF, очень похоже получается
Автор: StarLancer
Дата сообщения: 07.07.2008 01:37
Прошу прощения, но где можно скачать сертификационые экзамены по курсу MCPD

Добавлено:
Прошу прощения, но где можно слить сертификационные экзамены по MCPD
Автор: svasl
Дата сообщения: 07.07.2008 09:43
Тут уже была подобная задача. Необходимо отобразить тестовый файл - лог файл одной программы, в который периодически добавляются строки. Перечитывать каждый раз файл из-за того, что добавилась одна строчка не хотелось бы. Но что-то других вариантов в голову не приходит. Сейчас реализовал так: по watcher'у отслеживаю изменение файла и если есть изменения, то перечитываю, попутно производя разбор строк для удобства пользователя. Но большой минус - файл растет - растет и время такой обработки. Подкиньте варианты.
Автор: eLLoco
Дата сообщения: 07.07.2008 16:53
svasl
навскидку - храни размер, а потом читай байтами от такого смещения до конца.
Автор: Mike13x13
Дата сообщения: 08.07.2008 15:17
svasl
Цитата:
svasl
навскидку - храни размер, а потом читай байтами от такого смещения до конца.

+ если "одна программа" умеет создавать лог-файл при отсутствии такового, рекомендую периодически (или по времени, или по достижении определенного размера) перекидывать его в архив. Если не умеет, то добавить создание "затравочного" пустого лог-файла.

Автор: Lihonosov
Дата сообщения: 09.07.2008 00:16
Программа для расчета конструкций с помощью визуального проектирования.
Самый простой пример - на форме появился квадрат и его можно тягать за края, тем самым изменяя его размер, разделять на части, изменять цвет заливки и т.д.
Даже не знаю с чего начать. В какую сторону думать.
Подскажите кто-что знает!
C#.
Автор: fvgrod
Дата сообщения: 09.07.2008 00:19
Добрый день.
Подскажите как на C# задать IP адрес сетевого интерфейса?
Автор: eLLoco
Дата сообщения: 09.07.2008 07:12
fvgrod
есть подозрение, что только вызовом WinAPI-шных функций. каких не скажу к сожалению, спроси в топике про WinAPI.
Автор: Lihonosov
Дата сообщения: 09.07.2008 13:59
fvgrod
Нашел на VB.NET, может поможет: How to Change the IP Address of the Local Machine Using VB .NET
Автор: fvgrod
Дата сообщения: 09.07.2008 17:45
Lihonosov
Спасибо, буду пробовать.

eLLoco
Подскажи, а как вызвать WinAPI функцию на С#? Ни разу с ними не работал еще.
Автор: Mike13x13
Дата сообщения: 09.07.2008 17:51
fvgrod
Не вполне понятна задача. Может, к примеру, так:
IPAddress adr=IPAddress.Parse("127.0.0.1");
IP адрес сетевого интерфейса = adr;
?
Автор: fvgrod
Дата сообщения: 09.07.2008 19:27
Mike13x13
У меня есть стандартный сетевой интерфейс, мне надо программно менять на нем раз в час ИП адрес. В твоем примере мы просто параметру adr присваиваем некое значение.
Автор: Mike13x13
Дата сообщения: 09.07.2008 20:06
fvgrod
Построчно: 1-я строка: adr "становится" сетевым адресом 127.0.0.1; 2 строчка - этот адрес назначается интерфейсу.
Более понятно без примера твоего кода написать сложно.
Автор: CruelCrow
Дата сообщения: 10.07.2008 00:01
c#, получение изображения из базы данных. Знаю, что в Гугле есть инфа, но по найденному так ничего нормально и не заработало.

Код:
<%@ Page Language="C#" AutoEventWireup="true" %>

<%
//Строка запроса
string query = "SELECT img_data FROM Images WHERE img_id = '"+Request.QueryString["id"]+"'";

//Создание подключения к БД
System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection("user id=qwer;password=qwer;server=localhost;database=TstDB;connection timeout=3");

//Создание запроса
System.Data.SqlClient.SqlCommand read = new System.Data.SqlClient.SqlCommand(query, myConnection);

//Открытие соединения
myConnection.Open();

//Обработка запроса; результат передаётся в img
System.Data.SqlClient.SqlDataReader img = read.ExecuteReader();


if (img.Read()) //Переход к первому (и последнему) результату
{
//Создание массива байт (т.е. бинарных данных) из первой (и последней) колонки данных - короче, из единственной ячейки, содержащей изображение
byte[] b = (byte[])img[0];


//Вывод предпологаемого результата (то бишь "изображения") в браузер
Response.BinaryWrite(b);
}
myConnection.Close();
%>
Автор: eLLoco
Дата сообщения: 10.07.2008 06:35
fvgrod

Цитата:
Подскажи, а как вызвать WinAPI функцию на С#? Ни разу с ними не работал еще.


Под тегом more пример - как поменять обои на рабочем столе. Не скажу, что мой, но мной модифицированный . Суть в том что директивами вида [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] ты должен объявить нужные функции и потом разумно ими пользоваться.

[more]
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.IO;
using System.Diagnostics;
using System.Data;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Collections.Specialized;
using System.Xml;
using Microsoft.Win32;
using System.Media;

namespace DesktopTools {

    public static class WallpaperHelpers {
    
        public enum WallpaperPos {
            Centre = 0,
            Tiled,
            Streched
        };
        
        const int SPI_SETDESKWALLPAPER = 20;
        const int SPIF_UPDATEINIFILE = 0x01;
        const int SPIF_SENDWININICHANGE = 0x02;
        const int COLOR_BACKGROUND = 1;
        const int SPI_GETSCREENSAVEACTIVE = 16;
        const int SPI_SETSCREENSAVEACTIVE = 17;
        const int GW_CHILD = 5;
        const int SW_HIDE = 0;
        const int SW_SHOW = 5;
        const int MOD_ALT = 0x0001;
        const int MOD_CONTROL = 0x0002;
        const int MOD_SHIFT = 0x0004;
        const int MOD_WIN = 0x0008;
        const int WM_HOTKEY = 0x0312;

        private static Bitmap bitmap;

        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern int SystemParametersInfo(
             int uAction, int uParam, string lpvParam, int fuWinIni);

        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern int SystemParametersInfo(
             int uAction, int uParam, ref int lpvParam, int fuWinIni);

        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern int SystemParametersInfo(
             int uAction, int uParam, int lpvParam, int fuWinIni);

        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues);

        public static void LoadBitmapFromFile(string filename) {
            bitmap = new Bitmap(filename);
        }

        public static void SaveBitmapToFile(string filename) {
            bitmap.Save(filename);
        }

        public static void SetWallpaper(Bitmap bitmap) {
            string wallpaperPath = System.Environment.CurrentDirectory + "\\current_wallpaper.bmp";
            bitmap.Save(wallpaperPath, ImageFormat.Bmp);
            SetWallpaper(wallpaperPath, WallpaperPos.Streched, Color.Transparent);
        }
        
        public static void SetWallpaper(string filePath, WallpaperPos pos, Color BkColour) {
            RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
            string strWallpaperPath = System.Environment.CurrentDirectory + "\\current_wallpaper.bmp";
            FileInfo fileInfo = new FileInfo(filePath);

            if (fileInfo.Extension != ".bmp") {
                Image image;
                image = Image.FromFile(filePath);
                image.Save(strWallpaperPath, ImageFormat.Bmp);
            }
            else if (!filePath.Equals(strWallpaperPath, StringComparison.CurrentCultureIgnoreCase)) {
                fileInfo.CopyTo(strWallpaperPath, true);
            }

            switch (pos) {
                case WallpaperPos.Streched:
                    key.SetValue(@"WallpaperStyle", "2");
                    key.SetValue(@"TileWallpaper", "0");
                    break;

                case WallpaperPos.Centre:
                    key.SetValue(@"WallpaperStyle", "1");
                    key.SetValue(@"TileWallpaper", "0");

                    break;

                case WallpaperPos.Tiled:
                    key.SetValue(@"WallpaperStyle", "1");
                    key.SetValue(@"TileWallpaper", "1");
                    break;
            }
            key.Close();

            int[] nElements = { COLOR_BACKGROUND };
            int[] nColors = { System.Drawing.ColorTranslator.ToWin32(BkColour) };
            SetSysColors(nElements.Length, nElements, nColors);

            SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, strWallpaperPath, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

            //GC.Collect();
        }
    }
}

[/more]

Добавлено:
CruelCrow
А в Response не нужно разве задавать Content-Type? То есть ты пытаешься отдать бразеру изображение, а не предупредил его об этом. Попробуй в эту сторону порыть.
Автор: svasl
Дата сообщения: 10.07.2008 12:45
eLLoco
Тогда сложность возникнет отслеживания событий, так как программа должна не только отображать лог, но и реагировать на некоторые события, отслеживаемые по логу. Чтобы было понятно, есть некое серверное приложение, которое по своему протоколу общается с такими же серверами, все свои события, обмен, установка связи и потеря связи отображает в логе, обычный текстовый файл. Необходимо как минимум отслеживать обрывы связи (кроме как по логу это не возможно) и оповещать дежурный персонал.
Автор: TeXpert
Дата сообщения: 10.07.2008 14:39
svasl
Цитата:
Тогда сложность возникнет отслеживания событий...
Это к чему? В твоём способе
Цитата:
Перечитывать каждый раз файл из-за того, что добавилась одна строчка не хотелось бы. Но что-то других вариантов в голову не приходит
сложности ещё больше. Делай как он говорит -- открываешь в режиме чтения, как текстовый файл, если он изменился, читаешь строки от текущего файлового указателя (который запомнен) до конца файла, разбираешь строки, а затем меняешь значение файлового указателя.
Цитата:
...кроме как по логу это не возможно
Это наглая ложь. Если есть возможность, отслеживание обрывов связи надо заложить в логику твоего серверного приложения
Автор: CruelCrow
Дата сообщения: 10.07.2008 14:52
eLLoco
Не думаю.
Вот другой кусок кода, в котором я сначла считываю данные из изображения в переменную, а потом сразу вывожу той же функцией Response.BinaryWrite(b);.


Код:
// путь до изображения
string SourceFilePath = "D:\\background.jpg";

// прочитаем изображение
// (откроем поток)
System.IO.FileStream fs = new System.IO.FileStream(
SourceFilePath,
System.IO.FileMode.Open,
System.IO.FileAccess.Read);

// создадаим массив Byte[]необходимого размера
Byte[] b = new Byte[fs.Length];

// запишем байты изображения в массив b
fs.Read(b, 0, b.Length);
fs.Close();

//Вывод результата
Response.BinaryWrite(b);
Автор: BaluBig
Дата сообщения: 10.07.2008 15:08
fvgrod

Цитата:
Подскажи, а как вызвать WinAPI функцию на С#? Ни разу с ними не работал еще.

Есть такой чудный сайт http://www.pinvoke.net. Там Уже собраны готовые конструкции для вызова апишных функций из C# и VB.NET


Цитата:
директивами вида [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
То, что в квадратных скобках, называется "атрибут". Их много существует и можно создавать свои. Для того, что бы найти в MSDN описание конкретно этого атрибута, нужно поискать по слову "DllImportAttribute".




Добавлено:
Lihonosov

Цитата:
Самый простой пример - на форме появился квадрат и его можно тягать за края, тем самым изменяя его размер, разделять на части, изменять цвет заливки и т.д.
Посмотри на исходники Paint.NET. Они доступны с некоторых пор.
Автор: CruelCrow
Дата сообщения: 10.07.2008 22:32
Проблема решилась. Заключалась она в криворукости и невнимательнсоти.
А именно: когда я загружал изображения в БД, в SQL-запросе вместо скалярной переменной @img_data я использовал обычную вставку вида ...'"+b+"'.... Как результат: в БД оказывалась пресловутая строчка "System.Byte[]".
Автор: VuiDJi
Дата сообщения: 11.07.2008 01:51
Пишу проект на ASP.NET (C#). Подскажите, плз, как вообще сделать, что ы каждый час запускался какой-то скрипт? Во всем этом варюсь недавно, так что прошу ногами не пинать =)
Автор: svasl
Дата сообщения: 11.07.2008 07:01
TeXpert

Цитата:
Это наглая ложь. Если есть возможность, отслеживание обрывов связи надо заложить в логику твоего серверного приложения

Оно не мое, а стороннего разработчика.Так что в приложение заложить не могу ничего, приходится довольствоваться тем, что есть.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.